diff options
657 files changed, 49453 insertions, 9284 deletions
diff --git a/.b4-config b/.b4-config new file mode 100644 index 0000000000..ba9520e0ba --- /dev/null +++ b/.b4-config @@ -0,0 +1,4 @@ +[b4] + midmask = https://inbox.sourceware.org/%s + linkmask = https://inbox.sourceware.org/%s + send-series-to = libc-alpha@sourceware.org diff --git a/LICENSES b/LICENSES index f4b24c1a41..e9c3c812f2 100644 --- a/LICENSES +++ b/LICENSES @@ -410,3 +410,26 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +The sysdeps/ieee754/flt-32/e_gammaf_r.c file, taken from the CORE-MATH +project, is distributed under the following license: + +Copyright (c) 2023-2024 Alexei Sibidanov. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makeconfig b/Makeconfig index a87ff7b1d3..a0abc2239b 100644 --- a/Makeconfig +++ b/Makeconfig @@ -1011,6 +1011,12 @@ else +cflags += $(no-fortify-source) endif +# Filter out LFS flags if compiler defines it by default. ++cflags += $(no-file-offset-bits-source) + +# Filter out 64 bit time_t flags if compiler defines it by default. ++cflags += $(no-time-bits-source) + # Each sysdeps directory can contain header files that both will be # used to compile and will be installed. Each can also contain an # include/ subdirectory, whose header files will be used to compile diff --git a/NEWS b/NEWS index d488874aba..1d048de0e6 100644 --- a/NEWS +++ b/NEWS @@ -25,9 +25,27 @@ Major new features: which is why this mode is not enabled by default. A future version of the library may turn it on by default, however. +* On Linux, the sched_setattr and sched_getattr have been added, for + supporting parameterized scheduling policies such as SCHED_DEADLINE. + +* The iconv program now supports converting files in place. The program + automatically uses a temporary file if required. + +* The GNU C Library now supports a feature test macro _ISOC2Y_SOURCE to + enable features from the draft ISO C2Y standard. Only some features from + this draft standard are supported by the GNU C Library, and as the draft + is under active development, the set of features enabled by this macro is + liable to change. Features from C2Y are also enabled by _GNU_SOURCE, or + by compiling with "gcc -std=gnu2y". + Deprecated and removed features, and other changes affecting compatibility: - [Add deprecations, removals and changes affecting compatibility here] +* The big-endian ARC port (arceb-linux-gnu) has been removed. + +* The abort is now async-signal-safe and its implementation makes longjmp + from the SIGABRT handler always abort if set up with setjmp. Use sigsetjmp + to keep the old behavior, where the handler does not stop the process + execution. Changes to build and runtime requirements: diff --git a/Rules b/Rules index 27846abf82..713c225d2e 100644 --- a/Rules +++ b/Rules @@ -143,8 +143,9 @@ endif others: $(py-const) ifeq ($(run-built-tests),no) +# The $(xtests) dependency ensures that xtests are always built. tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \ - $(tests) $(tests-internal) \ + $(tests) $(tests-internal) $(xtests) \ $(tests-container) \ $(tests-mcheck:%=%-mcheck) \ $(tests-malloc-check:%=%-malloc-check) \ @@ -153,8 +154,10 @@ tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \ $(test-srcs)) $(tests-special) \ $(tests-printers-programs) xtests: tests $(xtests-special) -else +else # $(run-built-tests) != no +# The $(xtests) dependency ensures that xtests are always built. tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \ + $(addprefix $(objpfx),$(filter-out $(tests-unsupported), $(xtests))) \ $(tests-container:%=$(objpfx)%.out) \ $(tests-mcheck:%=$(objpfx)%-mcheck.out) \ $(tests-malloc-check:%=$(objpfx)%-malloc-check.out) \ @@ -162,26 +165,28 @@ tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \ $(tests-malloc-hugetlb2:%=$(objpfx)%-malloc-hugetlb2.out) \ $(tests-special) $(tests-printers-out) xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special) -endif +endif # $(run-built-tests) != no tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special)) xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special)) ifeq ($(run-built-tests),no) tests-expected = -else +xtests-expected = +else # $(run-built-tests) != no tests-expected = $(tests) $(tests-internal) $(tests-printers) \ $(tests-container) $(tests-malloc-check:%=%-malloc-check) \ $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) \ $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2) \ $(tests-mcheck:%=%-mcheck) -endif +xtests-expected = $(xtests) +endif # $(run-built-tests) != no tests: $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ $(sort $(tests-expected) $(tests-special-notdir:.out=)) \ > $(objpfx)subdir-tests.sum xtests: $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ - $(sort $(xtests) $(xtests-special-notdir:.out=)) \ + $(sort $(xtests-expected) $(xtests-special-notdir:.out=)) \ > $(objpfx)subdir-xtests.sum ifeq ($(build-programs),yes) diff --git a/SHARED-FILES b/SHARED-FILES index cb0356ce32..228f415dfd 100644 --- a/SHARED-FILES +++ b/SHARED-FILES @@ -166,10 +166,19 @@ gettext: intl/plural.y intl/textdomain.c +# The following files are bundled from upstream Linux 6.10 for FUSE testing +# support. +linux: + support/bundled/linux/COPYING + support/bundled/linux/LICENSES + support/bundled/linux/LICENSES/exceptions/Linux-syscall-note + support/bundled/linux/LICENSES/preferred/GPL-2.0 + support/bundled/linux/include/uapi/linux/fuse.h + # The following files are shared with the upstream Unicode project and must be # updated regularly to stay in sync with the upstream unicode releases. # -# Merged from Unicode 15.1.0 release. +# Merged from Unicode 16.0.0 release. unicode: localedata/unicode-gen/UnicodeData.txt localedata/unicode-gen/unicode-license.txt @@ -180,9 +189,8 @@ unicode: # The following files are shared with the upstream tzcode project and must be # updated regularly to stay in sync with the upstream releases. # -# Currently synced to TZDB 2024a, announced and distributed here: -# https://mm.icann.org/pipermail/tz-announce/2024-February/000081.html -# https://data.iana.org/time-zones/releases/tzdb-2024a.tar.lz +# Currently synced to TZDB 2024b, announced and distributed here: +# https://github.com/eggert/tz/releases/tag/2024b tzcode: timezone/private.h timezone/tzfile.h @@ -220,3 +228,43 @@ tzdata: timezone/leapseconds # This is yearistype.sh in the parent project timezone/yearistype + +# The following files are shared with the CORE-MATH project +sysdeps/ieee754/flt-32/e_gammaf_r.c + (file src/binary32/tgamma/tgammaf.c in CORE-MATH) + Instructions to merge new versions: + - change the function name from cr_tgammaf to __ieee754_gammaf_r + - add "int *signgamp" as 2nd argument and add at the beginning: + if (signgamp != NULL) *signgamp = 1; + - remove the errno stuff (this is done by the wrapper) + - replace 0x1p127f * 0x1p127f by math_narrow_eval (x * 0x1p127f) + - replace 0x1p-127f * sgn[k&1] by math_narrow_eval (0x1p-127f * sgn[k&1]) + - add libm_alias_finite (__ieee754_gammaf_r, __gammaf_r) at the end +sysdeps/ieee754/flt-32/s_exp10m1f.c + (file src/binary32/exp10m1/exp10m1f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/s_exp2m1f.c + (file src/binary32/exp2m1/exp2m1f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/s_expm1f.c + (file src/binary32/expm1/expm1f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/e_log10f.c + (file src/binary32/log10/log10f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/s_log2p1f.c + (file src/binary32/log2p1/log2p1f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/s_log1pf.c + (file src/binary32/log1p/log1pf.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. +sysdeps/ieee754/flt-32/s_log10p1f.c + (file src/binary32/log10p1/log10p1f.c in CORE-MATH) + - The code was adapted to use glibc code style and internal + functions to handle errno, overflow, and underflow. diff --git a/benchtests/Makefile b/benchtests/Makefile index d228e9e68a..d60fe789c8 100644 --- a/benchtests/Makefile +++ b/benchtests/Makefile @@ -42,10 +42,13 @@ bench-math := \ exp \ exp10 \ exp10f \ + exp10m1f \ exp2 \ exp2f \ + exp2m1f \ expf \ expm1 \ + expm1f \ floor \ floorf \ fmax \ @@ -68,9 +71,13 @@ bench-math := \ llrintf \ log \ log10 \ + log10f \ + log10p1f \ log1p \ + log1pf \ log2 \ log2f \ + log2p1f \ logb \ logbf \ logf \ @@ -94,6 +101,7 @@ bench-math := \ tan \ tanh \ tgamma \ + tgammaf \ trunc \ truncf \ y0 \ diff --git a/benchtests/exp10m1f-inputs b/benchtests/exp10m1f-inputs new file mode 100644 index 0000000000..7eb6a1e415 --- /dev/null +++ b/benchtests/exp10m1f-inputs @@ -0,0 +1,2389 @@ +# These values are copied from exp10f-inputt +## args: float +## ret: float +## includes: math.h +## name: workload-spec2017.wrf-adapted +0x0p+0 +-0x1.cca64ap+0 +-0x1.570ef6p-2 +0x1.1aa2d2p+2 +0x1.0f756cp+2 +0x1.0f4c5p+2 +-0x1.4e5cbap-1 +-0x1.10efc8p+0 +-0x1.ca213p-2 +0x1.12c966p+2 +0x1.acffep+1 +-0x1.8118a2p-3 +-0x1.d5e3a2p+3 +-0x1.480aep+3 +0x1.f608d6p+1 +-0x1.32fc0cp+2 +-0x1.4b229ap-1 +0x1.d0b80ep-2 +0x1.19a5b6p+2 +0x1.a42b5ep+1 +0x1.1a21dep+2 +0x1.92e89p+1 +-0x1.7b9ac4p+0 +0x1.66ce46p+0 +0x1.5f4bbcp+1 +0x1.668d4ap-1 +-0x1.a295e4p-1 +-0x1.1bdf4cp-4 +0x1.5d9048p-3 +-0x1.97a6e8p+0 +0x1.5d5c2cp-1 +0x1.3b3926p+1 +0x1.5df8b6p-2 +-0x1.701c4ep+1 +-0x1.831428p+1 +-0x1.091166p+0 +0x1.7bb7dep+0 +-0x1.71320ap+1 +-0x1.000146p+1 +-0x1.31ed22p-4 +-0x1.4b926ap+2 +-0x1.429b84p-2 +-0x1.447decp+1 +-0x1.9c76f6p-2 +0x1.7a8d26p+1 +-0x1.abdd4cp+0 +-0x1.de3accp-2 +0x1.8a5286p+0 +0x1.fda316p-5 +-0x1.06p+5 +-0x1.4be122p-1 +0x1.9bac1ap+1 +-0x1.44cfb2p+1 +0x1.14b2d2p+2 +-0x1.322fb6p-4 +0x1.7c65bap+1 +0x1.9a5056p-1 +0x1.16f75p+2 +-0x1.14c492p+0 +-0x1.179386p+1 +-0x1.f7543ep-4 +-0x1.282e94p+1 +-0x1.32391ep-4 +-0x1.52f73ap+1 +0x1.75bdb6p+1 +-0x1.77763p-1 +0x1.a5d2d6p+0 +0x1.827938p-1 +0x1.12d21cp-1 +-0x1.11a162p-1 +-0x1.3be4d8p+1 +0x1.49d97ep+1 +0x1.19b118p+2 +0x1.19c026p+2 +0x1.e3963cp-2 +0x1.96eb86p+1 +-0x1.180652p+0 +-0x1.59b81cp+1 +0x1.d6e006p-2 +-0x1.15d164p+1 +0x1.233a6ep+0 +-0x1.27864ep+2 +-0x1.30e92cp-4 +-0x1.2e7c2p+1 +-0x1.4fe7c8p+1 +-0x1.35eadap-4 +0x1.484e6p+1 +0x1.7938eap+1 +-0x1.18e616p+2 +-0x1.36859ep-1 +0x1.f4b8dp-2 +-0x1.863916p-2 +0x1.643824p+0 +-0x1.7568e8p+0 +0x1.9c885ep+1 +-0x1.34527cp-2 +-0x1.481836p-1 +-0x1.0f8e4ap-1 +-0x1.9fbb48p+1 +-0x1.af4f5ep+0 +0x1.a88166p-2 +-0x1.9fcf5ap-1 +0x1.821a5p+1 +0x1.ab25cep+1 +-0x1.224cb8p+2 +0x1.96a544p+1 +0x1.a19cb2p-4 +-0x1.4c92f2p-3 +0x1.a0b7c8p+1 +-0x1.499ed8p+1 +-0x1.2c6602p+1 +-0x1.e6132ap-2 +-0x1.7198ccp+1 +0x1.a93194p+1 +-0x1.aadde2p+1 +0x1.d4c3b2p-3 +-0x1.c22fb6p-1 +0x1.703a62p+0 +-0x1.b82142p+0 +0x1.735e98p+1 +0x1.6b8af8p+1 +0x1.de7796p-6 +-0x1.aa786cp-1 +-0x1.6e4dap+3 +-0x1.f6e0fap-2 +-0x1.25239p-2 +-0x1.25dd98p+1 +0x1.1fab24p-2 +-0x1.308cdp-4 +-0x1.7f6a14p+1 +-0x1.fadcf8p-1 +0x1.f166e6p-4 +-0x1.b37p-3 +0x1.6735dcp-1 +0x1.864b22p+1 +0x1.893d72p+1 +-0x1.2c9ddcp+1 +0x1.9a36acp+1 +0x1.1947d2p+2 +-0x1.2a6352p+0 +-0x1.d8751ap+1 +-0x1.b64acap-4 +0x1.40f61cp+1 +0x1.70676ep+1 +-0x1.1680eap-1 +-0x1.f6604ep+0 +0x1.116176p-1 +0x1.6549cp-1 +-0x1.f7aa4ap+1 +-0x1.2bdf2ep-2 +0x1.69eed8p+1 +0x1.f2dc02p-2 +0x1.a145e6p+0 +0x1.8083d6p+1 +0x1.1b9a32p+0 +-0x1.3c9fp+1 +0x1.626386p+1 +-0x1.457912p-2 +0x1.138216p+2 +0x1.639d8cp+1 +0x1.12117cp+2 +-0x1.4970bcp-3 +-0x1.f0c518p-3 +-0x1.9c45b8p+1 +0x1.8fee74p+0 +0x1.4143acp-1 +-0x1.3c5f9ap-1 +0x1.5cf878p-2 +-0x1.122a6ep-4 +-0x1.de549ap-6 +-0x1.f3800ap+0 +0x1.721f64p+1 +0x1.902a2ep+1 +0x1.901aaep+1 +-0x1.816496p-4 +-0x1.a83cb4p+0 +0x1.271acep-2 +0x1.0d212p+2 +0x1.1cdf14p-1 +0x1.6269e2p-2 +-0x1.b93846p+1 +-0x1.6024c2p+0 +-0x1.582c58p+1 +-0x1.712d54p+1 +-0x1.479afcp+0 +-0x1.2e518p-8 +0x1.1b4d6p-2 +0x1.08ea6ap+0 +-0x1.725e56p+3 +-0x1.36a72cp-3 +0x1.376aeap-1 +0x1.2a1632p-3 +-0x1.28c472p+1 +-0x1.de1874p-1 +0x1.10e30ap+1 +0x1.e61a4p-3 +0x1.86d724p+0 +0x1.d9e3eap+1 +-0x1.797188p+0 +-0x1.75478ap-2 +-0x1.41b4ccp+1 +-0x1.30429ep-3 +0x1.6d356p+1 +-0x1.092c4ep-4 +-0x1.4f37dp+1 +-0x1.6c4f8ap+1 +-0x1.9a40eap-2 +-0x1.24069ap+4 +0x1.1a824cp+2 +-0x1.d0719ap-2 +-0x1.84f73cp+1 +0x1.1d4d62p+2 +-0x1.1dce7cp+3 +0x1.3102f4p-4 +-0x1.d5e8b8p-2 +-0x1.215e3p+4 +-0x1.e07cc8p+0 +-0x1.6ce266p-2 +0x1.d555d2p-1 +0x1.f67854p-6 +0x1.15a992p-1 +0x1.ab4f76p-2 +-0x1.2b9d0ap+1 +-0x1.a4c9fcp-2 +0x1.17645p+2 +-0x1.338ea4p+0 +-0x1.fbcf2cp-2 +-0x1.03e628p+1 +-0x1.fc0ad6p+0 +0x1.8f8294p+1 +0x1.8b8c84p-2 +0x1.d34d66p-3 +0x1.0d402cp+2 +0x1.158cep+2 +-0x1.35a2e6p-4 +-0x1.2e08acp-4 +-0x1.48242ep+1 +-0x1.29ed7ap-4 +-0x1.c7b494p+0 +-0x1.193bacp-1 +0x1.578c62p-1 +0x1.53c52p-1 +-0x1.493442p-4 +-0x1.da613cp-4 +-0x1.2f2194p-4 +-0x1.2fb2b6p-4 +0x1.d9e34p+1 +0x1.75d608p+1 +0x1.126b06p+2 +0x1.0142d4p+1 +-0x1.644758p+1 +-0x1.2e3b98p-4 +-0x1.be8ddep+1 +0x1.49824cp-3 +-0x1.35b23ap-1 +-0x1.2356b4p-1 +0x1.18b5acp+2 +0x1.47077cp+1 +-0x1.173db8p+1 +-0x1.665c4ap+1 +-0x1.1c6faap+1 +-0x1.310e3ap-4 +0x1.0e699cp+1 +-0x1.9aab7p+1 +-0x1.cc23acp-2 +0x1.5437c6p-1 +-0x1.0a05d2p+0 +0x1.085f18p-1 +-0x1.35b786p-4 +-0x1.6baad6p-3 +-0x1.3231dap-4 +-0x1.32939ep-4 +0x1.482856p-2 +-0x1.35a4a8p-4 +0x1.706bap-1 +-0x1.4acaf8p-1 +0x1.19de58p+2 +0x1.d143f2p-2 +-0x1.7a380ap-1 +-0x1.784deap+1 +0x1.4feed4p-2 +-0x1.261576p+4 +-0x1.ea0ce6p-5 +0x1.97c84ep+1 +0x1.08b326p+1 +-0x1.19f4ap+2 +-0x1.299982p-4 +-0x1.e70ce6p+2 +0x1.a64db8p-3 +-0x1.7423acp-2 +0x1.1b4bap+2 +-0x1.348e26p-4 +0x1.68ebc4p+1 +-0x1.9cfd68p-2 +-0x1.3bad8ep+1 +-0x1.c3cc6cp-1 +0x1.3bc00ap-1 +0x1.0eb82cp+2 +0x1.44cd7ap+2 +-0x1.4e79aep+0 +0x1.17402ep+2 +-0x1.b0636p-3 +0x1.0d71b4p+2 +0x1.bbe7bcp+0 +0x1.5bfe3ep+1 +-0x1.8edcf2p+0 +-0x1.36303p-4 +0x1.4e3ca8p+2 +0x1.319214p-1 +-0x1.09180ap+4 +0x1.726b38p+1 +0x1.9d1a86p-1 +-0x1.25fb1cp+2 +0x1.d9a272p-2 +0x1.8e93aep+1 +0x1.8aef1ep-2 +-0x1.9131eep+0 +-0x1.5e9edcp+0 +-0x1.dc1ef2p+0 +-0x1.661d22p-1 +-0x1.9ad2d6p-1 +0x1.2f195ap+1 +-0x1.5bba84p+1 +0x1.7cbff8p+1 +-0x1.300c18p-4 +0x1.d9e494p+1 +-0x1.36921cp-4 +0x1.195306p-1 +-0x1.81fda2p+1 +0x1.373e84p-2 +-0x1.dba4c6p-3 +0x1.e5196cp-2 +-0x1.223552p+1 +0x1.439eb6p+0 +-0x1.00184p+3 +-0x1.0c2daap+0 +0x1.52b014p+0 +0x1.6ff002p+0 +-0x1.33ea92p-4 +0x1.b682fp-4 +0x1.51e056p-3 +0x1.2da342p-3 +-0x1.2b40b8p-4 +-0x1.0ec358p+1 +-0x1.3648f2p-2 +0x1.410ccep-3 +-0x1.06b8f4p+0 +0x1.3716c8p+1 +0x1.9d24d2p+1 +-0x1.744f56p+1 +0x1.79f3ccp+1 +-0x1.faab38p+0 +-0x1.7c307p+1 +0x1.ecaf74p-4 +-0x1.46013cp-3 +0x1.304aa4p+1 +-0x1.2d2e0ap+0 +0x1.9ec978p+1 +-0x1.7ace0ap+0 +-0x1.36a862p-5 +0x1.1037bp+2 +-0x1.4ecc52p+1 +0x1.7b09bcp-2 +-0x1.725004p+1 +0x1.0eb17ep+2 +0x1.a3874ap-5 +0x1.621192p-2 +0x1.0aeaeap-1 +0x1.5c0f0ep-4 +0x1.d43cb6p-1 +0x1.33a642p+1 +-0x1.32e16p-1 +0x1.0c5826p-1 +-0x1.3d5f08p+0 +0x1.80616cp+1 +-0x1.151ff8p+2 +0x1.7734a4p-5 +0x1.c6bb7cp-1 +0x1.165c08p-2 +-0x1.25e9e2p-1 +0x1.824d56p+1 +-0x1.1db7f6p+1 +0x1.1550c4p-1 +0x1.abfabep-5 +0x1.5be644p-3 +-0x1.9736dp+1 +-0x1.337be6p-4 +0x1.1d50fp+2 +0x1.12f136p-3 +-0x1.4fd9b6p+1 +0x1.b48b8p-1 +0x1.928bcp+1 +-0x1.358bcep-4 +-0x1.4e92eap+0 +-0x1.4b13b4p+1 +0x1.ab4ee6p+1 +0x1.8176a4p+1 +-0x1.b9c5b6p+0 +-0x1.739fbep-2 +-0x1.e699p-3 +-0x1.0e7c3p-4 +0x1.07b746p+1 +0x1.6d05ccp+1 +0x1.d9e82ep+1 +0x1.0aae92p-8 +0x1.66466ap-3 +-0x1.ef3d28p+2 +0x1.c3e356p+0 +-0x1.ee3f16p-6 +0x1.c39f2ap-3 +-0x1.66a4cap-3 +-0x1.bfee84p-1 +0x1.81f6ep-4 +-0x1.7e7f5cp+1 +-0x1.31852cp-4 +0x1.6bed6cp-2 +-0x1.b628e2p-3 +0x1.bc7314p-2 +0x1.1e193ap-1 +-0x1.502deap+1 +-0x1.c5789cp-4 +-0x1.267a3ap-1 +0x1.44f054p-1 +-0x1.2fc60ap-4 +0x1.6d2b4ap+0 +-0x1.35983ap+4 +-0x1.73498p+0 +-0x1.7e7b2cp-7 +0x1.015cp-1 +-0x1.342c98p-4 +0x1.8d1564p+1 +0x1.168e4ap-3 +-0x1.42a24cp+1 +0x1.112dc6p-2 +0x1.e20982p-1 +-0x1.6ad56p+3 +0x1.b33ed2p+1 +0x1.7ae86cp+1 +0x1.dfb8dcp+0 +-0x1.0589dep+1 +0x1.24d3c8p-3 +0x1.499b44p+1 +-0x1.2ab0d4p+0 +-0x1.f305b4p-1 +-0x1.8424bap+0 +-0x1.c56a9cp+0 +0x1.8cc9f4p+1 +-0x1.43400ap+4 +-0x1.e3ca3ep-3 +0x1.4f4cf4p-4 +-0x1.af6c6ep+0 +0x1.544da4p+1 +0x1.3eb6d4p+0 +-0x1.6c4318p+1 +0x1.57004cp-1 +-0x1.01ccacp+0 +0x1.144bc6p-1 +0x1.2476ccp+1 +0x1.0deaecp+2 +-0x1.bdfe9cp-1 +-0x1.ceea0cp+1 +0x1.13232p-1 +0x1.58349cp-2 +-0x1.d430ccp-1 +0x1.91c14p+1 +0x1.436bccp+0 +0x1.0dd524p+2 +-0x1.eab124p-1 +-0x1.5307ap-2 +0x1.1cacb4p+2 +-0x1.d6441ap-2 +-0x1.32b6a8p-4 +0x1.1bd4ep+2 +-0x1.a591d2p-11 +-0x1.301e24p-4 +-0x1.329332p-2 +-0x1.1e6754p+1 +0x1.35b7a6p+0 +0x1.542d52p-5 +-0x1.48e368p+1 +0x1.58ceep-5 +0x1.82cdep+1 +0x1.58be32p-1 +-0x1.3c2a3p-2 +0x1.9409bap+1 +0x1.4b97bap+1 +0x1.17ca0ep+2 +-0x1.366acap-4 +-0x1.f3ace4p-1 +0x1.a0c9f8p+1 +-0x1.a2ea86p-2 +-0x1.cbde64p-2 +-0x1.7a887cp+1 +-0x1.2dd12ap-4 +0x1.a3c1ap+1 +-0x1.2b8f2ap+1 +-0x1.d42268p+1 +0x1.706948p-4 +-0x1.285f8p+1 +-0x1.7f58bcp+0 +-0x1.25ebeap+0 +-0x1.1946b8p-2 +-0x1.902626p+2 +-0x1.b2ce32p-2 +-0x1.124bc4p-3 +-0x1.075acap+1 +-0x1.32c68ap-4 +-0x1.a030bap-2 +0x1.308c56p+1 +0x1.933c64p-5 +0x1.17dafep+2 +-0x1.722dep+1 +-0x1.b2262ep-1 +-0x1.4ee21ep-3 +0x1.0a7eeep+1 +-0x1.87e73cp-1 +0x1.9dc436p-1 +0x1.ee2428p-3 +-0x1.117f16p-2 +0x1.daa778p-2 +-0x1.2dbecap-4 +0x1.0d7dd6p+2 +0x1.81440ap+1 +-0x1.88f954p+0 +-0x1.8abfd8p-2 +0x1.12f78ep+2 +0x1.1d307p+2 +0x1.b631eap-2 +-0x1.8469c6p-1 +-0x1.9091c2p+1 +0x1.4fcf6p-2 +-0x1.71764p+1 +0x1.709448p-1 +-0x1.c2300cp+0 +-0x1.530c38p-2 +0x1.247446p-1 +0x1.984faep+1 +0x1.571c4ep-6 +-0x1.939a94p+0 +-0x1.657dd4p+1 +-0x1.2bf2ccp-4 +0x1.7d061p-3 +0x1.e446b2p-4 +0x1.903e9ep+0 +-0x1.36822ap+0 +0x1.728a0cp+1 +-0x1.b795acp+0 +-0x1.dd215ep+0 +-0x1.5cb27ep+1 +0x1.66108p-4 +0x1.a783b4p-1 +0x1.e6a6bcp-5 +-0x1.182e36p-5 +-0x1.344ffep-4 +0x1.4174a4p+1 +0x1.8eeb4ap+1 +-0x1.1e29bep+1 +-0x1.0c7b16p+0 +-0x1.d5069ap+0 +0x1.12761ap-1 +-0x1.1082d6p-7 +-0x1.10d2c8p+0 +-0x1.502f0ep+1 +0x1.7a4a04p-6 +-0x1.2747bp+1 +-0x1.313d6cp-4 +-0x1.22d6fep+0 +-0x1.288d02p+1 +0x1.6193a8p+0 +0x1.d178acp-2 +-0x1.74beb8p+1 +-0x1.768aaep+0 +-0x1.45a396p+1 +-0x1.366bd6p+0 +0x1.51322ep-3 +0x1.0f4488p+2 +-0x1.1c98d2p-1 +0x1.b2dc9cp+1 +-0x1.4adad4p+1 +-0x1.0b063ap-1 +-0x1.1d91f8p+0 +0x1.1dff62p+2 +-0x1.e888cap+3 +0x1.0cccfp+1 +-0x1.352b56p-4 +-0x1.28e938p-5 +0x1.9a6954p-2 +-0x1.4164fcp-1 +0x1.9d36e8p+1 +-0x1.3067aap-4 +-0x1.f60dfap-1 +0x1.c7d7acp+0 +-0x1.358ea8p-4 +0x1.c3579cp+0 +0x1.d9e3d6p+1 +-0x1.3a0566p+0 +-0x1.b89bacp-1 +0x1.d58a28p-1 +-0x1.7601aep+1 +-0x1.4ec9f8p-10 +-0x1.6d5776p+0 +0x1.b2bfd8p-3 +0x1.88677p-1 +0x1.2db776p+1 +-0x1.a7cb9cp+0 +-0x1.31ba78p-4 +-0x1.ebd996p+1 +-0x1.410194p+0 +-0x1.2ddc58p-4 +0x1.d943a6p+0 +0x1.14a0d2p-5 +0x1.0dd346p+2 +0x1.f1b254p-2 +-0x1.3cc36ep+1 +0x1.5d021ep-2 +-0x1.0c30f4p+0 +-0x1.2beac4p+1 +0x1.9e81ap+1 +0x1.af36ap+1 +0x1.922238p+1 +-0x1.80886p-3 +-0x1.c29136p-2 +0x1.3d44b6p-3 +-0x1.edd8eap+0 +-0x1.a847acp+0 +0x1.0f79f6p+2 +0x1.53f778p+0 +-0x1.309952p-4 +-0x1.35d438p-4 +-0x1.c10eeep-3 +-0x1.806394p+0 +0x1.ff7b88p+0 +0x1.69316ep+1 +-0x1.6d0674p+0 +0x1.472c1ep+0 +0x1.0e8cbp+2 +-0x1.5ef1a4p+0 +-0x1.bab7dcp-1 +-0x1.36adb6p-4 +0x1.6dca62p+2 +-0x1.1c474ep+2 +-0x1.868c8ep-2 +-0x1.4ced6ap+2 +0x1.159d72p+2 +0x1.3c9656p+1 +0x1.4fae6p-2 +-0x1.4f8a48p+1 +0x1.bba5eap-3 +0x1.a5b6b8p+1 +-0x1.2a69f2p+2 +0x1.d2f84p-4 +-0x1.33012cp-1 +-0x1.b514e2p-1 +0x1.b23606p+1 +0x1.18a2ap+2 +-0x1.d75522p-1 +-0x1.a5bb52p-6 +0x1.9547f8p+1 +0x1.8c7182p+1 +0x1.1ac8bap+2 +-0x1.2864p-4 +-0x1.c6baa8p-2 +0x1.19c122p+1 +0x1.65acd6p-5 +0x1.c76bd8p-2 +0x1.194a94p+2 +0x1.288ad8p+1 +0x1.b2ebfp+0 +-0x1.1b7bdp+0 +-0x1.32e204p-4 +-0x1.7bc0dep-4 +0x1.68c198p-1 +0x1.1a8ef8p+2 +-0x1.b8ed5p+0 +-0x1.3109d4p-4 +0x1.3cfa08p-1 +0x1.2aebdep+1 +0x1.7cf2b2p+0 +0x1.40ea82p+2 +-0x1.6d1d98p-2 +-0x1.5fbf82p-1 +-0x1.83ed44p+1 +0x1.2e3f04p-1 +0x1.d9e37cp+1 +-0x1.432864p+1 +-0x1.cda79ep-1 +0x1.0da60ap+2 +0x1.840bf6p+1 +-0x1.3496e2p+1 +0x1.82c98p+1 +0x1.50037ep-2 +-0x1.4f6732p+1 +0x1.f7da28p-4 +-0x1.a228a8p-2 +-0x1.0cd8p-2 +0x1.a1db86p-3 +-0x1.594874p-1 +0x1.20835cp+0 +0x1.0f6acp+1 +0x1.59515ep-2 +0x1.8bea1p+1 +0x0p+0 +0x1.0fcd7p+2 +-0x1.086928p+1 +-0x1.2c535cp-4 +0x1.3d6cccp-1 +-0x1.92a8ecp+1 +-0x1.2fb916p-4 +0x1.747f3cp+1 +-0x1.a4386ep+0 +-0x1.d30c56p-2 +0x1.0fde5ep+1 +-0x1.36136ap+1 +-0x1.501534p+1 +-0x1.14c224p+2 +-0x1.d05bb6p-1 +0x1.be78dap-7 +-0x1.0451c2p-3 +0x1.bcd7d4p-2 +-0x1.4912bp-2 +0x1.a572dcp+1 +-0x1.35b01p-4 +0x1.a817fep+1 +-0x1.347608p-1 +-0x1.ceacd6p+1 +0x1.dc80d2p-4 +0x1.815a7ap+1 +0x1.1a75e6p+2 +0x1.ed45ccp-2 +0x1.3d0098p+0 +-0x1.c25928p+0 +0x1.189d3ap+2 +-0x1.4537dep-4 +0x1.4fb96ep+1 +0x1.14734ep+2 +-0x1.4d5efcp-3 +-0x1.18b74cp-2 +-0x1.5d6d18p+0 +-0x1.3590a8p+1 +-0x1.557742p-1 +-0x1.04313cp-1 +0x1.23ec9p-6 +0x1.246ef4p+0 +0x1.a35876p+1 +0x1.8770aap-2 +-0x1.32ca5p-4 +-0x1.4a9294p+0 +-0x1.79031ep-1 +0x1.40b186p-3 +0x1.b3b1a8p-3 +0x1.ca4534p+0 +-0x1.1b979cp-3 +-0x1.c0221ep-4 +0x1.278df4p-3 +-0x1.90e686p-2 +0x1.1983f2p+2 +-0x1.707a4p+1 +0x1.3a91a8p-1 +-0x1.0ae4ep-2 +0x1.93d88ep+1 +-0x1.36804ep-4 +-0x1.1664eep+1 +-0x1.bf6116p-1 +0x1.bb1f2ap-5 +0x1.5d6f24p-1 +-0x1.2f3ap-3 +0x1.8bea1cp+1 +0x1.933a2p+1 +0x1.d04b8cp-2 +-0x1.a2d34ap+0 +-0x1.807b86p-2 +0x1.44a46ep+1 +0x1.08b1p-1 +-0x1.5ac2fap+1 +0x1.93af92p+1 +-0x1.360d0cp-4 +-0x1.a9d00ep+0 +-0x1.c5730cp+0 +0x1.388076p-3 +0x1.ec991ap+0 +-0x1.eba70cp+1 +0x1.1a5e26p+2 +0x1.456762p-2 +-0x1.f6b70ep+2 +-0x1.4c4d6ap-5 +-0x1.773adap+1 +0x1.b08eacp-8 +-0x1.584bd8p+4 +0x1.aece5ep+1 +0x1.9484eep+1 +0x1.2f03cap-1 +0x1.857dc8p-2 +-0x1.7a09c2p-3 +0x1.413dcap-1 +-0x1.35e0a4p-4 +-0x1.14c224p+2 +-0x1.4b6036p+1 +0x1.72638ep+1 +-0x1.aca576p-5 +-0x1.a8005ap+1 +-0x1.7596e2p+1 +-0x1.48f8c6p+1 +0x1.17df42p+2 +-0x1.86feeep-3 +0x1.32ae9cp+0 +-0x1.3294e8p-4 +-0x1.cd56fap-2 +0x1.ed6752p-2 +0x1.52ca7ap-3 +0x1.88bd5ep+2 +-0x1.0bc4c4p-6 +-0x1.9c9c7ep+2 +-0x1.3dba0ap+1 +-0x1.22c518p-3 +0x1.1ae9bcp+2 +0x1.15e838p-2 +-0x1.828332p+1 +-0x1.54c63p+1 +-0x1.6a32f6p-1 +0x1.c55e1cp-3 +-0x1.08a5fp-3 +0x1.165574p+2 +-0x1.480b04p+1 +0x1.f8983p-3 +0x1.0d3bdap+2 +-0x1.0d26d8p+1 +-0x1.32a25p-4 +-0x1.354c2ep-4 +-0x1.36b518p-4 +0x1.d956p-2 +0x1.56d7bap+1 +0x1.0eea1ap+2 +0x1.18f428p+2 +0x1.62ad3p+1 +0x1.a35124p+1 +0x1.2745c2p-2 +-0x1.d21364p-1 +-0x1.27e588p+1 +0x1.519fc8p+2 +0x1.6f9af6p-1 +0x1.60654ap+1 +-0x1.acc2fp+0 +0x1.68b8a8p+1 +0x1.bc0924p-2 +0x1.19a1dep+2 +0x1.46286ap-2 +-0x1.611fcap+0 +0x1.3704ecp+1 +0x1.498faap+1 +-0x1.2ded8cp-4 +0x1.5329a6p-2 +0x1.1aa978p+2 +-0x1.7a949ap-2 +0x1.6638f6p+0 +0x1.60e3dcp-1 +-0x1.4eac8ep+1 +-0x1.3db95cp+1 +0x1.da4e46p-4 +-0x1.f3703p-1 +-0x1.a625fap+0 +0x1.3c17a4p+0 +0x1.f75f9p-3 +-0x1.9369bp+1 +-0x1.03c062p-2 +-0x1.ac914ep+0 +0x1.27711cp-5 +0x1.193a5ep+0 +0x1.0aeda2p-1 +-0x1.284b2cp-4 +-0x1.47ca52p+1 +-0x1.d8dcd4p+0 +0x1.340c62p-5 +0x1.966712p+1 +-0x1.8a04dap+0 +-0x1.06p+5 +0x1.693188p-1 +-0x1.33051ap+1 +0x1.4adfaep-4 +0x1.8699fep-2 +-0x1.c528a2p+3 +-0x1.87449ep-1 +-0x1.376054p+1 +-0x1.3faeb2p+1 +0x1.bf3f86p-2 +-0x1.a29252p-2 +0x1.a5e514p+1 +0x1.47e23p+1 +-0x1.04187p-1 +-0x1.dfdd0ap+1 +0x1.18fad4p+2 +0x1.5f067cp-5 +-0x1.c72628p-1 +-0x1.a7323cp+1 +0x1.0dcc54p+2 +-0x1.3ed8b4p+1 +0x1.f9b94ap+0 +-0x1.b551cp-1 +-0x1.397f1ep-1 +-0x1.51b1e2p+3 +-0x1.a692f2p-3 +0x1.69fdacp+1 +-0x1.4e1826p-1 +0x1.91c0fep-3 +-0x1.a6e1b2p+0 +0x1.8189fp-6 +0x1.d6b1bp+0 +-0x1.3138f6p-2 +-0x1.63dcc6p+1 +0x1.1e25a8p+2 +-0x1.615f82p+1 +-0x1.06116ep-6 +-0x1.2dbf32p-4 +0x1.30efb2p+1 +0x1.90d4fep+1 +-0x1.2e8768p+1 +0x1.52c482p-1 +0x1.139014p+2 +0x1.f188e6p+0 +0x1.489bap-3 +-0x1.30b51p-1 +0x1.26bebcp+1 +-0x1.473cfap-2 +0x1.189b68p+2 +-0x1.fff626p-4 +-0x1.4f04f6p+1 +-0x1.47b56cp-1 +-0x1.2b0338p-4 +0x1.5f00a4p-1 +-0x1.2453d8p+1 +0x1.63f072p-3 +-0x1.5f2a8ap-4 +0x1.0de616p+2 +0x1.04227p-1 +-0x1.11fb4ap+1 +0x1.e7937ep-4 +-0x1.b1bb1p-1 +-0x1.59229ap-3 +0x1.e54bb8p-3 +-0x1.49ced2p+1 +-0x1.3c8558p-1 +-0x1.365d0ap-4 +-0x1.d95314p-4 +-0x1.faa6a2p-1 +-0x1.4a931ep+1 +-0x1.35baf2p-4 +0x1.40e5c4p+0 +-0x1.d9ae8p+1 +0x1.1121fap-1 +0x1.3e6be4p-2 +0x1.7e0ef2p-3 +-0x1.880112p+0 +-0x1.652642p+1 +0x1.3612bep+0 +-0x1.cae1d2p-2 +-0x1.5c0edp+0 +-0x1.c4600ep-2 +0x1.c07a82p-4 +0x1.09a756p+1 +-0x1.e84cfap+0 +-0x1.c91046p+3 +0x1.2ad4eap+1 +-0x1.d5d568p-1 +0x1.3d84aap-1 +0x1.77039ep+1 +-0x1.d2310cp+0 +-0x1.cfd498p+0 +-0x1.715682p+1 +-0x1.0f89b2p-5 +-0x1.67af76p-1 +0x1.020d18p+1 +0x1.1a5e44p-1 +-0x1.2b8602p-4 +-0x1.59004ep-2 +0x1.66a0b4p+2 +0x1.44cf1p-2 +0x1.731836p-1 +-0x1.444264p+2 +0x1.7ab92p+0 +0x1.747564p-1 +-0x1.35aa9ep-4 +0x1.7c9424p+1 +0x1.cee034p+1 +-0x1.5b10fp-1 +-0x1.364912p-4 +-0x1.69bbfcp+1 +-0x1.50a1cp+1 +-0x1.f3f57p-3 +0x1.158cf8p+2 +-0x1.a72588p+1 +0x1.26afa8p-4 +-0x1.f7580ap-3 +0x1.1c73b8p-1 +-0x1.f2e3ecp-3 +0x1.363ffap-1 +0x1.1955bp+2 +-0x1.85807ap-1 +0x1.7a0e24p-1 +-0x1.2d6f04p-3 +-0x1.076d68p+1 +-0x1.0cd796p+1 +-0x1.955e58p+1 +-0x1.e74dfp+0 +0x1.94e14p+1 +-0x1.0d0d0cp+0 +-0x1.57b626p+2 +-0x1.ef69a6p+1 +-0x1.31c994p-4 +-0x1.ee21eep+1 +-0x1.357044p+1 +0x1.687e62p+1 +0x1.58074cp+1 +0x1.0d13b8p+2 +0x1.4e4534p+1 +-0x1.2b7b6ep-3 +0x1.1b4bb4p-3 +-0x1.00f538p-1 +0x1.0f0c76p+2 +0x1.5213a6p+1 +-0x1.29df0ep+0 +-0x1.ae06f2p-2 +-0x1.5221c8p+1 +0x1.e1d62ep+2 +-0x1.272b88p-4 +-0x1.6649b8p+1 +0x1.98b39cp+1 +-0x1.27c198p-4 +-0x1.434cfep-3 +0x1.3cbb2p-2 +-0x1.3c9292p-2 +0x1.0efaf4p+2 +-0x1.633b78p+0 +0x1.ec1532p-2 +-0x1.0a31f4p-2 +0x1.d473a6p-4 +0x1.6636a4p+1 +-0x1.8901dp+1 +0x1.6c011cp-5 +0x1.4159ccp-2 +-0x1.f98358p-1 +0x1.0e5a1p+2 +0x1.7c455p+0 +-0x1.2d9d62p-4 +-0x1.29249cp-4 +-0x1.07ef22p+3 +-0x1.2bf514p+1 +-0x1.45d45cp+0 +-0x1.2cabd8p-4 +0x1.f64b9ep+0 +0x1.960a98p+1 +0x1.45767cp-4 +0x1.bd19cep-2 +-0x1.0d64aep+1 +0x1.1a629ep+2 +-0x1.c7da8ap-1 +0x1.f676d2p-2 +-0x1.3ed448p+1 +-0x1.abed62p-7 +0x1.7f6afp+1 +-0x1.350bfp-4 +0x1.0da06ap+0 +0x1.097cc6p-1 +-0x1.8b5294p-6 +-0x1.3ea218p-7 +0x1.fc6b92p-5 +-0x1.1c957ep-2 +0x1.5fd2ecp+1 +-0x1.2acb2ap-4 +0x1.8d9becp-1 +0x1.99c11ap+1 +-0x1.012c68p-1 +-0x1.3294aap-4 +-0x1.340894p-4 +0x1.9a0ee2p-2 +0x1.4584d6p-4 +-0x1.2ddb48p+1 +-0x1.98374cp+1 +0x1.3383eap+1 +0x1.7d2846p+1 +-0x1.1f83bep-1 +-0x1.69b974p-2 +-0x1.0062e4p-2 +-0x1.e0c96ap-3 +-0x1.9b2cdcp-2 +0x1.b10d8ap-2 +0x1.462c08p+0 +0x1.801c0ep-4 +-0x1.91fe4ep+1 +-0x1.def94ep-7 +0x1.97541p+1 +0x1.7a346ap+1 +0x1.23d8e2p-2 +-0x1.c5295ep-1 +-0x1.308504p+1 +-0x1.7f607ap-7 +-0x1.92dcbp+0 +0x1.361d6p-1 +-0x1.279b06p+2 +-0x1.dadd1p-2 +-0x1.63de3ep+1 +-0x1.a9d38ep-3 +-0x1.330efcp-3 +0x1.5cd4cep+1 +-0x1.2d6346p-4 +0x1.aa19fcp-3 +-0x1.be1354p-1 +-0x1.1f2d94p+1 +0x1.541a54p-4 +0x1.e7e51ap-6 +0x1.327a8ap+0 +0x1.a8d34ep-2 +0x1.47e02p-1 +0x1.f0499ep-2 +-0x1.6338f4p-2 +0x1.758f7p+1 +-0x1.8dd02ep-5 +0x1.1335e4p-1 +-0x1.29400ap-4 +0x1.19e52ap+2 +0x1.7c685cp+1 +-0x1.010042p+1 +0x1.183edep+2 +-0x1.647b8cp+1 +0x1.0df434p+2 +0x1.a9173cp+0 +0x1.605c96p+1 +-0x1.375146p-1 +-0x1.96f0e4p-1 +0x1.99d6f6p+0 +0x1.475f9cp+0 +0x1.6ce1e6p-3 +-0x1.0c4ec2p-2 +0x1.979a3ep+1 +0x1.4c02b2p-3 +-0x1.5d643cp+1 +0x1.1981b4p+2 +-0x1.450f54p+2 +-0x1.daf71cp+1 +0x1.5b84f2p+1 +-0x1.4e39p-3 +0x1.2e338cp-1 +-0x1.4ac494p-1 +0x1.1a2ee4p+2 +-0x1.00c2dap+1 +-0x1.05797cp-2 +0x1.810c4cp+0 +0x1.8371f6p-2 +-0x1.2e5d5ep-4 +0x1.20568cp+1 +0x1.7533fap+1 +-0x1.2eff36p-1 +-0x1.095fc4p+1 +0x1.14268ap-5 +-0x1.a4098cp-2 +-0x1.a826c6p+1 +-0x1.2d9248p+1 +0x1.0d08ccp+2 +-0x1.caa236p+3 +0x1.bab198p-3 +-0x1.e2136ap-3 +-0x1.24ef2cp+2 +0x1.e120f8p-1 +-0x1.6f5d06p-2 +-0x1.351596p-4 +-0x1.f8c01ap+0 +0x1.24cb0cp-2 +-0x1.8772c8p+1 +-0x1.3139e4p+1 +-0x1.552332p+1 +0x1.1f01ep-1 +0x1.93975p+1 +-0x1.860b12p+0 +-0x1.325f32p+4 +-0x1.157d7cp+2 +0x1.b04adp+0 +-0x1.162d22p+1 +0x1.66397ap-3 +0x1.229e52p-5 +0x1.ef5bbcp+0 +-0x1.0ede58p+1 +0x1.4c9bf8p+2 +0x1.89aa3p+1 +0x1.5c7128p+1 +0x1.6658cp+1 +0x1.839efp-3 +-0x1.2ac61ap-5 +0x1.18cf9cp+2 +0x1.057f2cp-2 +-0x1.80098ep+0 +0x1.117f5p+2 +-0x1.602f22p+1 +-0x1.8aa62p+0 +0x1.fab3e8p-1 +-0x1.faf368p+0 +-0x1.803ab2p-1 +-0x1.93715ap-4 +0x1.24106ap-3 +0x1.301864p-1 +0x1.608766p+1 +0x1.55c9aap+1 +-0x1.297edap-1 +0x1.65432ap+1 +0x1.c27718p+2 +-0x1.3ae348p-1 +0x1.aa80a8p+1 +-0x1.3b9fa2p-1 +0x1.414f82p-2 +0x1.bdd05p+0 +0x1.6ed8ep-1 +0x1.b0fc5p+1 +-0x1.38dd7cp-1 +-0x1.3dd132p-1 +-0x1.b000dap+1 +-0x1.fa8046p+0 +0x1.ada91ep+1 +-0x1.bbacc8p-1 +-0x1.f9f426p+2 +-0x1.bc74fcp-1 +-0x1.5b356ap-2 +-0x1.ff6d66p-3 +0x1.d9dec2p+1 +-0x1.4d683p-3 +-0x1.c94956p+1 +-0x1.34e83cp+0 +0x1.4eab1cp-3 +0x1.36cf66p-2 +-0x1.35e6ecp-4 +0x1.9b228ap+1 +-0x1.3296aap-4 +-0x1.361d6p-4 +0x1.1cfa22p+2 +0x1.a1a75cp+1 +-0x1.3f464ep+0 +-0x1.ed46cep-2 +0x1.b2adeap-2 +0x1.8bb406p+1 +-0x1.25e534p-2 +-0x1.343002p-4 +-0x1.aac09ep-3 +-0x1.cdbeaep-2 +0x1.14729p+2 +0x1.0821ecp-2 +-0x1.108176p+1 +-0x1.8c30c6p+1 +-0x1.084082p+3 +0x1.5ad252p+1 +0x1.c292c2p-4 +-0x1.31a53ap-4 +0x1.c3afp-7 +0x1.967b8cp+1 +0x1.185164p-2 +-0x1.9137acp-1 +-0x1.43fc64p+1 +0x1.4b91c2p-1 +-0x1.b317f6p+1 +0x1.4a4e98p-7 +0x1.449a4ap-3 +0x1.5949e4p+1 +0x1.2e1846p-1 +-0x1.a2118p-1 +-0x1.24f4d8p-3 +0x1.85ec84p+1 +-0x1.6b47dep+1 +-0x1.bea2f6p-2 +-0x1.9f1a1ep+3 +-0x1.9bb644p-1 +-0x1.773ffep-5 +0x1.192ad2p+2 +0x1.534a58p+0 +-0x1.b68d7cp-1 +-0x1.2836d6p+0 +-0x1.de7844p+0 +-0x1.c2bbf6p+1 +0x1.b46346p-4 +0x1.e65288p-2 +0x1.7355b6p-2 +-0x1.26aeb4p+3 +-0x1.351a9cp-4 +-0x1.ef0e14p-2 +0x1.2a4abap-1 +-0x1.19c2cap+1 +-0x1.36a336p-4 +0x1.784352p-3 +0x1.96f24p+1 +-0x1.c19ae8p-1 +-0x1.3297f8p-4 +-0x1.e48354p-3 +0x1.7b33dep-1 +-0x1.6d82dcp+1 +0x1.e95628p-1 +0x1.4c4672p+1 +-0x1.02603p+0 +-0x1.2111p+0 +0x1.e3b636p-2 +-0x1.35a41ep+0 +0x1.f0b27p-1 +-0x1.229a2p-4 +0x1.544d02p-1 +-0x1.14c224p+2 +0x1.55c23p-1 +0x1.3c8eeep-1 +-0x1.2db0bep-4 +-0x1.08b4d6p+0 +-0x1.34e21ep-4 +-0x1.209ab8p+1 +-0x1.3e751p+0 +0x1.5a36f6p+1 +-0x1.4e6874p+1 +0x1.ef9c56p+2 +-0x1.abd05ep-2 +-0x1.240f5cp+1 +0x1.a5b1dap+1 +-0x1.2fe2ep-2 +0x1.190e9cp+2 +-0x1.1f19cep+1 +-0x1.5e8984p+1 +-0x1.13e68cp-5 +-0x1.2b7158p+1 +-0x1.14ca8p+2 +-0x1.72a042p+1 +-0x1.4a5f58p-2 +0x1.8487aep+1 +0x1.d9e78p+1 +0x1.b782ecp-2 +-0x1.8e3d8cp-5 +0x1.55972ap+1 +0x1.1993a6p+2 +0x1.0e317p+2 +-0x1.60a1e2p-2 +0x1.947566p+1 +0x1.455f28p-1 +0x1.2270bep-2 +-0x1.2a9576p+0 +-0x1.995a66p-1 +-0x1.14c224p+2 +-0x1.51fbcap+1 +0x1.fc0e86p+0 +0x1.15172p+0 +-0x1.34c418p-3 +0x1.176bc2p+2 +-0x1.c54b18p-5 +-0x1.548d3p+1 +-0x1.7983cap+1 +0x1.27f4bap+2 +-0x1.69b152p-1 +-0x1.299848p-1 +0x1.0324cap+3 +-0x1.32a1d6p-4 +-0x1.4fd9cp+0 +0x1.6cf24p+1 +-0x1.57b3fcp-1 +-0x1.33e9a6p-4 +0x1.781074p-10 +-0x1.1ba9bcp+0 +0x1.1a5178p+2 +-0x1.535882p+1 +0x1.9bef5cp+1 +-0x1.adc8a6p-2 +-0x1.c3536p-1 +-0x1.f85feep+2 +-0x1.2544bp+1 +0x1.fc9ef4p-2 +0x1.49aa9p+1 +-0x1.e5f78ap-4 +0x1.73cdc8p-4 +-0x1.501f9ap+1 +-0x1.3050c6p-2 +-0x1.4ddd24p+1 +-0x1.31c498p-4 +-0x1.54e8b2p-4 +-0x1.32eb68p-4 +-0x1.49c4c2p+3 +0x1.b437eap-5 +-0x1.a149a4p+1 +-0x1.31867p-4 +0x1.729434p+1 +-0x1.4ecf7cp+1 +0x1.2f09p-1 +0x1.792de6p-2 +-0x1.760a02p-1 +-0x1.00044ap+1 +-0x1.2ca72ap+1 +-0x1.28bb78p-4 +0x1.0c6ef6p+2 +-0x1.6541ep+0 +0x1.a17bbp+1 +-0x1.43fa36p+1 +-0x1.f01772p-1 +-0x1.2fb4fep-2 +-0x1.090966p+0 +-0x1.3429bp-4 +-0x1.8663d2p-2 +-0x1.687992p-2 +-0x1.201236p+1 +0x1.8eea1p+1 +-0x1.4ca762p-2 +0x1.1accb4p+2 +-0x1.2e1a5ap-4 +0x1.885802p-4 +-0x1.8f22eep-4 +-0x1.013a28p-2 +-0x1.6c4176p+1 +-0x1.5467dap+1 +-0x1.3965aep-2 +-0x1.7af334p+1 +-0x1.20fc2ep+1 +-0x1.c65aacp-4 +-0x1.31be86p-4 +0x1.9a0464p-3 +0x1.808ff4p-1 +0x1.83ebcep+1 +0x1.bf2bap-4 +-0x1.6ea6eep+1 +0x1.3c0614p+1 +-0x1.67be1p-3 +-0x1.5e68cep+1 +-0x1.0fe648p-1 +-0x1.8d5ae2p-1 +0x1.239e2ep-3 +-0x1.3204eep-4 +0x1.be1176p-4 +-0x1.36bd38p-4 +0x1.6f607cp+1 +0x1.d7ce82p-3 +-0x1.6eeff6p+0 +0x1.0d7c94p+2 +0x1.f4c93cp+0 +0x1.9c2fccp-2 +-0x1.1a65cap+1 +-0x1.89d558p+1 +0x1.89e702p-1 +-0x1.dc78b6p-3 +-0x1.114834p-7 +0x1.8a616ep+0 +-0x1.359ecep-4 +-0x1.3bf01p+1 +-0x1.4c0a78p+0 +-0x1.b84bfp-4 +0x1.7f4842p-5 +0x1.1eeabcp-1 +0x1.720f42p-2 +-0x1.497d2ep+1 +-0x1.2c5a1ep+1 +0x1.1cd364p+2 +-0x1.32f838p-4 +0x1.11ebbp-1 +0x1.08e6dep-1 +-0x1.4bbf28p-3 +0x1.765a02p+0 +0x1.a5db9p+1 +-0x1.635d1cp+0 +-0x1.16d85cp+0 +0x1.48e082p+0 +0x1.31a8d4p+1 +-0x1.ca1c54p-2 +0x1.58fc9cp-2 +-0x1.2fd26ep-4 +0x1.22db18p-6 +-0x1.2ced4ep-5 +-0x1.2842a8p-4 +0x1.181b6ap+2 +0x1.97c4dep+1 +-0x1.7161a8p-1 +0x1.012b68p-1 +-0x1.cfb272p+0 +0x1.18976ap+2 +0x1.3fde66p-1 +-0x1.330cap-4 +0x1.62cb5p+1 +-0x1.2eb88cp-4 +-0x1.6a2b6ep+1 +-0x1.35072ep-4 +0x1.2ecd0ep+1 +0x1.93a21ep-1 +0x1.9e53bp+1 +0x1.087e3cp-5 +0x1.af8516p-2 +0x1.0e74ap+2 +-0x1.ec4bc8p+2 +-0x1.8a5d82p+1 +0x1.5ea982p-1 +-0x1.3541cp-4 +-0x1.74371p-1 +-0x1.e06d5cp+0 +-0x1.3280bcp-4 +-0x1.32f774p-4 +-0x1.70ac58p+1 +-0x1.2f25aep+2 +-0x1.0dc2d8p-2 +0x1.ac224ep-4 +-0x1.bfcde4p-2 +0x1.83ce48p+1 +-0x1.0d8bb4p-4 +0x1.4ba414p-2 +0x1.5fbf6p-1 +0x1.a05ff8p+1 +-0x1.01cd14p-1 +-0x1.365478p-4 +-0x1.8f732ap-5 +-0x1.fb09ecp-1 +-0x1.043ec6p+1 +0x1.01f7cep-1 +-0x1.30f7dep-4 +-0x1.76a19p-3 +-0x1.feec72p+0 +-0x1.5eeaeep-1 +-0x1.723032p-2 +-0x1.e591b6p-2 +-0x1.6a82acp+0 +0x1.520614p+1 +-0x1.efe32p-3 +0x1.13cecap+2 +0x1.a002aep+1 +0x1.122dbep-1 +-0x1.3182d6p-1 +0x1.2904c2p-3 +-0x1.940cd6p+0 +-0x1.2bc316p-4 +-0x1.af4b52p-2 +-0x1.97f2a2p+1 +0x1.99bbe4p+1 +0x1.17c292p+2 +-0x1.268ae2p+2 +-0x1.46e27ap+1 +0x1.8e6e42p+1 +0x1.1d204ap+2 +0x1.ba4234p-6 +-0x1.354224p-4 +0x1.1a24ap-1 +-0x1.205ce8p-2 +0x1.1dc96ap+2 +-0x1.43b982p+2 +0x1.4cedfep+0 +0x1.28bdf8p+0 +0x1.07dcc6p-1 +-0x1.4e5178p-1 +-0x1.069086p+3 +-0x1.561432p+0 +0x1.4d9a08p-1 +-0x1.3628c8p-4 +-0x1.4fdecep+1 +0x1.b049bep-2 +0x1.01e4a6p+0 +-0x1.a1647ep-1 +0x1.d9e2p+1 +-0x1.35f696p-4 +0x1.92dbaap+1 +-0x1.360078p+1 +0x1.bfc58ep-3 +-0x1.d32e94p+0 +0x1.37975p-3 +-0x1.1ca94ap+4 +0x1.902da4p+1 +0x1.95e31cp+1 +0x1.2aee2ap-1 +-0x1.65d58ap+1 +-0x1.00451cp+1 +0x1.19be14p+2 +-0x1.87759ep+1 +0x1.42e32p-2 +-0x1.2f5a58p-4 +-0x1.27fb92p+2 +0x1.78136cp+1 +0x1.27ad7p+1 +0x1.0d92bep-2 +0x1.4eca7p+0 +-0x1.35f8c8p-4 +0x1.573b4cp-3 +0x1.a78904p+1 +-0x1.477fcp+1 +-0x1.d5d7fap+3 +-0x1.492ee2p+1 +0x1.813bf6p+1 +-0x1.785124p+0 +-0x1.539ccep+1 +0x1.c7229ep+2 +-0x1.52da9ap-1 +0x1.3eaceep-1 +-0x1.efcbf2p-3 +0x1.00ef8ep-4 +0x1.f4ba56p-1 +-0x1.5ef02ap+0 +-0x1.345798p-4 +-0x1.fe005ap+2 +0x1.a79bf6p+1 +-0x1.4c5ebep-4 +-0x1.14c224p+2 +-0x1.0182a6p+1 +-0x1.72f084p+1 +0x1.9714b8p+1 +0x1.63ea48p-4 +0x1.006dfp-1 +0x1.d9e87p+1 +0x1.584fecp-2 +0x1.479bp-2 +0x1.83c21cp+1 +-0x1.bd177cp+0 +0x1.ae7256p-4 +-0x1.31ad44p-1 +-0x1.154218p+1 +0x1.55e3f6p-1 +-0x1.0a097cp+1 +0x1.a4aa2cp+1 +-0x1.2c0b1ep-4 +0x1.03afbp-1 +-0x1.4457b4p+0 +0x1.768e52p-5 +0x1.4e0458p-1 +-0x1.591124p+1 +0x1.1b53d2p+2 +0x1.117152p-1 +0x1.ac1a62p+1 +0x1.036db4p-4 +-0x1.99fccp-3 +0x1.aefd9cp+1 +0x1.67622p+1 +-0x1.7b603ap-7 +-0x1.369f8cp-4 +-0x1.47ef54p+0 +0x1.8ccf44p+1 +-0x1.1c9e86p-7 +-0x1.f1b734p+0 +-0x1.2f5b3ap-4 +0x1.df5724p+0 +-0x1.32bc2cp-4 +-0x1.b1437p+0 +-0x1.273b8p-4 +-0x1.dc6104p-1 +-0x1.5944d6p+1 +-0x1.2b1dccp+1 +-0x1.5cad7cp+0 +0x1.71a4fp-2 +-0x1.5e61e8p-2 +0x1.17f392p+2 +0x1.301478p-2 +-0x1.32d82ap-4 +-0x1.6e3d4ep+1 +0x1.15097ep+2 +-0x1.d498a2p-6 +0x1.c33044p-4 +-0x1.5c56e8p+2 +-0x1.07d544p-1 +-0x1.2c81fcp-4 +0x1.4add72p+0 +0x1.eda0dap-2 +-0x1.9f8208p+1 +0x1.44f78p-1 +-0x1.632352p+0 +-0x1.f30448p-1 +0x1.756074p+1 +0x1.46dc4p-2 +-0x1.30e0cp+1 +0x1.1da808p-2 +0x1.4c0066p-1 +0x1.57c40ap-4 +0x1.0ed704p-2 +0x1.e20af6p+0 +0x1.3f9d9ep-1 +0x1.e3963cp-2 +0x1.9962bep+1 +0x1.1970e4p+2 +-0x1.367d5ap-4 +0x1.7c379cp-3 +-0x1.535108p+1 +-0x1.a18f2ap+0 +-0x1.15105ep+2 +0x1.1b784p+2 +0x1.3a4166p-3 +0x1.b7f37ep-1 +0x1.2329bp-4 +0x1.5b87b6p+1 +-0x1.5ee2bcp+0 +-0x1.8b0e2ep-2 +-0x1.56d3ep+1 +0x1.10f4dep+2 +-0x1.0bf5a6p+0 +-0x1.732da6p-4 +0x1.03c83ap+1 +-0x1.47477ep+1 +-0x1.1a484cp+0 +0x1.54e216p+1 +-0x1.607414p+1 +0x1.3af45ep+1 +0x1.2d35dap-3 +-0x1.6c0594p+0 +-0x1.337242p-3 +0x1.9c45e4p+1 +-0x1.63708cp-2 +0x1.58e512p+1 +-0x1.40e748p-7 +0x1.6d6436p-2 +-0x1.70756p+3 +-0x1.13d5bp+1 +-0x1.0bdb8ap+3 +0x1.76ba4ap+1 +0x1.74c826p+1 +-0x1.30a1d8p-4 +0x1.210e5cp-2 +0x1.0d781ap+2 +0x1.8e798cp+1 +-0x1.35df74p-4 +-0x1.2e04dcp-4 +0x1.66940ep+1 +0x1.6a04b2p-2 +0x1.d7c0c6p-6 +-0x1.3777d8p-1 +0x1.781b4ap+0 +0x1.9b9eb6p-4 +-0x1.52ca5cp+1 +-0x1.bd3f38p-2 +0x1.321e0ap-1 +-0x1.139e9ap+1 +0x1.a54e7p+2 +0x1.e5424ap-4 +-0x1.e1a202p-1 +0x1.9663a2p+1 +0x1.5168ccp+1 +-0x1.4a0188p-2 +-0x1.fa0c48p-1 +0x1.6c0bccp+1 +0x1.0e3b7cp+2 +0x1.1e5b42p+0 +0x1.cc844p-2 +-0x1.637bccp+1 +-0x1.36ad66p-4 +-0x1.156c24p+1 +0x1.71e292p-2 +-0x1.d9793ap-1 +0x1.fa92f8p-3 +-0x1.488b06p+0 +0x1.07cd1ap-4 +-0x1.8702a2p-2 +-0x1.225c9ep+1 +-0x1.7f7204p-3 +0x1.3a85c6p-2 +-0x1.1f5404p+1 +0x1.2c18aep-3 +-0x1.02c0aep-5 +-0x1.5e04dcp+1 +0x1.7c36b8p+1 +0x1.96c038p+1 +-0x1.db2e8cp-2 +-0x1.cd07d8p-3 +0x1.7b3e0cp+1 +0x1.1c8c62p+2 +-0x1.617268p+1 +-0x1.e6645p+0 +-0x1.08b348p-4 +0x1.1ac63ep+2 +0x1.0dfb3cp+2 +0x1.1e3e4ep-1 +0x1.6dc63cp+1 +-0x1.45a632p-3 +0x1.714c24p-2 +0x1.ee9792p-1 +0x1.afc428p-2 +-0x1.07fedcp+0 +0x1.55a38ap-2 +0x1.14c72ep-2 +0x1.226b88p-1 +-0x1.2f4d32p-4 +0x1.3e2c1ap+0 +0x1.6a05d4p+1 +0x1.14bf0cp-1 +-0x1.32a40cp-4 +-0x1.a5aa4ap-5 +-0x1.1f319ep+2 +0x1.3b6b16p-2 +0x1.d9e6f2p+1 +0x1.0186fp-1 +0x1.14dcdcp-3 +-0x1.73ec3ep+1 +-0x1.0e6aaep-3 +0x1.9ea2f4p+1 +-0x1.13233ap+4 +-0x1.34f558p-4 +-0x1.0e0352p-1 +-0x1.737926p-2 +0x1.645f06p-4 +0x1.7073b4p+0 +0x1.1e13a6p+1 +-0x1.03cef8p+1 +0x1.131784p+2 +0x1.11a526p+1 +-0x1.fcbca6p+0 +0x1.7b65e6p-2 +-0x1.418c16p+1 +0x1.38fd4p-1 +0x1.62fe14p+1 +0x1.780cb6p+1 +-0x1.e8d1fp-1 +0x1.228b02p-6 +0x1.85b9dcp+1 +0x1.0e283ap+2 +-0x1.d5a52cp+0 +-0x1.9209b4p+3 +-0x1.cb4b88p+1 +-0x1.71d56ap+0 +-0x1.43d83ep-8 +-0x1.354fcep-4 +0x1.816a8p+1 +-0x1.0c00ccp-4 +-0x1.3700fep-4 +0x1.74853cp-5 +-0x1.f78656p-2 +0x1.1b84a2p-1 +-0x1.dad15p-2 +-0x1.46dffp+1 +-0x1.b7d5e6p-2 +-0x1.b73ee2p-11 +0x1.81e878p+1 +-0x1.2dd9f4p-4 +0x1.1c6e4p+0 +0x1.207204p-1 +-0x1.8ba2fap-1 +0x1.4b0e1p+0 +0x1.7606eep+0 +0x1.6125b2p+1 +-0x1.8e964ep-1 +0x1.9e5e94p+1 +-0x1.326f4p-4 +0x1.a89b54p+1 +-0x1.6378d8p-1 +-0x1.23a9d2p+2 +0x1.892ac4p+1 +0x1.4aef3cp+1 +-0x1.87e214p+1 +-0x1.52ebf8p+1 +0x1.78eedap+1 +-0x1.6185eap+3 +-0x1.28c228p+2 +-0x1.975928p+1 +0x1.31bdbcp-4 +0x1.86aec2p-7 +0x1.5abb42p-2 +-0x1.18b8f8p-2 +-0x1.73433ep-2 +-0x1.6ec38ap-3 +0x1.1a330ep+2 +-0x1.97b946p+2 +0x1.077e5p+1 +0x1.18f0a4p+2 +-0x1.351ab4p-4 +0x1.3817d8p-1 +0x1.55e486p+1 +-0x1.1deec8p-1 +-0x1.838984p+0 +-0x1.bfe726p+0 +-0x1.139b52p+4 +0x1.1c8ecap+2 +-0x1.385deep-2 +0x1.7ad5bep+1 +-0x1.ca4ea2p-1 +-0x1.528404p+1 +0x1.965e58p+1 +-0x1.3f8154p+1 +-0x1.dfabap-2 +-0x1.303b3cp-4 +0x1.15e698p+1 +0x1.15663ep+0 +-0x1.38e5bep+1 +0x1.1aa762p+0 +-0x1.f4a76p+0 +-0x1.34a1a8p-4 +-0x1.287326p+1 +-0x1.243778p+1 +0x1.b13e2p-2 +0x1.18aaacp+2 +-0x1.399494p+1 +0x1.6a5d54p+1 +-0x1.329d12p-4 +-0x1.4e209ap+1 +-0x1.0406fcp+1 +0x1.d1f2eep-4 +0x1.3be89cp+1 +0x1.ad9acap-2 +0x1.1303e6p-1 +-0x1.8dd6bap+3 +-0x1.7fe85ap-3 +0x1.964c34p-2 +-0x1.060912p+1 +-0x1.f2eff6p-6 +0x1.39aeacp+1 +0x1.83e306p+1 +-0x1.3cc9c2p+1 +-0x1.296034p-4 +0x1.d3fe14p-2 +0x1.5a2b0ep+1 +-0x1.687954p-5 +0x1.1947f8p-2 +0x1.0d6d1p+2 +-0x1.d56f06p-1 +-0x1.64804p+1 +-0x1.2d370ep-4 +-0x1.fd54b6p-1 +-0x1.469a58p+1 +-0x1.2600ccp-3 +0x1.4a52a2p+1 +0x1.143b5ap+1 +-0x1.3ee13p+0 +0x1.992f76p+1 +-0x1.22f3aap-1 +0x1.0c5358p-2 +-0x1.8268f2p-12 +-0x1.4a87f2p+0 +0x1.f09afcp-2 +0x1.c8f29ap+0 +0x1.5f28ccp+1 +-0x1.5b39b2p+1 +0x1.ceaa38p-6 +0x1.1971ecp+0 +-0x1.0db4d4p+0 +-0x1.31e0c6p-4 +-0x1.29491ap-4 +-0x1.32b39ep-4 +0x1.b237d8p-3 +0x1.937e58p+1 +-0x1.130dccp-7 +0x1.86e96p+1 +-0x1.bf69d8p-3 +-0x1.36035cp+4 +-0x1.58c7b8p+0 +-0x1.49eb1ep+1 +0x1.5c5262p-1 +0x1.53fcc8p-2 +0x1.3bc1f6p+1 +-0x1.347122p-4 +0x1.774766p+1 +-0x1.b131c6p+0 +-0x1.1ab9fcp+0 +-0x1.312e72p-4 +-0x1.6158bp+1 +0x1.020bf2p-1 +-0x1.95e65cp-1 +0x1.0f855p-1 +0x1.753114p-2 +-0x1.fa4ap-2 +-0x1.f5789cp+0 +0x1.c7f504p-5 +0x1.130f1ep-1 +0x1.8259d6p+1 +0x1.fd4d5p-2 +-0x1.09fbb6p+1 +0x1.0d403p+2 +-0x1.3fedf6p-4 +-0x1.4e95b4p+3 +0x1.157abep+2 +0x1.1581cp+2 +0x1.0f18ccp+0 +-0x1.ba5008p-3 +-0x1.0450f4p-2 +0x1.9f78b4p+1 +0x1.45e0dap-1 +0x1.700002p+0 +-0x1.c749d2p+1 +0x1.2d70bp+1 +-0x1.6772e2p-3 +-0x1.68b22ep+0 +-0x1.9767ecp+0 +-0x1.29b4dap-4 +0x1.e3f134p-1 +-0x1.31b36ap-4 +-0x1.bc7d5p+1 +-0x1.0f42fp+0 +-0x1.7f8552p+0 +0x1.10d28ep+1 +0x1.1a463cp+2 +0x1.2478a6p-9 +-0x1.2a63acp+1 +0x1.1d6f0ep+2 +0x1.4ca544p-2 +-0x1.fb922ep-12 +0x1.798756p+2 +0x1.8c9b7cp+1 +0x1.0d1ff2p+2 +-0x1.67d556p-1 +-0x1.44c0f4p-4 +-0x1.2e8d9ep-4 +-0x1.dcc188p-2 +-0x1.9624d4p+1 +-0x1.649b1p-1 +0x1.a69b1p+1 +0x1.fb523cp-1 +0x1.57c3fep-2 +0x1.6a83a8p-8 +-0x1.33fc56p-4 +0x1.a6601ep+1 +-0x1.552a5ep+0 +-0x1.5cd282p+4 +-0x1.014422p-2 +0x1.919078p+1 +-0x1.03e91cp+0 +0x1.4e8f42p+1 +0x1.49c32p-2 +0x1.1c34fap-1 +-0x1.d0cacp+2 +-0x1.a6e4a6p-3 +0x1.1979d2p+2 +-0x1.5c7444p+1 +-0x1.204fa8p+1 +-0x1.74de44p-5 +0x1.0d3e2ep+2 +-0x1.59b50cp-2 +0x1.1d7a2cp+2 +-0x1.d84d02p-2 +-0x1.e823d4p-4 +-0x1.a6bf2p-1 +0x1.8e54fp+1 +0x1.a35faep-2 +-0x1.0c803p-1 +0x1.3d3d6ap+1 +0x1.bc89dep-1 +-0x1.3d136ap+1 +-0x1.1291d4p-6 +-0x1.864fb2p-4 +0x1.62ba24p-1 +0x1.6e8daep+1 +-0x1.5e7486p-4 +0x1.0e6faap+2 +0x1.31a202p-1 +-0x1.3cd606p+3 +-0x1.c5d49p+0 +0x1.1f738ap+0 +0x1.1c5f44p+2 +-0x1.072c08p-4 +0x1.0cf76cp+2 +-0x1.b957c4p-2 +-0x1.1ad3c8p-1 +0x1.b6578p-2 +-0x1.703f3ap-6 +-0x1.68a344p+0 +-0x1.eb8188p+0 +0x1.0e0802p+2 +0x1.dbd8e4p-2 +0x1.364246p-2 +-0x1.ffc1cep-1 +0x1.749832p+0 +-0x1.cf3a6ep-7 +-0x1.66df6p-1 +-0x1.1017bep+3 +0x1.05c8fcp-1 +-0x1.7ab2dap-7 +0x1.9d6a3p+1 +-0x1.337716p-4 +-0x1.c1934cp-1 +-0x1.138ebcp-1 +-0x1.35f16p-4 +-0x1.64780ap-6 +-0x1.167f94p+3 +-0x1.5158d2p+1 +-0x1.fdd872p-3 +0x1.a2b46p+1 +0x1.2436fcp-2 +-0x1.68d52ap-2 +0x1.8efb64p-3 +0x1.a0dc7ep+1 +-0x1.a0112cp+0 +-0x1.1a17cep+0 +-0x1.6c7ee2p+0 +-0x1.05f67cp+0 +-0x1.0b36b8p+3 +-0x1.36523ep-4 +0x1.f11a42p-1 +0x1.15ab74p+2 +-0x1.5bc8ecp+0 +-0x1.2ea89cp-4 +0x1.73c892p-1 +0x1.1bf5cep-2 +-0x1.81da28p+0 +0x1.08eee6p-1 +0x1.20aaa8p+0 +-0x1.433b2p-1 +-0x1.2e48c8p-4 +0x1.33ef54p-1 +-0x1.8d8fap-1 +0x1.a5c5bcp-4 +-0x1.3478eap-4 +0x1.2e3552p+0 +0x1.12a2dp+2 +0x1.e446b2p-4 +0x1.7979ecp+1 +0x1.166012p+2 +-0x1.454876p-2 +0x1.aa6f0ap-4 +-0x1.20bd32p+1 +-0x1.34c7d8p+0 +-0x1.4cfd8ap-7 +-0x1.36b0e4p-4 +-0x1.db3a1cp-3 +0x1.d9eabp+1 +0x1.9898dap+1 +-0x1.0fdefep+1 +0x1.7aa95ep+1 +-0x1.e05838p-1 +-0x1.11bb4ep+1 +0x1.9be3cap+1 +-0x1.36a57ap-4 +-0x1.2d24dp+4 +0x1.6f97eep+1 +-0x1.264e28p-3 +-0x1.152cbap+1 +0x1.136628p+2 +-0x1.a79d3ep-4 +0x1.1f1dd2p-1 +-0x1.3a5e08p-2 +0x1.74f1a2p-1 +0x1.0da394p+2 +-0x1.b18996p+2 +-0x1.326c62p-4 +-0x1.c774eep-1 +-0x1.6e756ep-2 +0x1.1d8ce4p+2 +-0x1.27e158p-2 +-0x1.ef3134p-1 +-0x1.d4146ep-5 +-0x1.8b522ap+3 +0x1.92447ap+1 +-0x1.184f48p+0 +0x1.17c732p+2 +-0x1.5fcfb6p+1 +-0x1.35528ap+1 +0x1.0ece64p+2 +-0x1.09e0c6p+1 +0x1.853272p+1 +0x1.0390dap-1 +-0x1.808252p-6 +0x1.b05244p+0 +-0x1.e4320ap-2 +0x1.3a682ep-1 +0x1.9939c2p+1 +-0x1.ff5038p-2 +-0x1.7c7414p+1 +0x1.1271c8p+1 +0x1.10db3ep+2 +0x1.08362ep+1 +0x1.7dc1fcp+1 +0x1.f9b97ep+0 +0x1.7f991p+1 +0x1.13b7fp-5 +-0x1.36f9a6p+1 +-0x1.bf33aap-17 +0x1.4d48eap+1 +0x1.814322p+1 +0x1.104532p+2 +-0x1.cc3924p-1 +0x1.a82e48p+1 +-0x1.8066e4p-1 +-0x1.31c88p-4 +0x1.1c0d22p+1 +0x1.45a4a2p+0 +-0x1.952a72p-2 +-0x1.b8945p+0 +0x1.4d78c8p+1 +-0x1.1d5f4p+4 +0x1.13ef6cp-1 +-0x1.808e5ap+1 +0x1.17c234p+2 +0x1.11b728p+0 +-0x1.a9d59cp-4 +0x1.8938aap-6 +-0x1.1f29cep+3 +0x1.c99c2ap-4 +0x1.6209eap+1 +0x1.15c72ap+2 +0x1.120c28p+2 +0x1.592c44p-5 +0x1.7b32e4p-3 +-0x1.ea1faep-3 +0x1.07e47cp-4 +0x1.1824e2p+2 +0x1.623f26p-1 +-0x1.535f3p-3 +0x1.5b77e4p+1 +0x1.166e9p+0 +-0x1.d7f864p-9 +0x1.6be938p+1 +-0x1.053aa8p-6 +-0x1.3a1f6p+0 +0x1.d11a72p-4 +0x1.066e6ep-1 +-0x1.553c24p-3 +0x1.4a1adep+1 +-0x1.165dfep-3 +0x1.9aea0cp+1 +0x1.3fa66p-1 +0x1.44717ep+1 +0x1.d4b5ep+0 +-0x1.4ce712p+1 +0x1.90dc5p+1 +-0x1.bb9926p+1 +-0x1.ea6a6p+0 +0x1.a4f664p+0 +-0x1.d0789ep+1 +0x1.47ff3p+0 +-0x1.a4582ap-2 +0x1.0f1fbcp+2 +-0x1.851cbep+0 +-0x1.cad56p+0 +0x1.fb3c08p-1 +-0x1.8600c4p+0 +-0x1.280b14p-4 +0x1.453bcep+1 +-0x1.65a45p-2 +-0x1.02c716p+1 +-0x1.0f67dcp+0 +-0x1.3329dcp-4 +-0x1.813234p+0 +0x1.48ab04p+0 +0x1.959152p+1 +0x1.1d050ap+2 +0x1.44c6dcp-3 +0x1.18537cp+2 +-0x1.92e60ep+1 +-0x1.525a6p+3 +0x1.279f9ap-1 +0x1.d03c6p-2 +-0x1.95b67p-2 +0x1.2b892p+1 +0x1.8aed26p+0 +0x1.71a006p+1 +0x1.2e8d8cp+0 +-0x1.56105cp-2 +-0x1.361ac2p-4 +0x1.e8907cp-3 +0x1.2e161p+2 +0x1.10c198p+2 +0x1.e31decp+2 +-0x1.413e02p+1 +-0x1.c12e1p-2 +0x1.9daef2p-2 +-0x1.b2a0f4p+0 +-0x1.59e422p-3 +-0x1.041c7ep+0 +0x1.790cd8p+1 +0x1.6650fcp+1 +-0x1.35f2dep-4 +-0x1.ff881cp+0 +-0x1.2704d2p+1 +0x1.9e0808p-3 +0x1.96a51p+1 +0x1.1aeb02p+2 +-0x1.2e50b8p-2 +-0x1.74685cp+1 +0x1.9bf692p+1 +-0x1.35fff4p-4 +-0x1.41eb4ap+4 +-0x1.e8ac7p+1 +0x1.4c0388p-1 +-0x1.30d8aap-4 +0x1.a4a072p+0 +-0x1.437f74p+1 +-0x1.1593a4p+0 +0x1.77bdeep+1 +0x1.7cda62p+1 +-0x1.19d11cp+2 +0x1.1de2e2p+2 +0x1.964d1p-4 +-0x1.db69fep-2 +-0x1.a3d6cep-3 +0x1.9f68cap-2 +-0x1.04116cp-5 +0x1.05b658p-1 +0x1.1d7a04p+0 +0x1.19b26ap+2 +0x1.0d19eep+2 +0x1.6ddca6p-2 +0x1.429242p-2 +0x1.79bd98p-2 +0x1.460756p+1 +0x1.4ef02p-3 +0x1.5ab3bap+1 +0x1.81525ep+1 +-0x1.21c3bcp+1 +0x1.99bf02p+1 +-0x1.f42bc6p+0 +0x1.2191ap+2 +-0x1.1fa0bcp+2 +-0x1.1e539cp-3 +0x1.1aaaaep+2 +0x1.1e9862p-2 +-0x1.34fb92p-5 +0x1.78626ep+1 +0x1.a1dd9ap+1 +-0x1.24e6dap+2 +-0x1.0d049p-3 +-0x1.ed15acp+0 +0x1.2c3006p-1 +0x1.751326p-3 +0x1.9b3f0cp+1 +-0x1.53880cp-2 +0x1.d9e45p+1 +0x1.ef5dfap+0 +0x1.aa1c96p+1 +0x1.746548p+1 +0x1.6f4152p-1 +-0x1.d895a6p-5 +-0x1.3de39cp+4 +-0x1.2d7adap-1 +0x1.5fe768p-1 +-0x1.2d176ep+1 +0x1.3c92eep+3 +0x1.76be62p+0 +0x1.91f7aap+1 +0x1.cba684p-2 +-0x1.350b24p-4 +0x1.e89612p+0 +-0x1.e0d5dcp-1 +-0x1.7c4b6ep+1 +-0x1.ce6d08p-4 +-0x1.e4e1fp+0 +0x1.1e69a6p+2 +-0x1.a72352p+2 +-0x1.fa0866p-3 +0x1.193b9ep+2 +-0x1.e5a2dcp+0 +0x1.bac746p-4 +-0x1.a74954p+1 +0x1.b6958ap+1 +0x1.10dfd8p+2 +-0x1.238eeep+1 +0x1.5fef46p+0 +-0x1.b72a8ap-1 +0x1.f9e15ep-2 +0x1.d82a3ap-8 +-0x1.28248ap+1 +-0x1.aa113ap-5 +-0x1.1a412ep+1 +0x1.679748p-1 +0x1.22106ep-2 +-0x1.3122d6p-1 +0x1.0c6e18p+2 +0x1.a79f02p+1 +-0x1.8f3d18p+0 +0x1.14ddb2p-1 +0x1.7ebb34p+1 +-0x1.2e5b18p+3 +-0x1.c61e0cp+1 +0x1.59dcb4p+1 +0x1.79d2bap-3 +0x1.cfc494p-4 +-0x1.2ac43ap+2 +0x1.13727p+2 +-0x1.033e3ap-2 +-0x1.06p+5 +-0x1.23a906p-3 +0x1.bd019ep-2 +-0x1.f5986cp+0 +-0x1.313e8cp+1 +0x1.5ed728p-5 +-0x1.88d504p+1 +0x1.7a0fc8p+1 +-0x1.bba7fep-2 +0x1.2d0bccp+0 +0x1.68e3p+1 +0x1.8c6fb6p+1 +0x1.5531a6p-2 +-0x1.46bc7cp+1 +-0x1.706772p-3 +0x1.c008d6p+0 +-0x1.36eb54p-4 +-0x1.6f548p+1 +0x1.ffadf6p-4 +0x1.972fb6p+1 +0x1.d9eff8p+1 +0x1.0acaecp+0 +0x1.1a5ac2p+2 +0x1.79d0cep+1 +0x1.857eaep+1 +-0x1.0691d2p+1 +0x1.26905p-2 +-0x1.e91e28p-2 +0x1.0a9cbep-2 +-0x1.34f3f4p-4 +0x1.9f93d4p-2 +-0x1.b74e3p-1 +0x1.8300cap+1 +-0x1.43973ap+1 +-0x1.d1cb64p+0 +0x1.154c14p+2 +0x1.e48fap-1 +0x1.bc715ep-2 +-0x1.142f68p-6 +-0x1.ce93ep+1 +-0x1.c96304p-5 +0x1.0cde26p+2 diff --git a/benchtests/exp2m1f-inputs b/benchtests/exp2m1f-inputs new file mode 100644 index 0000000000..fc47072354 --- /dev/null +++ b/benchtests/exp2m1f-inputs @@ -0,0 +1,2388 @@ +## args: float +## ret: float +## includes: math.h +## name: workload-spec2017.wrf +-0x0p+0 +-0x1.092bd4p+2 +-0x1.8af5ecp-1 +0x1.45659p+3 +0x1.388742p+3 +0x1.3857eep+3 +-0x1.80f2ep+0 +-0x1.3a3adcp+1 +-0x1.07b87ap+0 +0x1.3c5c22p+3 +0x1.ede768p+2 +-0x1.bb5bcp-2 +-0x1.0e7d6ep+5 +-0x1.79ac4p+4 +0x1.20fe8ap+3 +-0x1.616dd4p+3 +-0x1.7d3bc2p+0 +0x1.0b8384p+0 +0x1.44422ap+3 +0x1.e3bce8p+2 +0x1.44d11ap+3 +0x1.cfdd92p+2 +-0x1.b5093p+1 +0x1.9d1724p+1 +0x1.9471bcp+2 +0x1.9ccc52p+0 +-0x1.e1ea14p+0 +-0x1.46d1ecp-3 +0x1.927332p-2 +-0x1.d553a2p+1 +0x1.923732p+0 +0x1.6aea06p+2 +0x1.92eb6cp-1 +-0x1.a7cd8ep+2 +-0x1.bda41p+2 +-0x1.312bb8p+1 +0x1.b52ab2p+1 +-0x1.a90d4ep+2 +-0x1.26bc92p+2 +-0x1.6035eep-3 +-0x1.7dbc7ep+3 +-0x1.736a64p-1 +-0x1.7595c8p+2 +-0x1.dade16p-1 +0x1.b3d2c8p+2 +-0x1.ec98dep+1 +-0x1.134a88p+0 +0x1.c5fafap+1 +0x1.255ee4p-3 +-0x1.2da37ep+6 +-0x1.7e171ep+0 +0x1.d9f48ap+2 +-0x1.75f3eep+2 +0x1.3e8f9ap+3 +-0x1.608296p-3 +0x1.b5f2dcp+2 +0x1.d86428p+0 +0x1.412beap+3 +-0x1.3ea40ap+1 +-0x1.41dfc4p+2 +-0x1.21bd5p-2 +-0x1.54fdf8p+2 +-0x1.608d6ap-3 +-0x1.863facp+2 +0x1.ae490ap+2 +-0x1.b04428p+0 +0x1.e5a47p+1 +0x1.bcf1aep+0 +0x1.3c662ap+0 +-0x1.3b0756p+0 +-0x1.6bafb2p+2 +0x1.7bc0dcp+2 +0x1.444f44p+3 +0x1.44609ap+3 +0x1.165ffep+0 +0x1.d47be6p+2 +-0x1.4263ecp+1 +-0x1.8e061ep+2 +0x1.0f0eb8p+0 +-0x1.3fd988p+2 +0x1.4f49f6p+1 +-0x1.543c3cp+3 +-0x1.5f0aa4p-3 +-0x1.5c3fa2p+2 +-0x1.82b9b2p+2 +-0x1.64ce3ap-3 +0x1.79f9f8p+2 +0x1.b24b12p+2 +-0x1.43658cp+3 +-0x1.658068p+0 +0x1.203d1cp+0 +-0x1.c142c6p-1 +0x1.9a1cd6p+1 +-0x1.ade766p+1 +0x1.daf22p+2 +-0x1.62f814p-1 +-0x1.79bb9cp+0 +-0x1.38a3e4p+0 +-0x1.dea0fp+2 +-0x1.f09064p+1 +0x1.e8baep-1 +-0x1.deb80cp+0 +0x1.bc846ap+2 +0x1.ebc59ep+2 +-0x1.4e3848p+3 +0x1.d42b04p+2 +0x1.e0cb2ep-3 +-0x1.7ee3d6p-2 +0x1.dfc3a4p+2 +-0x1.7b7d56p+2 +-0x1.59d8b6p+2 +-0x1.17cea4p+0 +-0x1.a9839ep+2 +0x1.e985b6p+2 +-0x1.eb72dp+2 +0x1.0dd7aep-1 +-0x1.0325eap+1 +0x1.a7f02ep+1 +-0x1.fab7e2p+1 +0x1.ab8e12p+2 +0x1.a28b4ep+2 +0x1.136d86p-4 +-0x1.eafep+0 +-0x1.a5b8ep+4 +-0x1.217af6p+0 +-0x1.517d18p-1 +-0x1.525346p+2 +0x1.4b30ccp-1 +-0x1.5ea04ep-3 +-0x1.b96c1p+2 +-0x1.23c61ep+1 +0x1.1e53dcp-2 +-0x1.f550e2p-2 +0x1.9d8e66p+0 +0x1.c1578cp+2 +0x1.c4bbfcp+2 +-0x1.5a1902p+2 +0x1.d8469cp+2 +0x1.43d612p+3 +-0x1.578826p+1 +-0x1.0ff7e6p+3 +-0x1.f89a3cp-3 +0x1.71853ap+2 +0x1.a8240cp+2 +-0x1.40a39ap+0 +-0x1.2130e4p+2 +0x1.3abdbep+0 +0x1.9b57d6p+0 +-0x1.21eed8p+3 +-0x1.593d7cp-1 +0x1.a0b0d4p+2 +0x1.1f2aa4p+0 +0x1.e06742p+1 +0x1.bab072p+2 +0x1.46825ep+1 +-0x1.6c8604p+2 +0x1.980152p+2 +-0x1.76b6eep-1 +0x1.3d30c2p+3 +0x1.996adap+2 +0x1.3b8866p+3 +-0x1.7b4842p-2 +-0x1.1df6b8p-1 +-0x1.daa564p+2 +0x1.cc7028p+1 +0x1.71de86p+0 +-0x1.6c3d08p+0 +0x1.91c468p-1 +-0x1.3ba51ep-3 +-0x1.135962p-4 +-0x1.1f891p+2 +0x1.aa1e92p+2 +0x1.ccb4eap+2 +0x1.cca312p+2 +-0x1.bbb332p-3 +-0x1.e86bc8p+1 +0x1.53c07ap-1 +0x1.35d8cp+3 +0x1.47f866p+0 +0x1.9808a4p-1 +-0x1.fbf91cp+2 +-0x1.956b98p+1 +-0x1.8c3e7ap+2 +-0x1.a907e2p+2 +-0x1.792b7p+1 +-0x1.5c0e9p-7 +0x1.4629ecp-1 +0x1.30fed6p+1 +-0x1.aa670ap+4 +-0x1.65a70ap-2 +0x1.668866p+0 +0x1.572f5cp-2 +-0x1.55aa82p+2 +-0x1.1336c2p+1 +0x1.3a2c32p+2 +0x1.17d2b8p-1 +0x1.c1f8bcp+1 +0x1.10cb0ep+3 +-0x1.b28c42p+1 +-0x1.adc0fcp-1 +-0x1.7260c4p+2 +-0x1.5e4ae4p-2 +0x1.a4763ap+2 +-0x1.314ab2p-3 +-0x1.81ef1cp+2 +-0x1.a36d9ep+2 +-0x1.d85266p-1 +-0x1.503506p+5 +0x1.45401ep+3 +-0x1.0b5af6p+0 +-0x1.bfd03ap+2 +0x1.487766p+3 +-0x1.490c08p+4 +0x1.5f2852p-3 +-0x1.0e805cp+0 +-0x1.4d25aap+5 +-0x1.14973ep+2 +-0x1.a416b2p-1 +0x1.0e2bccp+1 +0x1.213eb8p-4 +0x1.3fabaep+0 +0x1.ebf592p-1 +-0x1.58f156p+2 +-0x1.e47384p-1 +0x1.41a968p+3 +-0x1.62169ap+1 +-0x1.24518ap+0 +-0x1.2b3848p+2 +-0x1.2473e2p+2 +0x1.cbf3f6p+2 +0x1.c7647ap-1 +0x1.0d0038p-1 +0x1.35fc7ep+3 +0x1.3f8aa6p+3 +-0x1.647b64p-3 +-0x1.5bbab6p-3 +-0x1.79c962p+2 +-0x1.57007ap-3 +-0x1.06533ap+2 +-0x1.43c814p+0 +0x1.8b8652p+0 +0x1.872cb8p+0 +-0x1.7b02ap-3 +-0x1.111332p-2 +-0x1.5cfe1ep-3 +-0x1.5da536p-3 +0x1.10caacp+3 +0x1.ae6508p+2 +0x1.3bef7ap+3 +0x1.282ec8p+2 +-0x1.9a2e56p+2 +-0x1.5bf556p-3 +-0x1.010ea8p+3 +0x1.7b5c7ap-2 +-0x1.648d0ap+0 +-0x1.4f6a82p+0 +0x1.432dcep+3 +0x1.78819ep+2 +-0x1.417cfap+2 +-0x1.9c93eap+2 +-0x1.477822p+2 +-0x1.5f354ep-3 +0x1.3752eep+2 +-0x1.d8cd0ap+2 +-0x1.08e0a4p+0 +0x1.87b0b8p+0 +-0x1.32451ep+1 +0x1.305e7p+0 +-0x1.649322p-3 +-0x1.a2bp-2 +-0x1.60850cp-3 +-0x1.60f59ap-3 +0x1.79ce2cp-1 +-0x1.647d6ap-3 +0x1.a828ep+0 +-0x1.7cd6ep+0 +0x1.44835ep+3 +0x1.0bd40cp+0 +-0x1.b370ccp+0 +-0x1.b13c84p+2 +0x1.82c1dp-1 +-0x1.529398p+5 +-0x1.1a187ep-3 +0x1.d57a16p+2 +0x1.30bf36p+2 +-0x1.449d04p+3 +-0x1.569fcep-3 +-0x1.185e66p+4 +0x1.e631eap-2 +-0x1.ac70f6p-1 +0x1.4627e8p+3 +-0x1.633cc4p-3 +0x1.9f868ep+2 +-0x1.db78ep-1 +-0x1.6b700ap+2 +-0x1.04137ep+1 +0x1.6b8552p+0 +0x1.37ad6p+3 +0x1.75f16p+3 +-0x1.811434p+1 +0x1.417fcep+3 +-0x1.f1ce28p-2 +0x1.363584p+3 +0x1.ff1094p+1 +0x1.90a454p+2 +-0x1.cb3544p+1 +-0x1.651e0ep-3 +0x1.80cdf4p+3 +0x1.5fcd1ap+0 +-0x1.31335cp+5 +0x1.aa75dep+2 +0x1.db9a66p+0 +-0x1.52754p+3 +0x1.10a55ep+0 +0x1.cae0eap+2 +0x1.c6af44p-1 +-0x1.cde492p+1 +-0x1.93aab4p+1 +-0x1.1213c4p+2 +-0x1.9c4b32p+0 +-0x1.d8fa66p+0 +0x1.5cf4a6p+2 +-0x1.90565ap+2 +0x1.b65acp+2 +-0x1.5e0c1ep-3 +0x1.10cb7p+3 +-0x1.658ecap-3 +0x1.43e2f6p+0 +-0x1.bc6366p+2 +0x1.665548p-1 +-0x1.11cd7p-1 +0x1.173eep+0 +-0x1.4e1d58p+2 +0x1.7494ccp+1 +-0x1.26d708p+4 +-0x1.34c074p+1 +0x1.85edc2p+1 +0x1.a79a8ep+1 +-0x1.628072p-3 +0x1.f8daep-3 +0x1.84fe96p-2 +0x1.5b45f4p-2 +-0x1.58870cp-3 +-0x1.37ba3ep+2 +-0x1.653a8ep-1 +0x1.719f5cp-2 +-0x1.2e786ep+1 +0x1.662788p+2 +0x1.dba64p+2 +-0x1.aca33ap+2 +0x1.b3223ap+2 +-0x1.23a97ap+2 +-0x1.b5b582p+2 +0x1.1b9cccp-2 +-0x1.7753bp-2 +0x1.5e542p+2 +-0x1.5abfp+1 +0x1.dd8a8ap+2 +-0x1.b41d7ep+1 +-0x1.65a87p-4 +0x1.3966eap+3 +-0x1.81735ap+2 +0x1.b46238p-1 +-0x1.aa568ep+2 +0x1.37a5bp+3 +0x1.e3p-4 +0x1.97a2f6p-1 +0x1.334cep+0 +0x1.90b7aep-3 +0x1.0d89fap+1 +0x1.6231ccp+2 +-0x1.614f2p+0 +0x1.34f15cp+0 +-0x1.6d631ap+1 +0x1.ba88d2p+2 +-0x1.3f0d44p+3 +0x1.aff8bp-4 +0x1.05c3d6p+1 +0x1.407924p-1 +-0x1.52616cp+0 +0x1.bcbf28p+2 +-0x1.48f218p+2 +0x1.3f457p+0 +0x1.ecbac4p-4 +0x1.9088bap-2 +-0x1.d4d294p+2 +-0x1.620106p-3 +0x1.487b7cp+3 +0x1.3c89f8p-2 +-0x1.82a98p+2 +0x1.f69746p+0 +0x1.cf72b6p+2 +-0x1.6460cep-3 +-0x1.813142p+1 +-0x1.7d2a9cp+2 +0x1.ebf4eep+2 +0x1.bbc7fcp+2 +-0x1.fc9bf2p+1 +-0x1.abd912p-1 +-0x1.181baep-1 +-0x1.376852p-3 +0x1.2f9d3ap+2 +0x1.a43f72p+2 +0x1.10cd82p+3 +0x1.330766p-7 +0x1.9c7abap-2 +-0x1.1d151ap+4 +0x1.0420aep+2 +-0x1.1c82d8p-4 +0x1.03f97p-1 +-0x1.9ce762p-2 +-0x1.01d9a8p+1 +0x1.bc5b9ep-3 +-0x1.b85dd4p+2 +-0x1.5fbe3ep-3 +0x1.a2fca8p-1 +-0x1.f87332p-2 +0x1.ffb102p-1 +0x1.496214p+0 +-0x1.830a7p+2 +-0x1.0509fap-2 +-0x1.53079ap+0 +0x1.76198p+0 +-0x1.5dbb76p-3 +0x1.a46a9ep+1 +-0x1.646f1ap+5 +-0x1.ab75c8p+1 +-0x1.b85902p-6 +0x1.284bc2p+0 +-0x1.62cc74p-3 +0x1.c928cap+2 +0x1.40b302p-2 +-0x1.737232p+2 +0x1.3a823cp-1 +0x1.157b9ep+1 +-0x1.a1ba3ep+4 +0x1.f51844p+2 +0x1.b43bdep+2 +0x1.142676p+2 +-0x1.2d1b7ep+2 +0x1.51213ep-2 +0x1.7b7938p+2 +-0x1.57e164p+1 +-0x1.1f42a4p+1 +-0x1.bedddep+1 +-0x1.0501eap+2 +0x1.c8d1fp+2 +-0x1.7427cep+5 +-0x1.167deep-1 +0x1.820772p-3 +-0x1.f0b1dap+1 +0x1.87c9e4p+2 +0x1.6eeeeap+1 +-0x1.a35f4ap+2 +0x1.8ae50ap+0 +-0x1.28cd7ap+1 +0x1.3e18f6p+0 +0x1.50b63p+2 +0x1.36c114p+3 +-0x1.00bc3p+1 +-0x1.0a799p+3 +0x1.3cc37p+0 +0x1.8c48p-1 +-0x1.0d831ep+1 +0x1.ce8994p+2 +0x1.745a2ep+1 +0x1.36a8p+3 +-0x1.1a770ap+1 +-0x1.86528ep-1 +0x1.47be68p+3 +-0x1.0eb4f6p+0 +-0x1.611df2p-3 +0x1.46c5ecp+3 +-0x1.e55996p-10 +-0x1.5e20e4p-3 +-0x1.60f51ep-1 +-0x1.49bcp+2 +0x1.649348p+1 +0x1.87a4aep-4 +-0x1.7aa58cp+2 +0x1.8cf99ap-4 +0x1.bd5326p+2 +0x1.8ce666p+0 +-0x1.6bff88p-1 +0x1.d12a7ap+2 +0x1.7dc29cp+2 +0x1.421e8ap+3 +-0x1.656186p-3 +-0x1.1fa2e2p+1 +0x1.dfd894p+2 +-0x1.e24b84p-1 +-0x1.08b8c2p+0 +-0x1.b3cd68p+2 +-0x1.5b7acep-3 +0x1.e3432ap+2 +-0x1.58e15cp+2 +-0x1.0d7ad6p+3 +0x1.a8262ep-3 +-0x1.55364ap+2 +-0x1.b95818p+1 +-0x1.5263c2p+1 +-0x1.43d4ccp-1 +-0x1.ccb046p+3 +-0x1.f4969ap-1 +-0x1.3bcb7ep-2 +-0x1.2f32cp+2 +-0x1.61303ap-3 +-0x1.df2826p-1 +0x1.5e9fc2p+2 +0x1.d03e14p-4 +0x1.42320cp+3 +-0x1.aa2f4p+2 +-0x1.f3d52ap+0 +-0x1.818c72p-2 +0x1.32d08ep+2 +-0x1.c332p+0 +0x1.dc5dc2p+0 +0x1.1c7358p-1 +-0x1.3adfd8p-1 +0x1.113bap+0 +-0x1.5b65a6p-3 +0x1.36437cp+3 +0x1.bb8dbap+2 +-0x1.c46d9p+1 +-0x1.c678d6p-1 +0x1.3c9146p+3 +0x1.485612p+3 +0x1.f87d98p-1 +-0x1.bf2d5cp+0 +-0x1.cd2c2ap+2 +0x1.829d9ap-1 +-0x1.a95bd8p+2 +0x1.a857aep+0 +-0x1.03261cp+2 +-0x1.8657d6p-1 +0x1.50b348p+0 +0x1.d615fp+2 +0x1.8b0548p-5 +-0x1.d0aa84p+1 +-0x1.9b93cap+2 +-0x1.595412p-3 +0x1.b6ab74p-2 +0x1.16c592p-2 +0x1.cccc72p+1 +-0x1.657c7p+1 +0x1.aa995cp+2 +-0x1.fa172ep+1 +-0x1.12a886p+2 +-0x1.9173d8p+2 +0x1.9c3ca8p-3 +0x1.e796ccp+0 +0x1.182396p-3 +-0x1.4291dap-4 +-0x1.62f536p-3 +0x1.7216e8p+2 +0x1.cb45c8p+2 +-0x1.497518p+2 +-0x1.351996p+1 +-0x1.0dfe32p+2 +0x1.3bfc3cp+0 +-0x1.39bd7p-6 +-0x1.3a197ap+1 +-0x1.830bc2p+2 +0x1.b3857ep-5 +-0x1.53f426p+2 +-0x1.5f6ba2p-3 +-0x1.4ed77ap+1 +-0x1.556abp+2 +0x1.9712p+1 +0x1.0bf266p+0 +-0x1.ad2376p+2 +-0x1.af3504p+1 +-0x1.76e7ep+2 +-0x1.6562bap+1 +0x1.843614p-2 +0x1.384ef8p+3 +-0x1.47a784p+0 +0x1.f4a732p+2 +-0x1.7ce922p+2 +-0x1.336c52p+0 +-0x1.48c65cp+1 +0x1.494452p+3 +-0x1.193914p+5 +0x1.3577d2p+2 +-0x1.63f1bep-3 +-0x1.55d4d8p-4 +0x1.d880eep-1 +-0x1.7204ep+0 +0x1.dbbb12p+2 +-0x1.5e758ap-3 +-0x1.21018p+1 +0x1.06676ep+2 +-0x1.646416p-3 +0x1.03d04p+2 +0x1.10cb02p+3 +-0x1.6987b8p+1 +-0x1.fb44dp+0 +0x1.0e49ecp+1 +-0x1.ae974ap+2 +-0x1.8170a4p-9 +-0x1.a49d78p+1 +0x1.f48614p-2 +0x1.c3c598p+0 +0x1.5b5d38p+2 +-0x1.e7e994p+1 +-0x1.5ffb9ap-3 +-0x1.1b21bp+3 +-0x1.71927p+1 +-0x1.5b87aep-3 +0x1.106eccp+2 +0x1.3e7aep-4 +0x1.36a5d8p+3 +0x1.1e7f48p+0 +-0x1.6caff6p+2 +0x1.91cf84p-1 +-0x1.34c43cp+1 +-0x1.594ad2p+2 +0x1.dd37d4p+2 +0x1.f073e8p+2 +0x1.cef936p+2 +-0x1.bab5acp-2 +-0x1.035e0ap+0 +0x1.6d44ccp-2 +-0x1.1c4808p+2 +-0x1.e8786ap+1 +0x1.388c7cp+3 +0x1.8766aep+1 +-0x1.5eaeb6p-3 +-0x1.64b42cp-3 +-0x1.027faep-1 +-0x1.ba8b4ep+1 +0x1.266edap+2 +0x1.9fd6c2p+2 +-0x1.a44034p+1 +0x1.78abccp+1 +0x1.377b5p+3 +-0x1.940a02p+1 +-0x1.fdb2bcp+0 +-0x1.65ae92p-3 +0x1.a521c8p+3 +-0x1.4749aap+3 +-0x1.c1a2dep-1 +-0x1.7f4bfep+3 +0x1.3f9db8p+3 +0x1.6c7c0ap+2 +0x1.82779cp-1 +-0x1.824e0ep+2 +0x1.fec4ccp-2 +0x1.e58412p+2 +-0x1.578fc8p+3 +0x1.0ccf34p-2 +-0x1.6173bcp+0 +-0x1.f7357p+0 +0x1.f3e768p+2 +0x1.4317e2p+3 +-0x1.0f5222p+1 +-0x1.e5895ep-5 +0x1.d298dep+2 +0x1.c86c1ep+2 +0x1.459134p+3 +-0x1.553b7ap-3 +-0x1.05c35cp+0 +0x1.4461bcp+2 +0x1.9bc9eap-4 +0x1.06295cp+0 +0x1.43d93ep+3 +0x1.556832p+2 +0x1.f4b8d6p+1 +-0x1.465f64p+1 +-0x1.614fdep-3 +-0x1.b5350ep-3 +0x1.9f56p+0 +0x1.454eb6p+3 +-0x1.fba2cep+1 +-0x1.5f303cp-3 +0x1.6ceed2p+0 +0x1.58255cp+2 +0x1.b69528p+1 +0x1.7177ep+3 +-0x1.a45ad8p-1 +-0x1.94f706p+0 +-0x1.be9e04p+2 +0x1.5bf948p+0 +0x1.10cacep+3 +-0x1.740c94p+2 +-0x1.09bff6p+1 +0x1.3671c4p+3 +0x1.bec15cp+2 +-0x1.6346d4p+2 +0x1.bd4e1cp+2 +0x1.82d99ap-1 +-0x1.8225a8p+2 +0x1.220a66p-2 +-0x1.e16c52p-1 +-0x1.35848ep-1 +0x1.e11384p-2 +-0x1.8d8592p+0 +0x1.4c29bcp+1 +0x1.387af8p+2 +0x1.8d8fd6p-1 +0x1.c7d02ep+2 +-0x0p+0 +0x1.38ec96p+3 +-0x1.306a06p+2 +-0x1.59c33ep-3 +0x1.6d72f4p+0 +-0x1.cf944cp+2 +-0x1.5dac8cp-3 +0x1.acda6p+2 +-0x1.e3cbf2p+1 +-0x1.0cdac4p+0 +0x1.390014p+2 +-0x1.64fceep+2 +-0x1.82edfep+2 +-0x1.3ea13cp+3 +-0x1.0b4e5cp+1 +0x1.01028ep-5 +-0x1.2bb428p-2 +0x1.00128p+0 +-0x1.7adbfap-1 +0x1.e535f2p+2 +-0x1.648a8cp-3 +0x1.e84186p+2 +-0x1.6321p+0 +-0x1.0a5654p+3 +0x1.124c1cp-2 +0x1.bba78ep+2 +0x1.4531d8p+3 +0x1.1bf358p+0 +0x1.6cf66p+1 +-0x1.033dc6p+2 +0x1.4311aap+3 +-0x1.766bdcp-3 +0x1.828456p+2 +0x1.3e467ap+3 +-0x1.7fcebep-2 +-0x1.432faep-1 +-0x1.924aaep+1 +-0x1.646662p+2 +-0x1.892088p+0 +-0x1.2b8eb8p+0 +0x1.50170ap-5 +0x1.50ad28p+1 +0x1.e2ca16p+2 +0x1.c2a97cp-1 +-0x1.613492p-3 +-0x1.7c95f4p+1 +-0x1.b20d22p+0 +0x1.713644p-2 +0x1.f59c7ap-2 +0x1.07cd36p+2 +-0x1.467f64p-2 +-0x1.01f75cp-2 +0x1.54450cp-2 +-0x1.cd8dc2p-1 +0x1.441b4ap+3 +-0x1.a839b6p+2 +0x1.6a2932p+0 +-0x1.3345ecp-1 +0x1.d0f1dep+2 +-0x1.657a4cp-3 +-0x1.408364p+2 +-0x1.01883ep+1 +0x1.fe29aap-4 +0x1.924d0ap+0 +-0x1.5d1a3cp-2 +0x1.c7d03cp+2 +0x1.d03b78p+2 +0x1.0b450ep+0 +-0x1.e230c4p+1 +-0x1.baa6ep-1 +0x1.75c21ep+2 +0x1.30bcbcp+0 +-0x1.8f395cp+2 +0x1.d0c2aep+2 +-0x1.64f59ap-3 +-0x1.ea3c2ap+1 +-0x1.0506c6p+2 +0x1.67c7fp-2 +0x1.1b8feep+2 +-0x1.1b0498p+3 +0x1.451682p+3 +0x1.76a29p-1 +-0x1.2162d4p+4 +-0x1.7e93c8p-4 +-0x1.afffd6p+2 +0x1.f2p-7 +-0x1.8c62bep+5 +0x1.effbep+2 +0x1.d1b852p+2 +0x1.5cdbd2p+0 +0x1.c06b2p-1 +-0x1.b33b84p-2 +0x1.71d7c2p+0 +-0x1.64c27ap-3 +-0x1.3ea13cp+3 +-0x1.7d82b2p+2 +0x1.aa6d0cp+2 +-0x1.ed7f5p-4 +-0x1.e8264ep+2 +-0x1.ae1c56p+2 +-0x1.7abe24p+2 +0x1.4236f4p+3 +-0x1.c2268cp-2 +0x1.6114aep+1 +-0x1.60f716p-3 +-0x1.09918ap+0 +0x1.1c06a4p+0 +0x1.860c26p-2 +0x1.c42886p+3 +-0x1.3447aep-5 +-0x1.db094cp+3 +-0x1.6dcbep+2 +-0x1.4ec2dep-2 +0x1.45b736p+3 +0x1.3ff3dp-1 +-0x1.bcfd2ap+2 +-0x1.8854acp+2 +-0x1.a0ff42p+0 +0x1.04fab8p-1 +-0x1.30bp-2 +0x1.407192p+3 +-0x1.79ac6ap+2 +0x1.2277cap-1 +0x1.35f784p+3 +-0x1.35df54p+2 +-0x1.610686p-3 +-0x1.64178ep-3 +-0x1.65b712p-3 +0x1.10795cp+0 +0x1.8ab654p+2 +0x1.37e6dcp+3 +0x1.4375bep+3 +0x1.98562p+2 +0x1.e2c1a8p+2 +0x1.53f1ecp-1 +-0x1.0c4b76p+1 +-0x1.54a9ep+2 +0x1.84b444p+3 +0x1.a738a4p+0 +0x1.95b5e4p+2 +-0x1.eda14p+1 +0x1.9f4bb6p+2 +0x1.ff370ap-1 +0x1.443dbcp+3 +0x1.7780ccp-1 +-0x1.968c9ap+1 +0x1.6612fap+2 +0x1.7b6bdep+2 +-0x1.5b9b7cp-3 +0x1.8679b8p-1 +0x1.456d38p+3 +-0x1.b3db5cp-1 +0x1.9c6b3cp+1 +0x1.96479cp+0 +-0x1.814ec8p+2 +-0x1.6dcb18p+2 +0x1.110848p-2 +-0x1.1f7ffp+1 +-0x1.e60428p+1 +0x1.6bea2ep+1 +0x1.21c3d4p-1 +-0x1.d0723ap+2 +-0x1.2b0ccap-1 +-0x1.ed681cp+1 +0x1.5423d6p-4 +0x1.43c694p+1 +0x1.335p+0 +-0x1.551ee4p-3 +-0x1.7961eep+2 +-0x1.10339cp+2 +0x1.62a75ep-4 +0x1.d3e368p+2 +-0x1.c5a18ep+1 +-0x1.2da37ep+6 +0x1.9fd6ep+0 +-0x1.617842p+2 +0x1.7ceeb8p-3 +0x1.c1b256p-1 +-0x1.04dbfp+5 +-0x1.c276c6p+0 +-0x1.667c36p+2 +-0x1.700c48p+2 +0x1.0174ecp+0 +-0x1.e1e5f8p-1 +0x1.e5b97p+2 +0x1.797d68p+2 +-0x1.2b722ap+0 +-0x1.143b4ap+3 +0x1.437d6ep+3 +0x1.942202p-4 +-0x1.06013ep+1 +-0x1.e739p+2 +0x1.369ddap+3 +-0x1.6f15eap+2 +0x1.231e36p+2 +-0x1.f77b84p+0 +-0x1.68ed1ep+0 +-0x1.84c91ap+4 +-0x1.e6819cp-2 +0x1.a0c1e6p+2 +-0x1.80a3ecp+0 +0x1.ce8948p-2 +-0x1.e6dc46p+1 +0x1.bbde32p-5 +0x1.0ef40cp+2 +-0x1.5f668p-1 +-0x1.99b3a4p+2 +0x1.497064p+3 +-0x1.96d5f6p+2 +-0x1.2db79p-5 +-0x1.5b661ep-3 +0x1.5f1226p+2 +0x1.cd7992p+2 +-0x1.5c4c9ep+2 +0x1.860548p+0 +0x1.3d40ep+3 +0x1.1e676ep+2 +0x1.7a52e6p-2 +-0x1.5ecea6p+0 +0x1.53567ap+2 +-0x1.78bf34p-1 +0x1.430f92p+3 +-0x1.26b57p-2 +-0x1.81b49p+2 +-0x1.7949ep+0 +-0x1.58403ep-3 +0x1.941b48p+0 +-0x1.508df4p+2 +0x1.99ca4ap-2 +-0x1.944b84p-3 +0x1.36bb82p+3 +0x1.2b7daep+0 +-0x1.3b6ed8p+2 +0x1.18abep-2 +-0x1.f359d6p+0 +-0x1.8d59fep-2 +0x1.175bd4p-1 +-0x1.7bb492p+2 +-0x1.6c687ap+0 +-0x1.6551b2p-3 +-0x1.1077aep-2 +-0x1.23a6d6p+1 +-0x1.7c9692p+2 +-0x1.649712p-3 +0x1.71726ap+1 +-0x1.10ac4ep+3 +0x1.3a74a6p+0 +0x1.6e98a4p-1 +0x1.b7dc68p-2 +-0x1.c34fbep+1 +-0x1.9b2efap+2 +0x1.64fc28p+1 +-0x1.08275ep+0 +-0x1.90b768p+1 +-0x1.04687ap+0 +0x1.022a3ep-2 +0x1.31d856p+2 +-0x1.1916a6p+2 +-0x1.071b6p+5 +0x1.580aeep+2 +-0x1.0e753ep+1 +0x1.6d8e6ep+0 +0x1.afc04p+2 +-0x1.0c5c88p+2 +-0x1.0b0094p+2 +-0x1.a9374cp+2 +-0x1.389e9ap-4 +-0x1.9e1a66p+0 +0x1.2917a4p+2 +0x1.4516a4p+0 +-0x1.58d6d2p-3 +-0x1.8d3282p-1 +0x1.9ce2acp+3 +0x1.75f332p-1 +0x1.ab3d0ap+0 +-0x1.75513ep+3 +0x1.b4056ap+1 +0x1.accf0ap+0 +-0x1.648446p-3 +0x1.b6284ap+2 +0x1.0a73e6p+3 +-0x1.8f931ep+0 +-0x1.653ab4p-3 +-0x1.a07646p+2 +-0x1.838fcep+2 +-0x1.1fcca4p-1 +0x1.3f8acp+3 +-0x1.e72a6p+2 +0x1.53451ep-3 +-0x1.21bf8p-1 +0x1.477cccp+0 +-0x1.1f2f32p-1 +0x1.65303cp+0 +0x1.43e608p+3 +-0x1.c06e3cp+0 +0x1.b3408ep+0 +-0x1.5b09dp-2 +-0x1.2f482ep+2 +-0x1.358416p+2 +-0x1.d2b2ap+2 +-0x1.1883d6p+2 +0x1.d2229cp+2 +-0x1.35c1a2p+1 +-0x1.8bb666p+3 +-0x1.1d2eb6p+3 +-0x1.600dp-3 +-0x1.1c721p+3 +-0x1.644118p+2 +0x1.9f08ap+2 +0x1.8c13d4p+2 +0x1.35c95p+3 +0x1.80d7cap+2 +-0x1.58caa4p-2 +0x1.4628p-2 +-0x1.27d56ep+0 +0x1.380e6cp+3 +0x1.8539aap+2 +-0x1.56efep+1 +-0x1.ef1648p-1 +-0x1.8549eep+2 +0x1.155e12p+4 +-0x1.53d3bap-3 +-0x1.9c7e88p+2 +0x1.d688fcp+2 +-0x1.54807ep-3 +-0x1.7436b8p-2 +0x1.6ca666p-1 +-0x1.6c77b6p-1 +0x1.37fa42p+3 +-0x1.98f9eep+1 +0x1.1b44p+0 +-0x1.3277eep-1 +0x1.0da99ap-2 +0x1.9c6892p+2 +-0x1.c47754p+2 +0x1.a31352p-4 +0x1.71f8p-1 +-0x1.22ff28p+1 +0x1.374108p+3 +0x1.b5cd8ap+1 +-0x1.5b3f32p-3 +-0x1.56193ap-3 +-0x1.2fdd8ap+4 +-0x1.5956b2p+2 +-0x1.772006p+1 +-0x1.5a291cp-3 +0x1.2124fcp+2 +0x1.d378fp+2 +0x1.76b3f4p-3 +0x1.00387ap+0 +-0x1.362686p+2 +0x1.451ba6p+3 +-0x1.066914p+1 +0x1.213ddap+0 +-0x1.6f10d2p+2 +-0x1.ecab64p-6 +0x1.b96d0cp+2 +-0x1.63cd96p-3 +0x1.366b4cp+1 +0x1.31a756p+0 +-0x1.c721c6p-5 +-0x1.6ed70ap-6 +0x1.24ab92p-3 +-0x1.47a3aep-1 +0x1.950d6p+2 +-0x1.57ffb6p-3 +0x1.c9c3aep+0 +0x1.d7bf4p+2 +-0x1.2814f6p+0 +-0x1.60f6cep-3 +-0x1.62a2fep-3 +0x1.d818ccp-1 +0x1.76c47ap-3 +-0x1.5b8674p+2 +-0x1.d5f9dep+2 +0x1.620a42p+2 +0x1.b6d2d6p+2 +-0x1.4b037p+0 +-0x1.a0735cp-1 +-0x1.272cf6p-1 +-0x1.14c35cp-1 +-0x1.d9620ap-1 +0x1.f2921p-1 +0x1.7784f6p+1 +0x1.ba38f6p-3 +-0x1.cecfdep+2 +-0x1.13b832p-5 +0x1.d4f442p+2 +0x1.b36cap+2 +0x1.500062p-1 +-0x1.04dc5cp+1 +-0x1.5e9754p+2 +-0x1.b961p-6 +-0x1.cfcfe6p+1 +0x1.650866p+0 +-0x1.545418p+3 +-0x1.115a7ap+0 +-0x1.99b554p+2 +-0x1.ea403p-2 +-0x1.6183a2p-2 +0x1.919b5ap+2 +-0x1.5afc4ap-3 +0x1.ea9146p-2 +-0x1.00c81ep+1 +-0x1.4aa03ep+2 +0x1.878edp-3 +0x1.18dadap-4 +0x1.60d8bcp+1 +0x1.e9192cp-1 +0x1.797b0ap+0 +0x1.1dafa4p+0 +-0x1.98f70ap-1 +0x1.ae13c2p+2 +-0x1.c9ffd6p-4 +0x1.3cd90ap+0 +-0x1.5638cep-3 +0x1.448b38p+3 +0x1.b5f5e4p+2 +-0x1.27e222p+2 +0x1.42a508p+3 +-0x1.9a6a7p+2 +0x1.36cbc2p+3 +0x1.e9676p+1 +0x1.95abdep+2 +-0x1.666aep+0 +-0x1.d48214p+0 +0x1.d7d86ap+1 +0x1.78e714p+1 +0x1.a4161ep-2 +-0x1.34e68ep-1 +0x1.d5450cp+2 +0x1.7e3dc2p-2 +-0x1.92407ap+2 +0x1.4418b4p+3 +-0x1.763d3p+3 +-0x1.116978p+3 +0x1.9018aep+2 +-0x1.80c9bep-2 +0x1.5bec14p+0 +-0x1.7ccf84p+0 +0x1.44e018p+3 +-0x1.279b7p+2 +-0x1.2d08ap-1 +0x1.bb4d8ep+1 +0x1.be100ep-1 +-0x1.5c1c3ap-3 +0x1.4bf624p+2 +0x1.adaa76p+2 +-0x1.5cd68ep+0 +-0x1.3185fp+2 +0x1.3dee18p-4 +-0x1.e395f8p-1 +-0x1.e8528ap+2 +-0x1.5b326ap+2 +0x1.35bcbcp+3 +-0x1.0802cp+5 +0x1.fdab84p-2 +-0x1.158152p-1 +-0x1.5140c6p+3 +0x1.14f5c2p+1 +-0x1.a6f156p-1 +-0x1.63d8b2p-3 +-0x1.228ec4p+2 +0x1.51173p-1 +-0x1.c2abeep+2 +-0x1.5f6792p+2 +-0x1.88bfc2p+2 +0x1.4a6decp+0 +0x1.d0a6cp+2 +-0x1.c10dccp+1 +-0x1.60b94p+5 +-0x1.3f78eep+3 +0x1.f1b1ep+1 +-0x1.404326p+2 +0x1.9c6bd6p-2 +0x1.4e963cp-4 +0x1.1d26b4p+2 +-0x1.37d952p+2 +0x1.7eee38p+3 +0x1.c5392ep+2 +0x1.9128ap+2 +0x1.9c8fd6p+2 +0x1.be43d6p-2 +-0x1.57f9e2p-4 +0x1.434bacp+3 +0x1.2d0f2cp-1 +-0x1.ba23aap+1 +0x1.3ae01cp+3 +-0x1.95778ap+2 +-0x1.c65b3cp+1 +0x1.23ae7ap+1 +-0x1.23d308p+2 +-0x1.ba5c3cp+0 +-0x1.d07b0ep-3 +0x1.504052p-2 +0x1.5e1a46p+0 +0x1.95dd28p+2 +0x1.897f68p+2 +-0x1.56811ep+0 +0x1.9b504p+2 +0x1.034f02p+4 +-0x1.6a872ap+0 +0x1.eb077ap+2 +-0x1.6b6004p+0 +0x1.71ec28p-1 +0x1.00a18ap+2 +0x1.a65932p+0 +0x1.f27e3cp+2 +-0x1.683308p+0 +-0x1.6de68ap+0 +-0x1.f15cbap+2 +-0x1.2390c2p+2 +0x1.eeaa42p+2 +-0x1.feccb4p+0 +-0x1.234018p+4 +-0x1.ffb332p+0 +-0x1.8fbd1ep-1 +-0x1.2666b8p-1 +0x1.10c816p+3 +-0x1.7fd956p-2 +-0x1.073c3ap+3 +-0x1.63a47cp+1 +0x1.814d1ep-2 +0x1.65d55ap-1 +-0x1.64c9b4p-3 +0x1.d9562ap+2 +-0x1.60f91cp-3 +-0x1.650866p-3 +0x1.48178cp+3 +0x1.e0d776p+2 +-0x1.6f9418p+1 +-0x1.1bf3ecp+0 +0x1.f4717p-1 +0x1.c791f6p+2 +-0x1.525c08p-1 +-0x1.62d062p-3 +-0x1.eb511ep-2 +-0x1.09cd3cp+0 +0x1.3e45ap+3 +0x1.301802p-1 +-0x1.39bbdap+2 +-0x1.c82196p+2 +-0x1.303b3ap+4 +0x1.8f4b08p+2 +0x1.035eeep-2 +-0x1.5fe326p-3 +0x1.04028ep-5 +0x1.d3fafcp+2 +0x1.42ba5ap-1 +-0x1.cdeb2ep+0 +-0x1.7500a8p+2 +0x1.7dbbbcp+0 +-0x1.f4eb86p+2 +0x1.7c47aep-6 +0x1.75b67p-2 +0x1.8d873ap+2 +0x1.5bccacp+0 +-0x1.e151a8p+0 +-0x1.51474ep-2 +0x1.c0ea9ep+2 +-0x1.a23e0ep+2 +-0x1.011accp+0 +-0x1.dde764p+4 +-0x1.da003cp+0 +-0x1.b005c2p-4 +0x1.43b4aep+3 +0x1.869f5cp+1 +-0x1.f8e706p+0 +-0x1.55077ap+1 +-0x1.136deap+2 +-0x1.0376a6p+3 +0x1.f668f6p-3 +0x1.17f31ep+0 +0x1.ab83d8p-1 +-0x1.534404p+4 +-0x1.63de7cp-3 +-0x1.1cfap+0 +0x1.576bd6p+0 +-0x1.4463a4p+2 +-0x1.65a27cp-3 +0x1.b13052p-2 +0x1.d483a4p+2 +-0x1.02d042p+1 +-0x1.60fa9cp-3 +-0x1.16e87ap-1 +0x1.b492b8p+0 +-0x1.a4cf6ep+2 +0x1.19af4cp+1 +0x1.7e8bc2p+2 +-0x1.29775p+1 +-0x1.4cccccp+1 +0x1.167266p+0 +-0x1.647cccp+1 +0x1.1debfap+1 +-0x1.4e9166p-3 +0x1.87c92ap+0 +-0x1.3ea13cp+3 +0x1.8976ccp+0 +0x1.6c7384p+0 +-0x1.5b557cp-3 +-0x1.30c126p+1 +-0x1.639d72p-3 +-0x1.4c44ap+2 +-0x1.6ea332p+1 +0x1.8e982ap+2 +-0x1.81006p+2 +0x1.1d4be4p+4 +-0x1.ec89fcp-1 +-0x1.503f1ap+2 +0x1.e57e76p+2 +-0x1.5ddcaap-1 +0x1.439434p+3 +-0x1.4a897ap+2 +-0x1.939222p+2 +-0x1.3da46cp-4 +-0x1.58bf08p+2 +-0x1.3eaadep+3 +-0x1.aab2eep+2 +-0x1.7c5af6p-1 +0x1.bf4fccp+2 +0x1.10cd1ep+3 +0x1.fa0198p-1 +-0x1.ca7dc2p-4 +0x1.894544p+2 +0x1.442d5ep+3 +0x1.371242p+3 +-0x1.95fba6p-1 +0x1.d1a67p+2 +0x1.769918p+0 +0x1.4e61c2p-1 +-0x1.57c1ep+1 +-0x1.d74902p+0 +-0x1.3ea13cp+3 +-0x1.851e32p+2 +0x1.247602p+2 +0x1.3f0314p+1 +-0x1.637aep-2 +0x1.41b1fap+3 +-0x1.04efc6p-3 +-0x1.88130cp+2 +-0x1.b2a146p+2 +0x1.54bb5ep+3 +-0x1.a06ap+0 +-0x1.569e66p+0 +0x1.2a59a8p+4 +-0x1.6105fap-3 +-0x1.82a98cp+1 +0x1.a428f2p+2 +-0x1.8bb3eap+0 +-0x1.627f62p-3 +0x1.b0f5c2p-9 +-0x1.469442p+1 +0x1.4507e8p+3 +-0x1.86afacp+2 +0x1.da41f8p+2 +-0x1.eece8ep-1 +-0x1.03cddp+1 +-0x1.225768p+4 +-0x1.51a33ap+2 +0x1.24c926p+0 +0x1.7b8ad4p+2 +-0x1.17bebcp-2 +0x1.ac0e14p-3 +-0x1.82f9f6p+2 +-0x1.5e5b3p-1 +-0x1.805ffcp+2 +-0x1.600742p-3 +-0x1.887c68p-3 +-0x1.615aacp-3 +-0x1.7ba8fep+4 +0x1.f6370ap-4 +-0x1.e06b9p+2 +-0x1.5fbfb2p-3 +0x1.aaa50ep+2 +-0x1.8176fep+2 +0x1.5ce1d2p+0 +0x1.b23e64p-1 +-0x1.aea0ep+0 +-0x1.26c00cp+2 +-0x1.5a23bap+2 +-0x1.55a02ep-3 +0x1.350bap+3 +-0x1.9b4ec6p+1 +0x1.e0a52ep+2 +-0x1.74fe26p+2 +-0x1.1d92c2p+1 +-0x1.5da7d6p-1 +-0x1.312282p+1 +-0x1.62c91cp-3 +-0x1.c173f8p-1 +-0x1.9f0316p-1 +-0x1.4ba776p+2 +0x1.cb445ep+2 +-0x1.7efb5cp-1 +0x1.4595cap+3 +-0x1.5bcf12p-3 +0x1.c3b3d6p-3 +-0x1.cb85d8p-3 +-0x1.2824ccp-1 +-0x1.a35d68p+2 +-0x1.87e812p+2 +-0x1.68cfd6p-1 +-0x1.b44846p+2 +-0x1.4cb4d4p+2 +-0x1.058c1cp-2 +-0x1.600046p-3 +0x1.d80cb8p-2 +0x1.babe66p+0 +0x1.be9c56p+2 +0x1.016978p-2 +-0x1.a61fbp+2 +0x1.6bd5f6p+2 +-0x1.9e2b36p-2 +-0x1.936c78p+2 +-0x1.390932p+0 +-0x1.c978ccp+0 +0x1.4fbcccp-2 +-0x1.605154p-3 +0x1.00c70ap-2 +-0x1.65c06cp-3 +0x1.a6f552p+2 +0x1.0f98p-1 +-0x1.a673c6p+1 +0x1.36420ap+3 +0x1.20469p+2 +0x1.da8c28p-1 +-0x1.451f4ep+2 +-0x1.c56adcp+2 +0x1.c57f32p+0 +-0x1.12477p-1 +-0x1.3aa0aap-6 +0x1.c60c24p+1 +-0x1.6476acp-3 +-0x1.6bbc9cp+2 +-0x1.7e46b6p+1 +-0x1.fae904p-3 +0x1.b9451ep-4 +0x1.4a5348p+0 +0x1.aa0cp-1 +-0x1.7b5694p+2 +-0x1.59cb04p+2 +0x1.47eaf2p+3 +-0x1.61696cp-3 +0x1.3b5cep+0 +0x1.30facp+0 +-0x1.7dfp-2 +0x1.aefcfap+1 +0x1.e5ae7cp+2 +-0x1.9920aap+1 +-0x1.410848p+1 +0x1.7aa234p+1 +0x1.5fe74cp+2 +-0x1.07b5aep+0 +0x1.8d2e4p-1 +-0x1.5dc9bap-3 +0x1.4edc32p-5 +-0x1.5a747ap-4 +-0x1.551516p-3 +0x1.427c36p+3 +0x1.d5762p+2 +-0x1.a94422p+0 +0x1.2813dp+0 +-0x1.0aececp+2 +0x1.430af8p+3 +0x1.704334p+0 +-0x1.6180ecp-3 +0x1.9878cep+2 +-0x1.5c8532p-3 +-0x1.a0f696p+2 +-0x1.63c81cp-3 +0x1.5c9ccep+2 +0x1.d0b332p+0 +0x1.dd02fp+2 +0x1.30824ap-4 +0x1.f0ce3cp-1 +0x1.375f9cp+3 +-0x1.1b636cp+4 +-0x1.c607ap+2 +0x1.93b6f6p+0 +-0x1.640b8ap-3 +-0x1.ac8748p+0 +-0x1.148e5ep+2 +-0x1.60dfdep-3 +-0x1.61688cp-3 +-0x1.a87362p+2 +-0x1.5d02d8p+3 +-0x1.3692eep-1 +0x1.ece852p-3 +-0x1.01c6ep+0 +0x1.be7a58p+2 +-0x1.365372p-3 +0x1.7dd0d4p-1 +0x1.94f6ep+0 +0x1.df5e8ap+2 +-0x1.28cdf2p+0 +-0x1.6547d2p-3 +-0x1.cbe236p-4 +-0x1.23dffep+1 +-0x1.2b9e4ep+2 +0x1.28ff22p+0 +-0x1.5f1b8ep-3 +-0x1.af4f5cp-2 +-0x1.261c7cp+2 +-0x1.940248p+0 +-0x1.aa31eap-1 +-0x1.17841ep+0 +-0x1.a15b06p+1 +0x1.852a0ap+2 +-0x1.1d74a4p-1 +0x1.3d8912p+3 +0x1.def324p+2 +0x1.3ba8eep+0 +-0x1.5fbb8ep+0 +0x1.55f48ep-2 +-0x1.d12e1p+1 +-0x1.591d24p-3 +-0x1.f08bbcp-1 +-0x1.d5aadp+2 +0x1.d7b94p+2 +0x1.4215ecp+3 +-0x1.531ac8p+3 +-0x1.785704p+2 +0x1.cab5d6p+2 +0x1.48437ap+3 +0x1.fd2b46p-5 +-0x1.640bfep-3 +0x1.44d448p+0 +-0x1.4bfd76p-1 +0x1.49063p+3 +-0x1.74b3a8p+3 +0x1.7f4ca8p+1 +0x1.55a30ep+1 +0x1.2fc866p+0 +-0x1.80e5eap+0 +-0x1.2e49e2p+4 +-0x1.89d538p+1 +0x1.8012b8p+0 +-0x1.651586p-3 +-0x1.82af5cp+2 +0x1.f1b0a4p-1 +0x1.28e914p+1 +-0x1.e08a7ap+0 +0x1.10c9f4p+3 +-0x1.64dbbcp-3 +0x1.cfceb8p+2 +-0x1.64e71ep+2 +0x1.01c214p-1 +-0x1.0cee7ap+2 +0x1.66bb84p-2 +-0x1.47ba7ap+5 +0x1.ccb8e8p+2 +0x1.d34b7cp+2 +0x1.5828p+0 +-0x1.9bf8c6p+2 +-0x1.270aacp+2 +0x1.445e38p+3 +-0x1.c2af3p+2 +0x1.73bcd6p-1 +-0x1.5d3f7ap-3 +-0x1.54c33ep+3 +0x1.b0f92ep+2 +0x1.54694ap+2 +0x1.365b8ep-1 +0x1.81712ep+1 +-0x1.64de44p-3 +0x1.8b28f6p-2 +0x1.e79ceap+2 +-0x1.790c14p+2 +-0x1.0e76b8p+5 +-0x1.7afc7p+2 +0x1.bb846ep+2 +-0x1.b1403cp+1 +-0x1.86fe4cp+2 +0x1.05ff34p+4 +-0x1.861eb8p+0 +0x1.6ee384p+0 +-0x1.1d674cp-1 +0x1.27cee8p-3 +0x1.203dfcp+1 +-0x1.94085p+1 +-0x1.62fdf6p-3 +-0x1.259494p+4 +0x1.e7b2bap+2 +-0x1.7ea7bcp-3 +-0x1.3ea13cp+3 +-0x1.287842p+2 +-0x1.ab0f56p+2 +0x1.d4ab54p+2 +0x1.99c332p-3 +0x1.2739aep+0 +0x1.10cda8p+3 +0x1.8c677p-1 +0x1.792b74p-1 +0x1.be6c56p+2 +-0x1.003724p+2 +0x1.ef91eap-3 +-0x1.5fec66p+0 +-0x1.3f348cp+2 +0x1.899daep+0 +-0x1.324956p+2 +0x1.e44ee4p+2 +-0x1.597012p-3 +0x1.2af992p+0 +-0x1.7569c8p+1 +0x1.af3934p-4 +0x1.808d1ep+0 +-0x1.8d45e4p+2 +0x1.463158p+3 +0x1.3adp+0 +0x1.ecdf32p+2 +0x1.2aad9ap-3 +-0x1.d803ecp-2 +0x1.f03244p+2 +0x1.9dc15cp+2 +-0x1.b4c5cap-6 +-0x1.659e44p-3 +-0x1.798c8ap+1 +0x1.c8d80ep+2 +-0x1.47ae14p-6 +-0x1.1e8216p+2 +-0x1.5d407ep-3 +0x1.13ee36p+2 +-0x1.61244cp-3 +-0x1.f2d01ep+1 +-0x1.53e61ep-3 +-0x1.1239ccp+1 +-0x1.8d8168p+2 +-0x1.585ed8p+2 +-0x1.916e16p+1 +0x1.a99198p-1 +-0x1.936488p-1 +0x1.424e58p+3 +0x1.5e15c2p-1 +-0x1.614486p-3 +-0x1.a5a616p+2 +0x1.3ef362p+3 +-0x1.0dbee4p-4 +0x1.03b99ap-2 +-0x1.910a68p+3 +-0x1.2fbfc2p+0 +-0x1.59f8eap-3 +0x1.7cec24p+1 +0x1.1c27c2p+0 +-0x1.de5f06p+2 +0x1.7621c2p+0 +-0x1.98de22p+1 +-0x1.1f41d2p+1 +0x1.adddaap+2 +0x1.784fd8p-1 +-0x1.5f00f2p+2 +0x1.48dfc2p-1 +0x1.7e3b1ep+0 +0x1.8bc666p-3 +0x1.37d0e2p-1 +0x1.157c74p+2 +0x1.6ff89ep+0 +0x1.165ffep+0 +0x1.d7529ep+2 +0x1.44055ap+3 +-0x1.6576e4p-3 +0x1.b5bdc2p-2 +-0x1.86a71p+2 +-0x1.e0bb9ap+1 +-0x1.3efb4ep+3 +0x1.465b4ap+3 +0x1.69ccccp-2 +0x1.fa8332p+0 +0x1.4f36aep-3 +0x1.901bdcp+2 +-0x1.93f8dap+1 +-0x1.c6d308p-1 +-0x1.8ab1e6p+2 +0x1.3a40b8p+3 +-0x1.347ff6p+1 +-0x1.ab55b8p-3 +0x1.2b15d2p+2 +-0x1.78cb5p+2 +-0x1.44fd58p+1 +0x1.8874ccp+2 +-0x1.95c6eap+2 +0x1.6a9ad6p+2 +0x1.5ac8p-2 +-0x1.a31878p+1 +-0x1.61f5eep-2 +0x1.daa598p+2 +-0x1.99370ap-1 +0x1.8d1328p+2 +-0x1.717428p-6 +0x1.a4ac26p-1 +-0x1.a8341ap+4 +-0x1.3d9104p+2 +-0x1.3461e8p+4 +0x1.af6bd4p+2 +0x1.ad2e52p+2 +-0x1.5eb886p-3 +0x1.4cc9c2p-1 +0x1.363ce2p+3 +0x1.cac2d4p+2 +-0x1.64c11ap-3 +-0x1.5bb654p-3 +0x1.9cd41ep+2 +0x1.a0c9fep-1 +0x1.0f9018p-4 +-0x1.669748p+0 +0x1.b1023cp+1 +0x1.d9e51ep-3 +-0x1.860c04p+2 +-0x1.004e04p+0 +0x1.606e3cp+0 +-0x1.3d5198p+2 +0x1.e50c02p+3 +0x1.175666p-2 +-0x1.15400ap+1 +0x1.d3df72p+2 +0x1.8474f6p+2 +-0x1.7beef6p-1 +-0x1.234dfcp+1 +0x1.a31fap+2 +0x1.371dd2p+3 +0x1.49ae1ap+1 +0x1.09183cp+0 +-0x1.9943fep+2 +-0x1.65ae36p-3 +-0x1.3f64f6p+2 +0x1.a9d88cp-1 +-0x1.108da4p+1 +0x1.239b84p-1 +-0x1.7a3fcap+1 +0x1.2fb65cp-3 +-0x1.c22adp-1 +-0x1.4e4a96p+2 +-0x1.b97532p-2 +0x1.6a1b84p-1 +-0x1.4acc7ep+2 +0x1.597faep-2 +-0x1.29e666p-4 +-0x1.92f968p+2 +0x1.b5bcbcp+2 +0x1.d44a0ap+2 +-0x1.118962p+0 +-0x1.0963fcp-1 +0x1.b49e72p+2 +0x1.479932p+3 +-0x1.96ebb8p+2 +-0x1.17fd5ap+2 +-0x1.30bf5cp-3 +0x1.458e58p+3 +0x1.36d3dap+3 +0x1.498cc4p+0 +0x1.a51dp+2 +-0x1.76eaep-2 +0x1.a92b5cp-1 +0x1.1cb5c8p+1 +0x1.f116dap-1 +-0x1.2fefa4p+1 +0x1.895384p-1 +0x1.3ea70ap-1 +0x1.4e5bc2p+0 +-0x1.5d3056p-3 +0x1.6e4f32p+1 +0x1.a0cb4ap+2 +0x1.3e9daep+0 +-0x1.610884p-3 +-0x1.e575c2p-4 +-0x1.4aa4e4p+3 +0x1.6b2384p-1 +0x1.10ccccp+3 +0x1.287d32p+0 +0x1.3ecp-2 +-0x1.ac3126p+2 +-0x1.375428p-2 +0x1.dd5e32p+2 +-0x1.3cc38cp+5 +-0x1.63b394p-3 +-0x1.36dd2ap+0 +-0x1.abaca4p-1 +0x1.9a4998p-3 +0x1.a8322ep+1 +0x1.495ba8p+2 +-0x1.2b1d96p+2 +0x1.3cb612p+3 +0x1.3b0bacp+2 +-0x1.24da3ep+2 +0x1.b4cc52p-1 +-0x1.7231e6p+2 +0x1.68579ap+0 +0x1.98b34p+2 +0x1.b0f174p+2 +-0x1.19633p+1 +0x1.4e8p-5 +0x1.c0b04cp+2 +0x1.3707a8p+3 +-0x1.0e597ap+2 +-0x1.cedcfep+4 +-0x1.086438p+3 +-0x1.a9c966p+1 +-0x1.74d70ap-7 +-0x1.641bbap-3 +0x1.bbba02p+2 +-0x1.348cccp-3 +-0x1.660e72p-3 +0x1.ace148p-4 +-0x1.21da26p+0 +0x1.46698ap+0 +-0x1.1153b6p+0 +-0x1.785416p+2 +-0x1.fa611ep-1 +-0x1.f9b342p-10 +0x1.bc4b08p+2 +-0x1.5b84eep-3 +0x1.47768p+1 +0x1.4c15c2p+0 +-0x1.c77e56p+0 +0x1.7d241ep+1 +0x1.ae9d56p+1 +0x1.969368p+2 +-0x1.cae3fp+0 +0x1.dd0f7ap+2 +-0x1.60cbbcp-3 +0x1.e8d8bap+2 +-0x1.994098p+0 +-0x1.4fca34p+3 +0x1.c4a67ap+2 +0x1.7d00ap+2 +-0x1.c32c1p+2 +-0x1.8632b6p+2 +0x1.b1f5cep+2 +-0x1.97022ep+4 +-0x1.55a7ep+3 +-0x1.d4fa1ep+2 +0x1.5fff5cp-3 +0x1.c1ca3ep-6 +0x1.8f307ap-1 +-0x1.43319ap-1 +-0x1.ab6e94p-1 +-0x1.a640ap-2 +0x1.44e4e4p+3 +-0x1.d568c8p+3 +0x1.2f5ba6p+2 +0x1.4371b2p+3 +-0x1.63de96p-3 +0x1.674f7ep+0 +0x1.899e56p+2 +-0x1.493136p+0 +-0x1.be2b2ep+1 +-0x1.01d56ap+2 +-0x1.3d4ddp+5 +0x1.479bf6p+3 +-0x1.67a02ep-1 +0x1.b4265cp+2 +-0x1.07d2a4p+1 +-0x1.85bb08p+2 +0x1.d3d95cp+2 +-0x1.6fd80cp+2 +-0x1.141ed8p+0 +-0x1.5e4264p-3 +0x1.3ff1fp+2 +0x1.3f5e2ap+1 +-0x1.683c8ap+2 +0x1.456ad2p+1 +-0x1.203312p+2 +-0x1.63533ap-3 +-0x1.554ceap+2 +-0x1.506d48p+2 +0x1.f2cap-1 +0x1.432124p+3 +-0x1.6905d4p+2 +0x1.a13008p+2 +-0x1.61007cp-3 +-0x1.80ada8p+2 +-0x1.2b5e12p+2 +0x1.0c38c6p-2 +0x1.6bb408p+2 +0x1.ee99c2p-1 +0x1.3c9f7cp+0 +-0x1.ca076p+4 +-0x1.b9fd7p-2 +0x1.d3c47ap-1 +-0x1.2dadfp+2 +-0x1.1f362p-4 +0x1.6923dep+2 +0x1.be923ap+2 +-0x1.6cb73ep+2 +-0x1.565dd6p-3 +0x1.0d65ecp+0 +0x1.8e8a76p+2 +-0x1.9f02cep-4 +0x1.43d63ep-1 +0x1.36302cp+3 +-0x1.0e3a4ep+1 +-0x1.9a6fdap+2 +-0x1.5ac962p-3 +-0x1.2531c6p+1 +-0x1.7803f8p+2 +-0x1.527bccp-2 +0x1.7c4c54p+2 +0x1.3e060ep+2 +-0x1.6f1faep+1 +0x1.d71794p+2 +-0x1.4ef87cp+0 +0x1.34ebd6p-1 +-0x1.bcdef2p-11 +-0x1.7c89b4p+1 +0x1.1dde7ap+0 +0x1.070a4cp+2 +0x1.944982p+2 +-0x1.8fc20cp+2 +0x1.0a54d2p-4 +0x1.44068ap+1 +-0x1.3682ccp+1 +-0x1.6027b4p-3 +-0x1.56433cp-3 +-0x1.611a72p-3 +0x1.f3e98p-2 +0x1.d08a02p+2 +-0x1.3caae2p-6 +0x1.c20dbcp+2 +-0x1.018d48p-1 +-0x1.64ea72p+5 +-0x1.8cf15cp+1 +-0x1.7bd526p+2 +0x1.910532p+0 +0x1.876cccp-1 +0x1.6b878ap+2 +-0x1.631b5cp-3 +0x1.b00e48p+2 +-0x1.f2bbc8p+1 +-0x1.45803cp+1 +-0x1.5f5a66p-3 +-0x1.96ce1cp+2 +0x1.291652p+0 +-0x1.d34f3ap+0 +0x1.38998ep+0 +0x1.ada72p-1 +-0x1.237184p+0 +-0x1.20ab84p+2 +0x1.067852p-3 +0x1.3cac66p+0 +0x1.bccd8ep+2 +0x1.252d84p+0 +-0x1.32397ap+2 +0x1.35fc82p+3 +-0x1.70551ep-3 +-0x1.813478p+4 +0x1.3f75c4p+3 +0x1.3f7dd6p+3 +0x1.381c9ep+1 +-0x1.fd3b32p-2 +-0x1.2bb33cp-1 +0x1.de544ap+2 +0x1.772e6ap+0 +0x1.a7acfap+1 +-0x1.0615c6p+3 +0x1.5b0bbcp+2 +-0x1.9dd4a8p-2 +-0x1.9f4442p+1 +-0x1.d50b1ep+1 +-0x1.56bf4ap-3 +0x1.16945cp+1 +-0x1.5ff37ap-3 +-0x1.ffbccap+2 +-0x1.384d24p+1 +-0x1.b98b6cp+1 +0x1.3a1936p+2 +0x1.44faf8p+3 +0x1.50b852p-8 +-0x1.57888ep+2 +0x1.489e2ap+3 +0x1.7ef8eep-1 +-0x1.242e6ep-10 +0x1.b2a55cp+3 +0x1.c89c72p+2 +0x1.35d764p+3 +-0x1.9e46p+0 +-0x1.75e2f4p-3 +-0x1.5c53c6p-3 +-0x1.12715cp+0 +-0x1.d39724p+2 +-0x1.9a8eb8p+0 +0x1.e68af6p+2 +0x1.24099ep+1 +0x1.8bc658p-1 +0x1.a15c28p-7 +-0x1.6294e6p-3 +0x1.e64718p+2 +-0x1.88c804p+1 +-0x1.9198b6p+5 +-0x1.283048p-1 +0x1.ce516ap+2 +-0x1.2b3baep+1 +0x1.812d0cp+2 +0x1.7ba71cp-1 +0x1.47349p+0 +-0x1.0b8e48p+4 +-0x1.e6dfaep-2 +0x1.440fa2p+3 +-0x1.912c34p+2 +-0x1.4bee34p+2 +-0x1.ad47c8p-4 +0x1.35fa32p+3 +-0x1.8e0298p-1 +0x1.48aaf6p+3 +-0x1.0fe0d2p+0 +-0x1.18fef6p-2 +-0x1.e6b47ap+0 +0x1.ca98aep+2 +0x1.e2d266p-1 +-0x1.351f76p+0 +0x1.6d3c66p+2 +0x1.ffcb3ep+0 +-0x1.6d0c0cp+2 +-0x1.3c1c28p-5 +-0x1.c15cccp-3 +0x1.98650ap+0 +0x1.a6029ep+2 +-0x1.9379f8p-3 +0x1.3759e6p+3 +0x1.5fdf7p+0 +-0x1.6cc55ep+4 +-0x1.053ee8p+2 +0x1.4af0c8p+1 +0x1.47654p+3 +-0x1.2efceap-3 +0x1.35a8bcp+3 +-0x1.fc1d5ep-1 +-0x1.459dfp+0 +0x1.f8a8dep-1 +-0x1.a7f5c2p-5 +-0x1.9f3316p+1 +-0x1.1aefp+2 +0x1.36e29p+3 +0x1.11eb7p+0 +0x1.6532ep-1 +-0x1.26974ep+1 +0x1.acf71ep+1 +-0x1.0aa7d6p-5 +-0x1.9d2ad4p+0 +-0x1.394222p+4 +0x1.2d6428p+0 +-0x1.b3fe3p-6 +0x1.dbf61cp+2 +-0x1.61fb7cp-3 +-0x1.02cbep+1 +-0x1.3d3f54p+0 +-0x1.64d5bep-3 +-0x1.9a6666p-5 +-0x1.40a212p+4 +-0x1.846292p+2 +-0x1.257d9cp-1 +0x1.e20d2ep+2 +0x1.506cbap-1 +-0x1.9f6c8ap-1 +0x1.cb5852p-2 +0x1.dfede8p+2 +-0x1.df03d2p+1 +-0x1.44c584p+1 +-0x1.a3a42p+1 +-0x1.2d988ap+1 +-0x1.33a426p+4 +-0x1.654542p-3 +0x1.1e27bep+1 +0x1.3faddap+3 +-0x1.9066fp+1 +-0x1.5c72dap-3 +0x1.ac0814p+0 +0x1.46ebd6p-1 +-0x1.bc3a8ep+1 +0x1.3104p+0 +0x1.4c56fap+1 +-0x1.742226p+0 +-0x1.5c0486p-3 +0x1.6285ecp+0 +-0x1.c9b584p+0 +0x1.e5955cp-3 +-0x1.632452p-3 +0x1.5bee1ep+1 +0x1.3c2fb6p+3 +0x1.16c592p-2 +0x1.b295eap+2 +0x1.407dcap+3 +-0x1.767ef6p-1 +0x1.eaf332p-3 +-0x1.4c6c5p+2 +-0x1.637f32p+1 +-0x1.7f5e8ep-6 +-0x1.65b23ap-3 +-0x1.11900ap-1 +0x1.10cef4p+3 +0x1.d66a2ep+2 +-0x1.3900ccp+2 +0x1.b3f344p+2 +-0x1.148232p+1 +-0x1.3b252ep+2 +0x1.da34a6p+2 +-0x1.65a516p-3 +-0x1.5ab462p+5 +0x1.a73528p+2 +-0x1.52d4dcp-2 +-0x1.3f1bf4p+2 +0x1.3d109cp+3 +-0x1.e7b434p-3 +0x1.4a8e1ap+0 +-0x1.69edc2p-1 +0x1.ad5e14p+0 +0x1.366efp+3 +-0x1.f320ep+3 +-0x1.60c86ep-3 +-0x1.062e96p+1 +-0x1.a5e6b4p-1 +0x1.48c082p+3 +-0x1.54a50cp-1 +-0x1.1d0e38p+1 +-0x1.0d72cap-3 +-0x1.c7214cp+4 +0x1.cf20a8p+2 +-0x1.42b7ecp+1 +0x1.421b4p+3 +-0x1.9509aep+2 +-0x1.641eep+2 +0x1.37c6f4p+3 +-0x1.321a78p+2 +0x1.c01464p+2 +0x1.2ad612p+0 +-0x1.baaeb4p-5 +0x1.f1ba76p+1 +-0x1.16b9aep+0 +0x1.69f97p+0 +0x1.d7236ep+2 +-0x1.2655ecp+0 +-0x1.b6036p+2 +0x1.3bf742p+2 +0x1.3a2338p+3 +0x1.302f54p+2 +0x1.b783cep+2 +0x1.231e54p+2 +0x1.b9a226p+2 +0x1.3d6ec4p-4 +-0x1.6605fep+2 +-0x1.016e18p-15 +0x1.7fb554p+2 +0x1.bb8caep+2 +0x1.397678p+3 +-0x1.08edp+1 +0x1.e85b2ep+2 +-0x1.ba8f1ep+0 +-0x1.600bc2p-3 +0x1.4706b2p+2 +0x1.76e914p+1 +-0x1.d276ep-1 +-0x1.fb3c58p+1 +0x1.7fec7p+2 +-0x1.488bf6p+5 +0x1.3daea4p+0 +-0x1.babc8ep+2 +0x1.421582p+3 +0x1.3b2066p+1 +-0x1.ea428ep-3 +0x1.c4b67ap-5 +-0x1.4a9be6p+4 +0x1.076be8p-2 +0x1.979a26p+2 +0x1.3fcdcp+3 +0x1.3b8242p+3 +0x1.8d651ep-4 +0x1.b4919ap-2 +-0x1.1a234ep-1 +0x1.2fd148p-3 +0x1.42871cp+3 +0x1.97d77p+0 +-0x1.86b75cp-2 +0x1.9009a6p+2 +0x1.408e7ap+1 +-0x1.0fb01cp-7 +0x1.a2f7d2p+2 +-0x1.2cc04ap-5 +-0x1.69a5ap+1 +0x1.0bbc28p-2 +0x1.2e22a2p+0 +-0x1.88dc7ap-2 +0x1.7c0c2p+2 +-0x1.407b66p-2 +0x1.d9152p+2 +0x1.7002b4p+0 +0x1.758778p+2 +0x1.0dcfbap+2 +-0x1.7f44bp+2 +0x1.cd82p+2 +-0x1.feb61ap+2 +-0x1.1a4e4ep+2 +0x1.e4a6a4p+1 +-0x1.0b5fp+3 +0x1.799eccp+1 +-0x1.e3f07ap-1 +0x1.38249cp+3 +-0x1.bffb68p+1 +-0x1.082034p+2 +0x1.23fcd6p+1 +-0x1.c101eep+1 +-0x1.54d51ap-3 +0x1.767064p+2 +-0x1.9bc01ap-1 +-0x1.29edc6p+2 +-0x1.3877a4p+1 +-0x1.61a294p-3 +-0x1.bb793p+1 +0x1.7a649ep+1 +0x1.d2ed52p+2 +0x1.48241cp+3 +0x1.75e9c2p-2 +0x1.42bcc4p+3 +-0x1.cfdaaep+2 +-0x1.858b18p+4 +0x1.54595cp+0 +0x1.0b3c52p+0 +-0x1.d3180cp-1 +0x1.58da68p+2 +0x1.c6adp+1 +0x1.a98beep+2 +0x1.5c53b2p+1 +-0x1.89d0ccp-1 +-0x1.650562p-3 +0x1.193d82p-1 +0x1.5bca22p+3 +0x1.3a05bp+3 +0x1.161abcp+4 +-0x1.71d802p+2 +-0x1.02919ap+0 +0x1.dc4546p-1 +-0x1.f46284p+1 +-0x1.8e38cep-2 +-0x1.2b76d6p+1 +0x1.b21856p+2 +0x1.9c86e6p+2 +-0x1.64d776p-3 +-0x1.267618p+2 +-0x1.53a72ap+2 +0x1.dcabd6p-2 +0x1.d42ac6p+2 +0x1.45b8acp+3 +-0x1.5c0da8p-1 +-0x1.acc00ap+2 +0x1.da4a46p+2 +-0x1.64e686p-3 +-0x1.729f8p+5 +-0x1.194d9ap+3 +0x1.7e3eb8p+0 +-0x1.5ef7a2p-3 +0x1.e443b2p+1 +-0x1.7470dp+2 +-0x1.3f927p+1 +0x1.b096cp+2 +0x1.b6792ap+2 +-0x1.44742p+3 +0x1.492384p+3 +0x1.d3c576p-3 +-0x1.11ab9ap+0 +-0x1.e35b8cp-2 +0x1.de41f6p-1 +-0x1.2b6a16p-4 +0x1.2d4eb2p+0 +0x1.48aac8p+1 +0x1.4450cap+3 +0x1.35d076p+3 +0x1.a536cep-1 +0x1.735fbcp-1 +0x1.b2e3d2p-1 +0x1.775ab8p+2 +0x1.819c92p-2 +0x1.8f27cep+2 +0x1.bb9e3ap+2 +-0x1.4d9a94p+2 +0x1.d7bcd8p+2 +-0x1.1febecp+2 +0x1.4d60e2p+3 +-0x1.4b24d2p+3 +-0x1.49a54cp-2 +0x1.456e9ep+3 +0x1.49f47ap-1 +-0x1.63babep-4 +0x1.b15424p+2 +0x1.e115eap+2 +-0x1.513732p+3 +-0x1.35b7dep-2 +-0x1.1bd7a4p+2 +0x1.599a8ep+0 +0x1.ad84aap-2 +0x1.d976fcp+2 +-0x1.86e666p-1 +0x1.10cb48p+3 +0x1.1d27fep+2 +0x1.ea9446p+2 +0x1.acbc8p+2 +0x1.a6d17p+0 +-0x1.100aa2p-3 +-0x1.6dfbbep+5 +-0x1.5b177p+0 +0x1.9524f6p+0 +-0x1.5aa4fap+2 +0x1.6c782p+4 +0x1.af708ap+1 +0x1.cec838p+2 +0x1.089898p+0 +-0x1.63ccacp-3 +0x1.1940bap+2 +-0x1.14ca86p+1 +-0x1.b5d494p+2 +-0x1.0a319ap-2 +-0x1.171efp+2 +0x1.49beaap+3 +-0x1.e727d4p+3 +-0x1.234bcp-1 +0x1.43c804p+3 +-0x1.178dfep+2 +0x1.fdc47ap-3 +-0x1.e75396p+2 +0x1.f8f04cp+2 +0x1.3a2882p+3 +-0x1.4fab3ep+2 +0x1.952e04p+1 +-0x1.f99bd6p+0 +0x1.233548p+0 +0x1.0fccccp-6 +-0x1.54f26ap+2 +-0x1.ea8732p-4 +-0x1.44f526p+2 +0x1.9dfe8ep+0 +0x1.4df2ep-1 +-0x1.5f4d08p+0 +0x1.350aap+3 +0x1.e7b63cp+2 +-0x1.cba3f6p+1 +0x1.3ec0f6p+0 +0x1.b8a2bap+2 +-0x1.5c199cp+4 +-0x1.056936p+3 +0x1.8e304p+2 +0x1.b2fc28p-2 +0x1.0af75cp-2 +-0x1.57f7b8p+3 +0x1.3d1ecp+3 +-0x1.2a76fp-1 +-0x1.2da37ep+6 +-0x1.4fc948p-2 +0x1.002a8ep+0 +-0x1.20bdd4p+2 +-0x1.5f6ceep+2 +0x1.93eb84p-4 +-0x1.c443cp+2 +0x1.b34272p+2 +-0x1.fec732p-1 +0x1.5a9794p+1 +0x1.9f7c76p+2 +0x1.c86a0cp+2 +0x1.88d064p-1 +-0x1.782b46p+2 +-0x1.a8241p-2 +0x1.01e8cep+2 +-0x1.65f582p-3 +-0x1.a6e786p+2 +0x1.268be2p-2 +0x1.d4ca68p+2 +0x1.10d1fep+3 +0x1.33280ap+1 +0x1.45129ap+3 +0x1.b2f9fp+2 +0x1.c06c2ap+2 +-0x1.2e4b6p+2 +0x1.532108p-1 +-0x1.198f1p+0 +0x1.32f2ep-1 +-0x1.63b1fap-3 +0x1.de7384p-1 +-0x1.f9c4ep+0 +0x1.bd8dc4p+2 +-0x1.748c3p+2 +-0x1.0c2204p+2 +0x1.3f400cp+3 +0x1.16ef8ep+1 +0x1.ffaf0ap-1 +-0x1.3df84ep-5 +-0x1.0a47f6p+3 +-0x1.074b02p-3 +0x1.358ba2p+3 diff --git a/benchtests/expm1f-inputs b/benchtests/expm1f-inputs new file mode 100644 index 0000000000..f16e8f7363 --- /dev/null +++ b/benchtests/expm1f-inputs @@ -0,0 +1,799 @@ +## args: float +## ret: float +## includes: math.h +## name: workload-random +# Random inputs in [a=-14.495465,b=88.722832] +# where a is the smallest number such that expm1f does not round to -1 +# and b is the smallest number such that expm1 does not round to +Inf (to nearest) +0x1.3810cp+6 +0x1.d5f38p+3 +0x1.5bbafp+4 +0x1.274218p+5 +-0x1.4e6a94p+2 +-0x1.898c1ap-1 +0x1.609cf8p+5 +0x1.9cc3a4p+4 +0x1.2df7eep+4 +0x1.73defep+5 +0x1.dd4ddap+3 +-0x1.9fe548p+3 +0x1.b3c8f2p+1 +0x1.3ac27cp+6 +0x1.b43346p+5 +0x1.1e7d4ep+2 +0x1.a65c52p+5 +0x1.3c2c3ap+5 +0x1.0ae18ep+6 +0x1.5d1cccp+6 +0x1.5e376ep+6 +0x1.46e41ap+5 +0x1.58bd84p+0 +-0x1.ad6876p+3 +0x1.ac642ep+4 +0x1.45482ep+2 +0x1.6a3fe6p+1 +0x1.b1da94p+3 +0x1.0bac6ep+6 +0x1.b7f212p+5 +0x1.4c9a62p+6 +0x1.903de4p+5 +0x1.0021e8p+4 +0x1.17b81p+3 +0x1.5cf974p+6 +0x1.1ca20ap+6 +0x1.aeb732p+5 +0x1.c60614p+5 +0x1.186b38p+6 +0x1.abbb34p+5 +0x1.5c2474p-2 +0x1.e6855cp+3 +0x1.14068cp+4 +0x1.710416p+4 +-0x1.cc704cp+2 +0x1.534bdap+6 +0x1.8b0c18p+3 +0x1.36de48p+1 +0x1.33b7f4p+5 +0x1.19c128p+5 +0x1.d9d7dap+5 +0x1.343482p+6 +0x1.c82f4ap+5 +-0x1.1123ep-1 +0x1.a66ed2p+5 +0x1.30fd8p+6 +0x1.221296p+6 +-0x1.cb7386p+1 +0x1.00cdccp+5 +-0x1.8d3f3ap+2 +-0x1.d4dbf6p+2 +0x1.fdf25ap+4 +0x1.d5fd5cp+3 +0x1.fbd1ep+4 +0x1.116b76p+6 +0x1.b9b8b4p+1 +0x1.b5dfdp+2 +0x1.c49f3cp+5 +0x1.608052p+6 +0x1.34cb2p+6 +0x1.e95b62p+3 +0x1.1984f4p+6 +0x1.f7a902p+5 +0x1.55b80ep+3 +0x1.e63ffap+3 +-0x1.acc202p+1 +0x1.2670c4p+4 +0x1.3cb908p-1 +0x1.2a3b32p+3 +0x1.ef2c8ap+5 +-0x1.86fb0ap+2 +-0x1.10ce8ap+1 +-0x1.ee4398p+2 +0x1.317bacp+6 +-0x1.7844b8p+3 +0x1.cc4ac8p+5 +0x1.56d116p+4 +-0x1.b79b38p+3 +0x1.34dcaep+5 +0x1.79f55cp+4 +0x1.6c0398p+5 +-0x1.04565cp+3 +0x1.9340ccp+2 +0x1.d8856cp+5 +-0x1.bc5034p+1 +0x1.97348cp+5 +0x1.76a472p+5 +0x1.111a1ep+5 +0x1.19bc32p+4 +0x1.5d75c2p+6 +0x1.a1dcaap+5 +0x1.079abcp+6 +0x1.8b0ca8p+5 +0x1.2e6548p+6 +0x1.24d536p+5 +0x1.3d8efcp+5 +-0x1.fa06c8p+2 +0x1.c20454p+5 +0x1.bbd65cp+3 +0x1.53db36p+6 +0x1.7f69b2p+4 +0x1.f8aab8p+4 +0x1.42f736p+5 +0x1.121742p+5 +0x1.2dc1c2p+5 +0x1.0d4e32p+5 +0x1.0a6128p+6 +0x1.afc1d6p+5 +0x1.1a29ap+6 +-0x1.c5e0c2p+3 +0x1.15b464p+6 +0x1.b1eb2ap+5 +-0x1.6f737p+0 +0x1.8c9f04p+0 +-0x1.56ad02p+3 +0x1.c595aap+5 +0x1.1c4056p+6 +0x1.45ba98p+5 +0x1.aff522p+5 +0x1.ac9542p+4 +0x1.4cc0d6p+1 +0x1.4adb2ep+6 +0x1.3491c2p+5 +0x1.559a82p+3 +0x1.def4p+5 +0x1.23f276p+5 +-0x1.d5eff8p+2 +0x1.e6ca08p+4 +0x1.f83e38p+3 +0x1.331a4p+6 +0x1.57df6cp+3 +-0x1.852c2ep+3 +0x1.bd56fcp+5 +-0x1.3720a6p+3 +0x1.3e49cp+1 +0x1.3a1e0ap+5 +0x1.7525c8p+5 +0x1.5ff3c8p+6 +0x1.5fbbd6p+6 +0x1.40f626p+5 +-0x1.87d02ep+3 +0x1.56345ep+2 +0x1.a735aep+2 +0x1.3b30bap+5 +-0x1.da7242p+2 +-0x1.9b8284p+1 +0x1.16a344p+6 +0x1.af11e4p+3 +0x1.53f7e6p+5 +0x1.50e1a8p+5 +0x1.242fe4p+6 +-0x1.18156ap+3 +-0x1.1ac67cp+2 +0x1.d53c02p+5 +0x1.5217c4p+6 +0x1.6da49ep+5 +0x1.17bfbp+6 +-0x1.0e3c48p+2 +-0x1.3b7a1ap+2 +0x1.41462cp+6 +0x1.aaee8p+4 +0x1.d2579cp+5 +-0x1.865634p+3 +0x1.a3876cp+5 +0x1.e512d8p+3 +0x1.bc6f4ep+4 +0x1.b14bfep+5 +0x1.ec787cp+4 +0x1.268bf6p+4 +-0x1.bf2e34p+2 +0x1.861576p+5 +0x1.41c256p+4 +0x1.69b71cp+5 +0x1.601c7ap+6 +0x1.b97298p+4 +0x1.82e8bp+5 +0x1.83c418p+5 +0x1.21dee6p+3 +0x1.cb17fap+5 +0x1.38c41cp+6 +-0x1.c2683cp+3 +0x1.3d6fcp+5 +0x1.d1ef44p+5 +0x1.47d6c2p+3 +0x1.380822p+6 +0x1.442deap+6 +0x1.25b0dcp+5 +0x1.03867cp+5 +0x1.8e554ep+5 +0x1.26befep+4 +-0x1.37db3ap+0 +-0x1.0508eap+3 +0x1.d25cecp+5 +0x1.05cf7cp+6 +0x1.c31c7p+5 +0x1.a86266p+5 +0x1.59e8a2p+6 +0x1.ef79ep+4 +0x1.212d2p+1 +-0x1.b8245ap+3 +0x1.30aec4p+5 +0x1.5fe628p+6 +0x1.caa0fap+5 +0x1.229bap+4 +0x1.1e5278p+6 +0x1.146544p+6 +0x1.009ecp+6 +0x1.9c90b4p+5 +0x1.0145dep+6 +0x1.6b25ap+5 +-0x1.9c2698p+1 +0x1.441204p+4 +0x1.396798p+5 +0x1.5b5dc8p+4 +0x1.27f358p+6 +0x1.79b952p+3 +0x1.1a30ecp+6 +0x1.0eb864p+6 +0x1.bd1f6ep+5 +0x1.90f39ap+4 +0x1.d00fa4p+5 +0x1.38d37ep+5 +0x1.942356p+4 +0x1.041a1ap+6 +0x1.ff196cp+3 +0x1.24bcd4p+6 +-0x1.3d97eap+3 +0x1.f6224p+5 +0x1.2cfdbep+5 +0x1.42fa36p+5 +0x1.844ce4p+5 +0x1.5810aep+6 +0x1.df2214p+5 +0x1.580ba4p+6 +0x1.620818p+3 +0x1.7e9a86p+5 +0x1.5fc452p+6 +-0x1.b0f38cp+3 +-0x1.b4c3ap+0 +0x1.ae6154p+4 +0x1.334348p+6 +0x1.daa71p+4 +0x1.9c2e0ep+5 +0x1.140af2p+5 +0x1.5dc292p+6 +0x1.f7f7e4p+5 +-0x1.d74c66p+2 +0x1.249b98p+6 +0x1.750da8p+3 +0x1.3782ccp+5 +0x1.3ad2f4p+6 +0x1.1b2256p+6 +0x1.be193p+3 +0x1.6074f2p+4 +0x1.926602p+5 +0x1.640a02p+3 +0x1.4d343p+0 +0x1.5eaabcp+4 +0x1.7e4ff4p+5 +0x1.631a3ap+4 +0x1.2bcc8p+3 +0x1.6abe2ap+5 +0x1.85e932p+5 +0x1.6ea55ap+2 +-0x1.a9a304p+2 +0x1.05ba9ep+6 +-0x1.ca222cp+2 +0x1.64940ep+5 +0x1.2ebe6cp+4 +0x1.7c91c2p+5 +0x1.f0368ap+4 +-0x1.129f02p+1 +0x1.7ed0a4p+4 +0x1.11beb2p+6 +0x1.330d7ap+4 +0x1.3bc6eep-1 +0x1.02348p+6 +0x1.35064ap+5 +0x1.3c44p+5 +0x1.c128eep+5 +0x1.837444p+3 +0x1.9116dap+5 +-0x1.7fb6f2p+3 +0x1.d74884p+4 +-0x1.dd8e86p+2 +0x1.db84e2p+5 +-0x1.9aa036p+2 +0x1.a108cep+5 +0x1.60ed52p+4 +0x1.c738eap+5 +0x1.1d9b9p+1 +0x1.5542ep+6 +0x1.074218p+0 +0x1.16afeep+6 +0x1.31b3dp+5 +0x1.8127a8p+5 +0x1.27d12p+2 +0x1.962ad2p+3 +0x1.726aacp+2 +0x1.e9e8bap+5 +0x1.b54284p+5 +0x1.acb4fcp+5 +0x1.2a671p+6 +0x1.de6a98p+5 +0x1.6a2454p+2 +0x1.85b1b8p+5 +0x1.a50b94p+5 +0x1.77bfaep+2 +0x1.41c6ap+3 +0x1.e51cdep+5 +0x1.4de72cp+6 +0x1.413186p+6 +-0x1.bbc70ap+3 +-0x1.f138fcp+2 +0x1.78855p+5 +0x1.dd16bep+4 +0x1.2c491p+2 +0x1.500ff6p+6 +-0x1.035c0ep+2 +0x1.3a7688p+5 +0x1.82bb26p+5 +0x1.0c41d2p+6 +-0x1.85128cp+1 +0x1.54a6f8p+5 +0x1.66e21cp+5 +0x1.d3cce6p+1 +0x1.a16cbap+3 +-0x1.096126p+2 +-0x1.a45e04p+3 +0x1.7d697p+5 +0x1.106d1ap+6 +0x1.04e974p+4 +0x1.6ce8b4p+3 +0x1.8b3bd4p+3 +0x1.7db442p+4 +0x1.3c3318p+6 +0x1.91a55ep+4 +0x1.378ffap+6 +-0x1.5f7422p+2 +0x1.6c9034p+3 +-0x1.f8ff9ep+1 +0x1.d2f0dp+4 +0x1.4e15dcp+6 +-0x1.a41644p+2 +0x1.1074f4p+5 +0x1.c08daap+5 +0x1.0a83a2p+3 +-0x1.e24802p+1 +0x1.54555cp+6 +0x1.b6cac8p+5 +-0x1.3f30dap+1 +0x1.c9d7e6p+4 +0x1.054b78p+6 +0x1.9a9d3cp+5 +0x1.eaea98p+5 +0x1.e6dcd2p+4 +0x1.4c5e9ap+2 +0x1.990a46p+3 +0x1.5b856p+5 +0x1.53b10cp+6 +0x1.3085b8p+2 +0x1.33623ap+6 +0x1.79211cp+2 +0x1.487144p+6 +0x1.8540c4p+5 +0x1.7d81eep+4 +0x1.c2663ep+5 +0x1.177a4ep+6 +0x1.9d505cp+5 +0x1.656852p+4 +-0x1.cc7e2cp+1 +0x1.a8057ap+4 +0x1.86fd48p+3 +-0x1.148908p+1 +0x1.5bc9fep+2 +0x1.4cd724p+5 +0x1.5cff22p+6 +-0x1.aaecc8p+2 +0x1.14cb74p+5 +0x1.ce6106p+4 +0x1.51cda4p+4 +0x1.171dbp+6 +0x1.4a3d88p+1 +0x1.1bd39ep+6 +0x1.7a88a4p+5 +0x1.7a31e4p+4 +0x1.1b585cp+6 +0x1.528cc6p+5 +0x1.a58ccep+4 +0x1.c26ed8p+4 +0x1.22021cp+6 +0x1.1b8a9p+6 +0x1.e2c44p+5 +0x1.fe1bb4p+5 +0x1.0548acp+6 +0x1.12ce22p+6 +0x1.623584p+6 +0x1.7a0d8p+5 +0x1.9b770ep+3 +0x1.3c827ap+4 +0x1.54d708p+4 +0x1.114dc6p+6 +0x1.a34a9ap+4 +-0x1.85b6bcp+3 +0x1.cba9f2p+4 +0x1.a81124p+4 +-0x1.a0265cp+3 +0x1.376a9p+5 +0x1.f878p+5 +0x1.3a403ep+6 +0x1.3b4e9cp+6 +0x1.3a7ecp+6 +0x1.0e7c34p+4 +0x1.d974ecp+3 +0x1.f96p+3 +0x1.b07262p+5 +0x1.c0761ep+5 +-0x1.8d95aap+3 +0x1.f9b2eap+2 +0x1.c45722p+3 +0x1.22035cp+3 +-0x1.14f90cp+2 +0x1.f3f58p+5 +-0x1.3f0d4p+3 +0x1.712122p+4 +0x1.6c70b4p+4 +0x1.5386p+5 +-0x1.676fcep+3 +0x1.087cdap+6 +0x1.5e31bcp+6 +0x1.59c27p+6 +0x1.8fda26p+5 +0x1.bac6dcp+5 +0x1.94bcbap+1 +0x1.b4272cp+4 +0x1.28b6e6p+4 +0x1.15d214p+5 +-0x1.258ca8p+2 +0x1.67d242p+4 +0x1.b463bep+4 +0x1.82d508p-1 +0x1.453544p+6 +0x1.59c3e2p+5 +0x1.a5444cp+0 +0x1.023312p+2 +0x1.4e49a2p+6 +0x1.3b2906p+3 +0x1.db3a42p+0 +0x1.482b3cp+4 +0x1.1b5f4p+4 +0x1.0a249ap+5 +-0x1.4d103cp+3 +-0x1.3f9a6p+1 +0x1.fb22d4p+4 +0x1.ae6726p+5 +0x1.5065c8p+5 +0x1.85a07ap+3 +0x1.08e6p+4 +0x1.9e5ddep+4 +0x1.5c2b96p+6 +0x1.025d3ep+3 +-0x1.b61288p+2 +0x1.767a9p+4 +-0x1.e1d398p+2 +0x1.61a05ap+4 +0x1.c1dcbep+4 +0x1.bc94c4p+5 +0x1.bab56ep+5 +0x1.3dd33ap+4 +0x1.57b106p+6 +-0x1.d493dcp+2 +0x1.c7c276p+5 +0x1.d177d8p+3 +0x1.e07254p+4 +0x1.e7a35ap+4 +0x1.f5361cp+3 +0x1.9124ap+5 +0x1.7cde4cp+5 +0x1.5868d6p+5 +0x1.34e748p+5 +0x1.883d3ap+5 +0x1.5a718ep+5 +0x1.416afcp+5 +0x1.b75ad8p+5 +0x1.000a84p+5 +0x1.dfbf96p+3 +0x1.caf566p+5 +0x1.47b68p+6 +0x1.179f6ep+5 +0x1.6139e6p+6 +0x1.79aba4p+4 +0x1.3314fcp+4 +-0x1.9396e4p+0 +0x1.d1f398p+5 +-0x1.4d93ecp+2 +-0x1.13ffbap+3 +0x1.43af3cp+6 +0x1.02fe76p+6 +0x1.ea2a1cp+5 +0x1.b46644p+5 +0x1.29812ap+6 +-0x1.9a4f28p+2 +0x1.33970ep+4 +0x1.22e908p+1 +0x1.5fe03ap+6 +0x1.593f74p-2 +0x1.12a9b6p+6 +0x1.d0aa12p+5 +0x1.d9bd7ap+4 +0x1.6abe46p+5 +0x1.6a7cd2p+5 +-0x1.243e06p+3 +0x1.8dc5b2p+5 +0x1.d19254p+5 +0x1.0d324p+4 +0x1.167128p+6 +0x1.667ba8p+5 +0x1.44c732p+6 +0x1.e452aep+5 +0x1.d9ad26p+5 +0x1.a6b18cp+5 +0x1.44778p+4 +0x1.6de93cp+5 +-0x1.749e0ap+3 +0x1.384234p+5 +0x1.baf766p+5 +0x1.155178p+5 +0x1.746b38p+5 +-0x1.108cf6p+3 +0x1.a42fcap+3 +0x1.e524aep+4 +0x1.70d73p+3 +0x1.10af9ap+6 +-0x1.fb00cep+1 +0x1.2084acp+6 +0x1.3ae402p+4 +0x1.3e95f2p+5 +0x1.424342p+6 +0x1.08ace2p+6 +0x1.eb0efep+5 +0x1.a4a3dap+5 +0x1.a438e8p+4 +0x1.39696ap+5 +0x1.2a706ep+6 +0x1.6fff2p+2 +0x1.ef4e3cp+5 +-0x1.20a1dp+3 +0x1.1fd284p+5 +0x1.240be4p+6 +0x1.5da7bp+4 +-0x1.49ca52p+1 +0x1.93cb38p+4 +0x1.179b56p+5 +0x1.18cf6cp+4 +0x1.d8c7cep+5 +0x1.54e87ap+6 +0x1.0556ap+6 +-0x1.f9dd92p+2 +0x1.1429eep+6 +0x1.295ef2p+5 +0x1.07eedcp+5 +0x1.58afeap+5 +0x1.e5bcc8p+2 +-0x1.a038c8p+3 +0x1.4e70a6p+6 +-0x1.172cfep-4 +0x1.355898p+3 +0x1.90292ep+5 +0x1.277aeap+4 +0x1.0e9c1cp+6 +0x1.54c948p+6 +0x1.17dc44p+2 +0x1.005c26p+3 +0x1.6c2d44p+5 +0x1.067ce8p+5 +0x1.188b3ap+1 +-0x1.c44378p+1 +0x1.16c9c4p+3 +0x1.40b782p+5 +0x1.8f8ecep+5 +0x1.aa8fbp+2 +0x1.40242ap+6 +0x1.78607cp+3 +0x1.209358p+6 +0x1.db1404p+4 +-0x1.b8ceap+1 +0x1.1e67p+6 +-0x1.c9f25ap+0 +0x1.eef1fp+5 +0x1.d17786p+4 +0x1.422a98p+6 +0x1.6efbaap+3 +0x1.5b11fep+6 +0x1.35d254p+6 +0x1.9b5daap-1 +-0x1.36c61cp+3 +0x1.5c19b4p+5 +-0x1.9dabdp+0 +0x1.b600c6p+5 +0x1.2a4238p+4 +-0x1.91e754p+2 +0x1.9740aap+4 +-0x1.77a118p+2 +0x1.125a76p+5 +0x1.08e4e2p+6 +0x1.2d6fp+4 +0x1.0046bap+4 +0x1.62c562p+6 +0x1.0d6c4p+6 +0x1.06cdbcp+6 +0x1.e88312p+5 +-0x1.903494p+3 +0x1.5d8044p+6 +0x1.0330e2p+4 +0x1.956188p+3 +0x1.9716c8p+5 +0x1.9b053ep+2 +0x1.26b98ap+5 +0x1.0b77p+3 +-0x1.ad2e28p+3 +0x1.30a1fap+4 +0x1.f41f1ep+2 +0x1.58c6eep+6 +0x1.4cd264p+3 +0x1.2f67c2p+6 +0x1.17e59ap+5 +0x1.59172cp+6 +0x1.3bb328p+4 +0x1.2a1c4ap+4 +0x1.11986p+6 +0x1.694528p+5 +0x1.d5535ap+4 +0x1.c2a2a4p+5 +0x1.4d88eap+4 +-0x1.e7e718p-1 +0x1.69dd4ap+5 +-0x1.4eca08p+1 +-0x1.c3eb44p+3 +0x1.2a4a8p+3 +0x1.d38d02p+5 +0x1.521b76p+6 +0x1.307698p+4 +0x1.8609c2p+4 +-0x1.facdd8p-3 +-0x1.2292p+3 +0x1.35cbf8p+1 +0x1.4390ecp+4 +0x1.948c06p+4 +-0x1.58cfb4p+3 +0x1.4b4b1cp+3 +0x1.ec863ap+5 +0x1.7868acp+4 +0x1.0c6a56p+6 +0x1.e8f6a6p+1 +0x1.f904cep+5 +0x1.d293c8p+4 +-0x1.35c3e8p+3 +0x1.323624p+4 +0x1.1985dep+4 +0x1.300366p+2 +0x1.cf14fap+5 +0x1.a32ab2p+5 +0x1.fb2286p+5 +0x1.071ed4p+6 +-0x1.25c488p+3 +0x1.5bd4b6p+5 +0x1.bfa83ap+4 +0x1.08f0dep+3 +0x1.f997b4p+4 +0x1.7368ccp+5 +0x1.590e04p+5 +0x1.57d704p+6 +0x1.c5aacep+5 +-0x1.54ee06p+2 +0x1.6191aap+3 +0x1.da9cap+5 +0x1.2fde0ap+5 +0x1.065a4ap+6 +0x1.1d3006p+6 +0x1.81e26ep+2 +0x1.ebf4dap+5 +0x1.cef564p+4 +0x1.922a5ep+3 +0x1.05e368p+3 +-0x1.245f16p+1 +0x1.479e9ap+3 +0x1.2b5394p+5 +0x1.ad8dacp+3 +0x1.ae750ep+3 +0x1.9a4daap+4 +-0x1.825edep+2 +0x1.312b9ap+6 +0x1.18e142p+4 +0x1.63bd86p+5 +0x1.252456p+4 +0x1.ba9c2ep+5 +-0x1.e576a4p+0 +0x1.14a2c4p+6 +0x1.0a073cp+5 +0x1.dcec16p+4 +-0x1.9ff9fap+2 +-0x1.5eb4f8p-2 +-0x1.d4075p+2 +0x1.cb0356p+2 +0x1.b902d6p+5 +0x1.3fdc32p+2 +0x1.5d971p+6 +0x1.84e158p+4 +0x1.95b4c4p+5 +-0x1.3e79ep+3 +0x1.fd2dc8p+5 +0x1.0d6f1ep+6 +0x1.4d02bp+5 +0x1.f11f1p+4 +0x1.576072p+4 +0x1.6dd086p+4 +0x1.0e00d2p+5 +0x1.995574p+5 +0x1.483b64p+5 +0x1.32e292p+3 +0x1.564096p+5 +0x1.64c174p+5 +0x1.54eccap+2 +0x1.10debap+5 +0x1.622066p+5 +0x1.207182p+2 +0x1.e8fb92p+5 +0x1.fc096ap+5 +0x1.3a7646p+1 +0x1.2b9d32p-1 +0x1.1b13f8p+6 +0x1.90947ap+2 +-0x1.b8d3acp+3 +0x1.b6a486p+3 +0x1.49a914p+6 +0x1.2e0d82p+6 +0x1.a6b1aep+5 +0x1.2511e4p+5 +0x1.da5904p+5 +0x1.d5b054p+4 +0x1.2a5f2cp+6 +0x1.08678ap+6 +0x1.f9e99ap+5 +0x1.916dfp+4 +0x1.bca612p+5 +0x1.1d10fcp+5 +0x1.5f1accp+6 +-0x1.cdae76p+2 +0x1.4cc6d2p+6 +0x1.496142p+6 +-0x1.a2389ap+3 +0x1.de417ap+5 +0x1.5db35ap+2 +0x1.c3bfp+4 +0x1.494e5cp+1 +0x1.653f3ep+3 +0x1.184762p+0 +0x1.11cd68p+6 +0x1.278d82p+5 +0x1.ee46e8p+3 +0x1.3eedbap+6 +0x1.2f0584p+5 +0x1.1c418ap+5 +0x1.4c0c6ap+5 +0x1.20bc1ap+5 +0x1.4a866cp+4 +0x1.f57228p+4 +0x1.0d82a8p+6 +0x1.4b7808p+6 +0x1.32497p+6 +0x1.53a728p+6 +0x1.a90c84p+5 +0x1.e1b57cp+5 +-0x1.2e0af6p+2 +0x1.c3ee6cp+2 +0x1.271e9ap+4 +0x1.62dcfap+6 +0x1.d0991p+1 +0x1.3b6862p+6 +0x1.dad92p+4 +0x1.28e45ap+3 +0x1.a299a8p+3 diff --git a/benchtests/log10f-inputs b/benchtests/log10f-inputs new file mode 100644 index 0000000000..09d2b5316e --- /dev/null +++ b/benchtests/log10f-inputs @@ -0,0 +1,1005 @@ +## args: float +## ret: float +## includes: math.h +# Random inputs x*2^e where x is random in [0x1p-1,0x1p+0] and e in [-126,127] +## name: workload-random +0x1.da16e6p-106 +0x1.670c3cp-44 +0x1.b238f8p+57 +0x1.55b736p-17 +0x1.3a0424p+101 +0x1.d5741p+54 +0x1.b4abbcp-10 +0x1.51ea1cp+96 +0x1.27b328p-29 +0x1.bd7b1ap+92 +0x1.fe1fap+77 +0x1.192fc2p+14 +0x1.c503fp+5 +0x1.d20c3ep-94 +0x1.586c14p-96 +0x1.e89f4cp-78 +0x1.a77f04p+3 +0x1.fe4a58p+66 +0x1.e67aa4p-3 +0x1.c22b3ap+35 +0x1.898044p-60 +0x1.7e5374p+24 +0x1.f8a3fp+81 +0x1.c9f37p+12 +0x1.c4760cp-94 +0x1.70457ep+97 +0x1.82cc9cp-57 +0x1.8528c8p-71 +0x1.1b90a8p+53 +0x1.76b5e2p+30 +0x1.999c7ap+111 +0x1.27731ap+116 +0x1.c2e128p-52 +0x1.a4ef2ep-46 +0x1.78fce8p-92 +0x1.d3a338p+0 +0x1.8de54cp+72 +0x1.20be3p+37 +0x1.290122p-118 +0x1.9f19e4p-36 +0x1.317c34p+80 +0x1.0f3f3ep-126 +0x1.a50fcp+44 +0x1.12ef54p-98 +0x1.69b3a6p+17 +0x1.ec0e44p+28 +0x1.d699d8p-113 +0x1.ae1134p+106 +0x1.b2333cp-63 +0x1.694f68p+91 +0x1.fcb1ap+112 +0x1.1e492p-45 +0x1.d7ac74p-6 +0x1.8122d4p-106 +0x1.070b92p+8 +0x1.1f3c0ap+30 +0x1.617eb2p+68 +0x1.7e64a4p-126 +0x1.1c4b92p+37 +0x1.ed1f1ep+21 +0x1.5f1a2p+43 +0x1.166282p+28 +0x1.78f48cp+126 +0x1.c344bp+81 +0x1.74a788p+34 +0x1.76e186p+79 +0x1.670aeap+124 +0x1.9df346p+77 +0x1.5add7ap+2 +0x1.da11fcp+81 +0x1.e7dba4p-123 +0x1.abbdep-65 +0x1.c557ap+122 +0x1.45572p-37 +0x1.249f44p-44 +0x1.5845fp-40 +0x1.66442cp-122 +0x1.12b0fp-97 +0x1.d0cd96p-23 +0x1.397968p-47 +0x1.65c0a2p-54 +0x1.32ace6p+116 +0x1.7b7a8cp+42 +0x1.9207eep-57 +0x1.16a338p-74 +0x1.9debc4p+96 +0x1.db29cp+17 +0x1.871b3cp-114 +0x1.a84948p-29 +0x1.0a16aep-41 +0x1.55c0dcp+103 +0x1.454dep+122 +0x1.0ae7a4p+109 +0x1.a1e65cp-101 +0x1.3aad16p-70 +0x1.95678ap+63 +0x1.5cba44p+72 +0x1.a5806ap+17 +0x1.f69a2p-127 +0x1.cfe828p+18 +0x1.93b8ap-66 +0x1.9bb51p+12 +0x1.15a764p+32 +0x1.9a26b4p-29 +0x1.b270b6p-122 +0x1.fe10e8p-120 +0x1.7f69b8p+116 +0x1.e2f38ep+99 +0x1.3bcafep+11 +0x1.87ee32p-89 +0x1.897feep-82 +0x1.b73098p+86 +0x1.904a14p+110 +0x1.2ccbcp+115 +0x1.bf3952p-52 +0x1.ad968p-13 +0x1.7fbc7ap-81 +0x1.01ad34p-109 +0x1.6bbadep+57 +0x1.9f097cp-88 +0x1.3e045p+13 +0x1.f39b0cp-56 +0x1.76c1d8p+48 +0x1.dc89acp+81 +0x1.9f4c76p-43 +0x1.d9b334p+4 +0x1.48b044p-84 +0x1.d9e254p+25 +0x1.05338ep-5 +0x1.e35e74p-50 +0x1.4d41bap-105 +0x1.a42d5ep+30 +0x1.f94e9ap+23 +0x1.8dbe34p+65 +0x1.0b305ep+20 +0x1.7f9e3ep-18 +0x1.a6c068p+34 +0x1.319b28p+64 +0x1.f96bep-102 +0x1.a567e4p-56 +0x1.a25f7p-88 +0x1.2efa1ep-89 +0x1.4e5fbcp-17 +0x1.2ba0ep-49 +0x1.43d7a8p-124 +0x1.befe96p-68 +0x1.cfcea4p-120 +0x1.83f31p+73 +0x1.133bfcp+70 +0x1.7093b2p+111 +0x1.d2124ap+46 +0x1.235cf6p+43 +0x1.81e624p-84 +0x1.b95f88p-81 +0x1.62f0ccp+46 +0x1.fee13cp-11 +0x1.9b96ecp+80 +0x1.1a18b8p-52 +0x1.d08758p-26 +0x1.2aac9cp+41 +0x1.d72052p+10 +0x1.ec9e44p+10 +0x1.3d17ap+89 +0x1.bf813p+58 +0x1.8f861cp+45 +0x1.cb02bp-98 +0x1.30292p+91 +0x1.759878p-20 +0x1.3b5ef8p+87 +0x1.d515fcp+22 +0x1.00c96cp+39 +0x1.43f8cap+2 +0x1.b2ba98p+119 +0x1.5f4574p+71 +0x1.d7d1bap-118 +0x1.bbc718p-116 +0x1.bfec3ep-81 +0x1.d60c98p+84 +0x1.21d388p+69 +0x1.e61d9p+30 +0x1.521fa4p+27 +0x1.81c3ecp-27 +0x1.0128b8p-104 +0x1.799af4p+43 +0x1.0b4494p+66 +0x1.286a46p-39 +0x1.30b7acp-22 +0x1.2769f6p+29 +0x1.fba108p-118 +0x1.ae818cp+58 +0x1.829338p+15 +0x1.eacd54p-50 +0x1.a3ddcep-73 +0x1.0a7cbep+3 +0x1.053fb2p+24 +0x1.977f4ap-90 +0x1.a1f9f6p-94 +0x1.35e1b8p-11 +0x1.568ad4p+51 +0x1.ed295cp-74 +0x1.67d44cp+34 +0x1.1dcc42p-51 +0x1.765f5ap-18 +0x1.f0b462p+81 +0x1.5be91ep-90 +0x1.3ae462p-24 +0x1.95c2fp-79 +0x1.60e24cp+40 +0x1.ed5388p-121 +0x1.f3b5f4p-81 +0x1.0aac5cp+57 +0x1.a52ebcp+30 +0x1.c8875cp-81 +0x1.b24d7cp+123 +0x1.294ad8p+111 +0x1.04ce6ep+12 +0x1.b31978p-51 +0x1.6f4a34p-16 +0x1.e4844p+38 +0x1.4fa35cp-18 +0x1.6702fap+115 +0x1.81bafep-100 +0x1.ff39fcp-72 +0x1.593832p-8 +0x1.8393bcp-40 +0x1.1d2b1ap+119 +0x1.0d9676p-111 +0x1.07c464p+109 +0x1.97d358p+51 +0x1.09f466p+12 +0x1.aaaa08p+0 +0x1.cdc2dep+52 +0x1.5a5914p+14 +0x1.85c484p-87 +0x1.6be4a6p-16 +0x1.d2b9a4p+25 +0x1.029092p-31 +0x1.00c192p+35 +0x1.09b8e2p-55 +0x1.7e39fcp-111 +0x1.e70afcp+2 +0x1.373c5cp-36 +0x1.0d242ap+64 +0x1.5e5a74p+4 +0x1.2049bp+69 +0x1.3a4a6ep+107 +0x1.8864c4p+15 +0x1.169e34p+107 +0x1.8a34dp+16 +0x1.492ba6p+80 +0x1.852282p+28 +0x1.bcaef8p+3 +0x1.2d1f62p-25 +0x1.fb7e44p-97 +0x1.dc3f8ep+79 +0x1.6667b2p-94 +0x1.53e6f4p-33 +0x1.c58c9p+15 +0x1.df9ecap-78 +0x1.19237ep-23 +0x1.865f4ap+89 +0x1.3a1ab4p+47 +0x1.523edp+25 +0x1.a88f98p-21 +0x1.26a16ap-80 +0x1.31b9d4p+30 +0x1.f2f44cp+4 +0x1.2bf848p+56 +0x1.18e23ep+44 +0x1.eb53acp+66 +0x1.f1ae2cp+96 +0x1.3b2864p+87 +0x1.34ea48p-126 +0x1.a21ef8p+30 +0x1.ed7cdp+28 +0x1.c62e2p+124 +0x1.cc0edp+95 +0x1.26deaep+100 +0x1.46e9dcp+35 +0x1.f7f808p+60 +0x1.05cf94p-2 +0x1.33046ap-26 +0x1.eda126p+109 +0x1.1a2c22p-57 +0x1.42f4fap+96 +0x1.4a529ep-11 +0x1.db8a26p-53 +0x1.b8de04p+119 +0x1.4bb944p-16 +0x1.044df4p+25 +0x1.93a748p+74 +0x1.671124p+22 +0x1.9ad676p-10 +0x1.0534dcp+80 +0x1.ec2a64p+82 +0x1.0f8aacp-39 +0x1.7fba92p+49 +0x1.1f844ap-90 +0x1.ba683p-114 +0x1.ff2418p+26 +0x1.b8f23p-92 +0x1.20843cp+72 +0x1.75b76ep-35 +0x1.42d08cp+9 +0x1.0213f6p-20 +0x1.4ea9b4p-25 +0x1.7afdfap+55 +0x1.b7f224p-6 +0x1.56f9fap-74 +0x1.e9eff6p+8 +0x1.ba5568p-67 +0x1.602878p-127 +0x1.5f1212p+27 +0x1.d8c36p-125 +0x1.595be4p+31 +0x1.6b8c2p+60 +0x1.9c0bfep+86 +0x1.3054d8p-110 +0x1.2de4e2p-114 +0x1.d30c88p+91 +0x1.92b73cp-68 +0x1.cecccp+99 +0x1.f61878p+63 +0x1.660bfep+29 +0x1.082f72p-29 +0x1.0b02f6p+110 +0x1.13fdc4p-7 +0x1.454f9p-22 +0x1.8e5e8cp+96 +0x1.266ep-127 +0x1.cbdef4p+26 +0x1.16454ep-96 +0x1.23fdc8p+105 +0x1.4b50bap+32 +0x1.a9a79p-72 +0x1.1d30dcp-13 +0x1.418554p+24 +0x1.b772ecp+89 +0x1.de553cp+45 +0x1.04c0b6p-120 +0x1.c02f08p-48 +0x1.186b22p-94 +0x1.8866b6p-112 +0x1.63ab38p-3 +0x1.d4d124p+109 +0x1.921c7p+8 +0x1.02e724p+20 +0x1.7b93a8p-101 +0x1.aa0cbcp-86 +0x1.bd3e86p-44 +0x1.fc4d2p-84 +0x1.71868ep-71 +0x1.4dd6a6p-57 +0x1.a987b2p-116 +0x1.ab61d4p+35 +0x1.cdab24p+30 +0x1.0b5594p-96 +0x1.eaa8f4p+121 +0x1.8fd794p+17 +0x1.1b63b6p-81 +0x1.8e99bcp-113 +0x1.043c5cp-105 +0x1.5013d4p-58 +0x1.601568p-98 +0x1.783708p-27 +0x1.e26e5cp+58 +0x1.bee95p+71 +0x1.df371ap+26 +0x1.2d7b7p-125 +0x1.60c5cep-38 +0x1.46cb7ep+88 +0x1.e16038p-13 +0x1.23f7cap-31 +0x1.90d4bcp-2 +0x1.f4fa2p-47 +0x1.0adef2p+50 +0x1.ce7c8cp-45 +0x1.d81b52p+104 +0x1.43d436p-95 +0x1.faa8ecp-24 +0x1.7d4b4p+86 +0x1.7c8994p-83 +0x1.c4b67cp+40 +0x1.1b1922p-112 +0x1.4b7ecep-15 +0x1.dcb6fep-14 +0x1.20dbf6p-55 +0x1.3e777p-109 +0x1.22360ap-118 +0x1.7c01bcp-43 +0x1.9218fep+38 +0x1.1a7e04p-57 +0x1.4623d6p+90 +0x1.56cb4p-70 +0x1.88e8cp-24 +0x1.d3b234p-40 +0x1.d3461p+28 +0x1.e03eap-80 +0x1.866d8cp+2 +0x1.efd52p+17 +0x1.b9466cp+62 +0x1.6e3274p+50 +0x1.16b192p+99 +0x1.2d1f76p-20 +0x1.018a1ep-109 +0x1.e64edcp-61 +0x1.badf04p+7 +0x1.fd69c4p-85 +0x1.789cc6p-4 +0x1.4d7b2ap+80 +0x1.c7e56p+35 +0x1.edb216p-57 +0x1.6b581p-30 +0x1.a60178p+42 +0x1.10322ep-50 +0x1.af924ep+45 +0x1.5413bp+87 +0x1.2db0cp+46 +0x1.650a2cp-2 +0x1.57b896p-104 +0x1.6b2dap+0 +0x1.e7063ep-53 +0x1.4bb8ep-42 +0x1.7d72dp+123 +0x1.dcd8fap-87 +0x1.fae3f4p+11 +0x1.6de0dap+68 +0x1.624738p-78 +0x1.dbe44cp-23 +0x1.5e0f9ap-46 +0x1.0c9dp-104 +0x1.c565d8p+33 +0x1.c07118p-63 +0x1.c9d942p+85 +0x1.773dfp+3 +0x1.15bfap+87 +0x1.fdbd2cp+14 +0x1.d996fap-57 +0x1.2a7c7cp-45 +0x1.e690fep-71 +0x1.f5c04p-95 +0x1.d17398p+123 +0x1.c5dc6cp-117 +0x1.d9f2ccp+82 +0x1.da8d44p-16 +0x1.bda39p-67 +0x1.5a646cp-10 +0x1.412e4ap-58 +0x1.d91868p+80 +0x1.35d738p+68 +0x1.5045d4p-103 +0x1.bb697p-120 +0x1.68d014p-75 +0x1.0a3754p+54 +0x1.9bb66ap+100 +0x1.c2fdcp+33 +0x1.c2023p-98 +0x1.2e3106p+20 +0x1.3b5d34p-29 +0x1.1c8316p+97 +0x1.51779cp+3 +0x1.65d436p-49 +0x1.6c3f4ep+47 +0x1.7b696cp-58 +0x1.1768cap+96 +0x1.0a5052p-97 +0x1.46e2dap+86 +0x1.e545f8p-44 +0x1.1851dap+37 +0x1.877a1cp-30 +0x1.fedaf8p+89 +0x1.93a08p-114 +0x1.c970fp-106 +0x1.e80106p+26 +0x1.6f9bep-29 +0x1.a22e78p+24 +0x1.3cf0eep+108 +0x1.cead34p+76 +0x1.a4f7fp+17 +0x1.823924p-11 +0x1.1cfdf4p-28 +0x1.5e8ee8p+119 +0x1.5357d8p+43 +0x1.99df08p-126 +0x1.f98dccp+76 +0x1.c9d0b6p+37 +0x1.342018p-89 +0x1.c6f08cp+89 +0x1.f7ba82p+116 +0x1.ec961cp-13 +0x1.772252p-18 +0x1.08f52p-107 +0x1.7cbceep-41 +0x1.cdc76p+91 +0x1.c5ce0cp-38 +0x1.9cff24p-77 +0x1.2ad16cp-101 +0x1.1d0ab2p+41 +0x1.84a054p-70 +0x1.c95934p+126 +0x1.33f824p+102 +0x1.74420ap+27 +0x1.1df842p+21 +0x1.7c3cc4p-7 +0x1.8cde44p-44 +0x1.19894ep+5 +0x1.ae06fp-55 +0x1.680a14p-18 +0x1.e9d17p+52 +0x1.cb341ep+74 +0x1.3c332cp-61 +0x1.afd732p-39 +0x1.42540cp+27 +0x1.6465c4p-43 +0x1.6ad396p-23 +0x1.791e4ap+51 +0x1.61e53p-114 +0x1.c2b5eep-74 +0x1.33e062p+79 +0x1.b25868p+73 +0x1.7c8b4cp+28 +0x1.5fd75p-79 +0x1.ccc12cp+30 +0x1.179e28p+16 +0x1.f74506p+83 +0x1.ccb774p-96 +0x1.db5004p-30 +0x1.b60d22p-103 +0x1.87fb24p-7 +0x1.92111ep+33 +0x1.c760aep+28 +0x1.2dc1acp-122 +0x1.99be28p+19 +0x1.b2a008p-88 +0x1.ce8b2p-112 +0x1.b151cp-18 +0x1.3aa5e4p-31 +0x1.42f8fcp+103 +0x1.209adcp+22 +0x1.8b597cp+31 +0x1.a279b6p+99 +0x1.98376cp-33 +0x1.2e91c4p-29 +0x1.5e6e64p+33 +0x1.058124p-31 +0x1.8ff2d6p+15 +0x1.f7ee64p-60 +0x1.27fbfcp-111 +0x1.d54a2p+116 +0x1.4105b8p+93 +0x1.7d7fbap-52 +0x1.518e02p-62 +0x1.4b5758p-45 +0x1.c515eep-93 +0x1.23932ep+19 +0x1.7e1ee4p-98 +0x1.0599ccp+51 +0x1.e26478p-78 +0x1.06e7ecp-28 +0x1.7e1448p-27 +0x1.98fb06p+8 +0x1.b8d9a6p+88 +0x1.090d4ep-55 +0x1.ca936cp+20 +0x1.3a8d3ap-114 +0x1.f354dcp-56 +0x1.11640ep+63 +0x1.f70288p+70 +0x1.4ad00cp+32 +0x1.7f8a8cp-31 +0x1.78d6ccp-34 +0x1.b33008p-105 +0x1.2fd46p-96 +0x1.557cbp-19 +0x1.426d22p-117 +0x1.009ed6p+59 +0x1.1112f8p+115 +0x1.7a21acp-71 +0x1.1a4cd6p+42 +0x1.982becp-21 +0x1.f5dabcp+106 +0x1.884e24p+65 +0x1.9ac342p+9 +0x1.138c3p-39 +0x1.00f9e8p-105 +0x1.ffd91ep-120 +0x1.997a48p-84 +0x1.874cb4p+60 +0x1.98ec16p+51 +0x1.9a371p+20 +0x1.d3818cp+93 +0x1.4a28ep+65 +0x1.1eee44p+44 +0x1.822bp+84 +0x1.9e26a8p+123 +0x1.3c56f4p-16 +0x1.e618fp-17 +0x1.f99f1p-70 +0x1.9d16p-112 +0x1.632eb8p+16 +0x1.d835a6p+41 +0x1.484fd4p-15 +0x1.b42298p-53 +0x1.854f38p-108 +0x1.4c1aa4p-23 +0x1.277a4ap+77 +0x1.f5a3c2p+81 +0x1.46e67p+65 +0x1.c0e96p-102 +0x1.7dfeb8p+93 +0x1.3ed79cp+60 +0x1.508306p+73 +0x1.cbd7b2p+61 +0x1.8307a6p-21 +0x1.c346fcp-23 +0x1.057024p-122 +0x1.4eb468p-90 +0x1.066f76p-1 +0x1.66ebdcp-121 +0x1.c45404p-25 +0x1.1f8fb8p-107 +0x1.57ca58p+36 +0x1.937abcp-34 +0x1.24af16p-30 +0x1.31ec06p-2 +0x1.104f24p+59 +0x1.f8171cp+52 +0x1.15e124p-16 +0x1.a897f8p+16 +0x1.f7581cp+57 +0x1.ece8ep+44 +0x1.742f84p+90 +0x1.c37ae8p+57 +0x1.5bca82p-52 +0x1.d481bp+13 +0x1.12f074p-24 +0x1.fe7e7p-96 +0x1.d1b5ap+106 +0x1.758368p-121 +0x1.aec484p+103 +0x1.81306cp+17 +0x1.5c5cecp+87 +0x1.1f89a4p+5 +0x1.db686cp+36 +0x1.e412f4p+24 +0x1.89ef5cp+65 +0x1.d8f6a6p-87 +0x1.5314d6p-4 +0x1.7fe6d4p-116 +0x1.ce185ap+32 +0x1.cbbd6ep-126 +0x1.986396p+49 +0x1.e33398p-48 +0x1.f1c1f4p+115 +0x1.d7075p-95 +0x1.85e7bp-82 +0x1.53e2ccp-50 +0x1.b9679p-66 +0x1.d0bd04p-87 +0x1.8d73eep+53 +0x1.cbe57cp-57 +0x1.4dbacap-94 +0x1.27fb48p+97 +0x1.1977b8p-125 +0x1.3016bap-92 +0x1.d8c6a6p+88 +0x1.9de6b8p+22 +0x1.7f1ebap+57 +0x1.5e4058p+81 +0x1.bb0b7cp+110 +0x1.98ad46p+23 +0x1.3d6e64p-101 +0x1.3ace6cp+69 +0x1.b2ad5p+16 +0x1.fdf974p-123 +0x1.b452f4p+49 +0x1.1e1822p+65 +0x1.bd61a4p-42 +0x1.96fc0cp-3 +0x1.154f14p+121 +0x1.b5946p-95 +0x1.863008p+58 +0x1.d5682ap+41 +0x1.46a32cp+2 +0x1.7fa148p-74 +0x1.dd3f46p-27 +0x1.4605b2p-96 +0x1.b3ab48p+49 +0x1.98b7bp-60 +0x1.8f97a8p-82 +0x1.af6528p-102 +0x1.97a874p+51 +0x1.cdf372p-86 +0x1.a6a82ep-21 +0x1.d9015cp+103 +0x1.10140ap+19 +0x1.259fb2p-104 +0x1.718298p-75 +0x1.b2955cp-21 +0x1.4dc66p-101 +0x1.16680ep-118 +0x1.f5c2b6p+65 +0x1.6cb9e4p-96 +0x1.68cc5cp-63 +0x1.6a69ccp-56 +0x1.268758p-1 +0x1.9fff9ep-57 +0x1.6f229p-58 +0x1.4fe5dep-4 +0x1.132c8p+78 +0x1.2336a6p+88 +0x1.0d571ep+81 +0x1.da119cp+57 +0x1.87a81cp-82 +0x1.166246p+13 +0x1.0c61cap+103 +0x1.f06688p+90 +0x1.cdc4c4p-79 +0x1.73443cp+4 +0x1.9b1b68p-92 +0x1.1765e2p-94 +0x1.ad115cp-49 +0x1.3094ap-19 +0x1.6a3556p+82 +0x1.cdb526p-80 +0x1.abfb12p+111 +0x1.d07accp-82 +0x1.89c7acp+20 +0x1.de58cp+20 +0x1.c0daf8p-24 +0x1.e46e38p-127 +0x1.2e25a4p+40 +0x1.4d0512p+7 +0x1.30cb0ep-29 +0x1.5acfap+116 +0x1.10b526p+99 +0x1.92a2f8p-118 +0x1.d232e8p-115 +0x1.9cb39ep+83 +0x1.00932cp+61 +0x1.b8c878p-15 +0x1.ea4a42p+48 +0x1.eaee6p+71 +0x1.f14842p+62 +0x1.1a5b82p-19 +0x1.ad7ap-91 +0x1.9ec11ep+24 +0x1.fe8dccp-113 +0x1.31f07cp+35 +0x1.044952p-23 +0x1.ef381cp-51 +0x1.c742fp+122 +0x1.f3e7f6p-126 +0x1.09f72cp-62 +0x1.9815fap+74 +0x1.8ef758p-111 +0x1.b8019cp-14 +0x1.6d17b8p-80 +0x1.4fe49p-89 +0x1.204356p-91 +0x1.740898p+95 +0x1.614624p-60 +0x1.c35984p-86 +0x1.bd40c8p+103 +0x1.8c1b9ap-24 +0x1.53d4b6p+49 +0x1.3db80cp+124 +0x1.504facp+30 +0x1.89207cp+51 +0x1.0c09d8p-38 +0x1.7a9eecp-40 +0x1.98f19cp-97 +0x1.cde426p-66 +0x1.c1992cp-81 +0x1.f71a8cp+110 +0x1.24a564p+101 +0x1.0faedp+29 +0x1.69b9f8p-80 +0x1.021294p-110 +0x1.9e58b4p+80 +0x1.825bd4p-37 +0x1.26db6ep-111 +0x1.f377e8p-59 +0x1.589518p+36 +0x1.f51bep+120 +0x1.c71048p+125 +0x1.e5ead2p+27 +0x1.3bff94p-119 +0x1.65f91cp+69 +0x1.eaf6cp+109 +0x1.cafb1cp-84 +0x1.38170cp-16 +0x1.75855ap+5 +0x1.688904p+122 +0x1.6f5462p-115 +0x1.60974cp-20 +0x1.dfd768p+54 +0x1.598a26p-4 +0x1.ab96d4p-69 +0x1.40d872p-62 +0x1.5bee38p-12 +0x1.b0c6f6p+85 +0x1.98041cp-74 +0x1.4275ep-55 +0x1.b6a0e4p+124 +0x1.ee4472p+79 +0x1.dcad5ep+120 +0x1.ede43ep-92 +0x1.01d3fp-127 +0x1.cb73f8p-85 +0x1.d9653p+1 +0x1.fb7fbep-1 +0x1.07830ep-83 +0x1.4aac7ep+2 +0x1.dfa09ep+41 +0x1.df5dc6p+5 +0x1.1a87c8p+71 +0x1.560c8ap-47 +0x1.1e508ap-70 +0x1.66538cp+118 +0x1.502268p-125 +0x1.9bea34p-82 +0x1.61c4acp+54 +0x1.bf1d4p-103 +0x1.3390f6p-14 +0x1.d806c6p+36 +0x1.07738ep-77 +0x1.da58eap-124 +0x1.863838p+83 +0x1.2a550ap-75 +0x1.79654ep+104 +0x1.874ddcp-119 +0x1.b8fd6p-125 +0x1.6f4f02p+43 +0x1.1fd48ap+58 +0x1.f83e6ap+73 +0x1.8c87fap-77 +0x1.ec4838p-7 +0x1.122f66p+100 +0x1.29047ap+100 +0x1.79ae82p+47 +0x1.b11164p+107 +0x1.d11e6cp-92 +0x1.99a08cp+122 +0x1.cc87e4p+108 +0x1.1df93ap+84 +0x1.ffa4c8p+26 +0x1.889ffcp+62 +0x1.102e0ep-65 +0x1.5a8feep+30 +0x1.c35a4p-38 +0x1.d82d9cp+26 +0x1.d40506p+21 +0x1.9907b4p+72 +0x1.4bc558p+9 +0x1.7b50c6p+114 +0x1.508d96p-1 +0x1.1485cep-35 +0x1.226084p+109 +0x1.a5e10ep-38 +0x1.efdbfp-48 +0x1.f5a8e6p-92 +0x1.b6110cp-102 +0x1.7565ecp-10 +0x1.fbf5p+17 +0x1.f12abp-86 +0x1.e56478p-89 +0x1.e94aap-93 +0x1.f1c6d4p-75 +0x1.69ed0ep-54 +0x1.f337c4p+81 +0x1.5a565p+87 +0x1.ff5e74p+18 +0x1.e63068p-12 +0x1.830d7cp+105 +0x1.28a0c4p-45 +0x1.53236p-73 +0x1.9aaf0ap-38 +0x1.95b8b8p+18 +0x1.78b7a6p-31 +0x1.0d14aep+71 +0x1.4e3e3cp+87 +0x1.4c1aeap-5 +0x1.05d63cp-76 +0x1.809422p-3 +0x1.4e06f6p+42 +0x1.8e62p+67 +0x1.308398p-112 +0x1.76b8dep-29 +0x1.a1948p-99 +0x1.061da4p+3 +0x1.6333bp+85 +0x1.cce084p+39 +0x1.93a29ap+24 +0x1.ec39e8p+77 +0x1.74f824p-49 +0x1.03d684p+119 +0x1.51b42cp-116 +0x1.825782p-65 +0x1.02080ep-34 +0x1.49a78ap+22 +0x1.bf775p-78 +0x1.e14de2p+63 +0x1.f0ed2p-32 +0x1.3e66fp+87 +0x1.67f3a4p+44 +0x1.221c8ep+0 +0x1.89fe2cp+13 +0x1.31081ap-117 +0x1.0b9c12p-77 +0x1.80e67p+24 +0x1.b0798ap+122 +0x1.b2fafep-4 +0x1.0a5278p+43 +0x1.61c05cp+27 +0x1.6db74cp-99 +0x1.3f0a0ap+43 +0x1.84026ep+59 +0x1.6ca854p+30 +0x1.491302p-2 +0x1.851e0cp-9 +0x1.f55decp+104 +0x1.e936e8p-108 +0x1.2ecd9p+57 +0x1.750412p-34 +0x1.d9789cp-3 +0x1.c2c19p-78 +0x1.dc53dcp-122 +0x1.75107p+9 +0x1.dae6cp-29 +0x1.e2703p-77 +0x1.f0a792p+9 +0x1.60261p-29 +0x1.fad1b6p+93 +0x1.d35d9p+35 +0x1.51e05p-34 +0x1.8c1d74p+97 +0x1.7444d4p-45 +0x1.c55458p-92 +0x1.bb5c4ep+40 +0x1.e2749p-46 +0x1.965864p+5 +0x1.1edcf2p-69 +0x1.9641a6p+47 +0x1.4c72ecp-115 +0x1.40a138p-103 +0x1.d9a2cp-52 +0x1.c1c2b8p+86 +0x1.90c1dp+35 +0x1.3e9a3p+123 +0x1.355362p+116 +0x1.acfd24p-96 +0x1.5b85f8p+55 +0x1.bf45fp+8 +0x1.a12c4ep-29 +0x1.f9b272p-78 +0x1.bcffe4p-60 +0x1.d2aa46p+40 +0x1.a0a524p+57 +0x1.c07822p-113 +0x1.e79e9p-37 +0x1.0b0c1p-59 +0x1.97b7d6p+37 +0x1.7fe50cp+22 +0x1.c117c4p+126 +0x1.f98134p+17 +0x1.423bf2p-19 +0x1.a1b2f4p+106 +0x1.94c3ep+70 +0x1.c8697p+2 +0x1.7e2746p-60 +0x1.797a46p-54 +0x1.7b60f2p-102 +0x1.cadc0cp-76 +0x1.d67bep-34 +0x1.454c1p+4 +0x1.d25adcp-53 +0x1.6ab0ccp-4 +0x1.dfeefcp+66 +0x1.aebe38p-54 +0x1.216b2ap-125 +0x1.85c3acp+112 +0x1.fbb2cep+23 +0x1.cb1b8cp-3 +0x1.c66ed4p+21 +0x1.f23988p+30 +0x1.f584e8p+103 +0x1.6342b8p+48 +0x1.c562e4p+94 +0x1.1ac782p-96 +0x1.b42c44p+69 +0x1.e71db6p-49 +0x1.e83c9p+95 +0x1.1c55bep-63 +0x1.3a8884p+87 +0x1.60d3b4p+105 +0x1.be6558p+110 +0x1.bab6b6p-78 +0x1.16a99p+85 +0x1.0dbf68p+17 diff --git a/benchtests/log10p1f-inputs b/benchtests/log10p1f-inputs new file mode 100644 index 0000000000..50a9739476 --- /dev/null +++ b/benchtests/log10p1f-inputs @@ -0,0 +1,2888 @@ +## args: float +## ret: float +## includes: math.h +## name: workload-spec2017.wrf +0x1.fe4c3p-1 +0x1.0e33e6p+1 +0x1.00000ap+0 +0x1.900028p+4 +0x1.f8cdeep+0 +0x1.332986p+7 +0x1.493696p+0 +0x1p+0 +0x1.38c67p+7 +0x1.029046p+1 +0x1.1bd31cp+4 +0x1.bb3e3ep+12 +0x1.000098p+0 +0x1.a7971p+7 +0x1p+0 +0x1.0001a8p+0 +0x1.00004ep+0 +0x1p+0 +0x1.0606f2p+0 +0x1.3e54a8p+11 +0x1.3a0662p+3 +0x1.000c72p+0 +0x1p+0 +0x1.0bf8b6p+0 +0x1.000204p+0 +0x1.500ad2p+0 +0x1p+0 +0x1.3e4cfp+8 +0x1.00006cp+0 +0x1.54f7fp+0 +0x1.267858p+0 +0x1.191ccp+0 +0x1.0cdb18p+1 +0x1.29bf1ep+15 +0x1.64bd92p+1 +0x1.255534p+0 +0x1p+0 +0x1.93bb82p+3 +0x1.1348ep+1 +0x1.00456ep+0 +0x1.08afbcp+8 +0x1.32c37ep+0 +0x1.3437cep-1 +0x1.000214p+0 +0x1.03d5ap+0 +0x1.172378p+6 +0x1p+0 +0x1.330f22p-1 +0x1.00b91p+0 +0x1.e831f2p+15 +0x1.092318p+9 +0x1p+0 +0x1.e80902p+7 +0x1.71ec54p+2 +0x1.1935dcp+0 +0x1.651082p+14 +0x1p+0 +0x1.0f41d8p+8 +0x1.17f4p+0 +0x1.7cf946p+9 +0x1.b14396p+0 +0x1.92f94p+1 +0x1.2f3784p-1 +0x1p+0 +0x1.305ad4p-1 +0x1.002a08p+0 +0x1.3e338p+5 +0x1.1863f6p+8 +0x1p+0 +0x1.ed8fd8p+58 +0x1p+0 +0x1p+0 +0x1.215fc8p+9 +0x1.1965bep+16 +0x1.00031cp+0 +0x1.00011p+0 +0x1p+0 +0x1.e384fep-20 +0x1p+0 +0x1.00020cp+0 +0x1.007e24p+0 +0x1.b14346p+0 +0x1.243ff8p+0 +0x1.3f6ac2p+3 +0x1.816ff6p+5 +0x1.0115ap+8 +0x1.162028p+16 +0x1.62692cp+0 +0x1.0227c8p+1 +0x1.4dda3ep+0 +0x1.418696p+0 +0x1.0272f4p+2 +0x1.62c6ecp+5 +0x1.3cd07ap+18 +0x1.0191eap+0 +0x1.21c3a2p+8 +0x1p+0 +0x1.000bf6p+0 +0x1.a4b51cp+7 +0x1.04d1f8p+0 +0x1.8de2b8p+0 +0x1.7b7a4ep+8 +0x1.1928acp+5 +0x1.305a8p-1 +0x1.ba8662p+5 +0x1p+0 +0x1.ab75a2p-12 +0x1.7cc13cp+9 +0x1.505306p+0 +0x1.63085p+0 +0x1.000064p+0 +0x1.b3f16ap+7 +0x1.1348f8p+1 +0x1.71fe88p+1 +0x1.0b7132p+4 +0x1.470316p+1 +0x1.3228b6p-1 +0x1.8dd666p+0 +0x1.38ed88p+12 +0x1.432218p+0 +0x1.00e0cap+0 +0x1.73eb44p+2 +0x1p+0 +0x1p+0 +0x1.bda15ep+7 +0x1.0272fep+2 +0x1.00171ep+0 +0x1p+0 +0x1.3faa86p+3 +0x1.33c2a2p-1 +0x1.3e48e2p+7 +0x1.017ef2p+0 +0x1.30115ap-1 +0x1.587444p+0 +0x1.3efed8p+8 +0x1.8a5526p+0 +0x1.cb1ecap+15 +0x1.1f5cp+0 +0x1.0001a4p+0 +0x1.1a20dap+7 +0x1.376e6p+0 +0x1.0001aap+0 +0x1.9182f6p-1 +0x1.000292p+0 +0x1.3d46a2p+12 +0x1.e177b6p+7 +0x1.3f5646p+1 +0x1.2ab784p+9 +0x1.dc81b4p+1 +0x1.0ef326p+0 +0x1.996588p-12 +0x1.740848p+3 +0x1.00016p+0 +0x1.ffd51ap+52 +0x1p+0 +0x1.4461ap+4 +0x1.08e7bcp+51 +0x1p+0 +0x1.106e98p+3 +0x1.5490e4p+0 +0x1.46703cp+4 +0x1.6b1e86p-29 +0x1.324caap+0 +0x1.0467ccp+0 +0x1.424574p+0 +0x1p+0 +0x1.001da4p+0 +0x1.364604p+0 +0x1p+0 +0x1.0951e2p+8 +0x1.408994p+0 +0x1.0003ap+0 +0x1.619e92p+12 +0x1.313e72p+2 +0x1.8b47p-6 +0x1.2190fp+2 +0x1.20aaacp+0 +0x1.f0059cp-1 +0x1p+0 +0x1.018e78p+0 +0x1.313e1p+2 +0x1p+0 +0x1.2efce4p-1 +0x1.5ebdap+0 +0x1p+0 +0x1.5e2488p+51 +0x1.bf95f2p+5 +0x1.5a1124p+16 +0x1.73bad6p+1 +0x1.00048ap+0 +0x1.0c9beap+8 +0x1p+0 +0x1.358c08p+7 +0x1.7f834ep-26 +0x1.3e56bcp+15 +0x1.52d8b2p+15 +0x1p+0 +0x1.00109cp+0 +0x1.0a0bb2p+0 +0x1p+0 +0x1.026908p+6 +0x1.370f22p+0 +0x1.5c6c5ap+1 +0x1.7fe4bcp+2 +0x1p+0 +0x1p+0 +0x1.42be68p+49 +0x1.0000d8p+0 +0x1.3abdf8p+12 +0x1.370a44p-12 +0x1.aef9f4p+0 +0x1.00001ep+2 +0x1.017c2p+0 +0x1.00b614p+0 +0x1.32f9f8p-1 +0x1p+0 +0x1.00ebf2p+0 +0x1.0c3116p+0 +0x1.00004p+0 +0x1.03b992p+0 +0x1p+0 +0x1.24eb3cp+0 +0x1.4c73ecp+51 +0x1.fad3ep+1 +0x1p+0 +0x1.32368ap-1 +0x1.000908p+0 +0x1.5ea59ep+12 +0x1.1928ccp+5 +0x1p+0 +0x1.21a93cp+8 +0x1p+0 +0x1.0001e8p+0 +0x1.95b6c2p-12 +0x1.00002p+0 +0x1.2399fap+9 +0x1.449b44p+0 +0x1p+0 +0x1.64a766p+15 +0x1.06ccecp+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.c81f9cp+1 +0x1.5ef196p+0 +0x1.022822p+1 +0x1.99beep+3 +0x1.1f417p+8 +0x1p+0 +0x1.c08726p+5 +0x1.397d9ep+0 +0x1.88e748p+18 +0x1.3b319p+9 +0x1.2fd3b6p-1 +0x1.0001aep+0 +0x1.4a0562p+5 +0x1.4e5f1ap+0 +0x1p+0 +0x1.017fbp+0 +0x1.acaf56p+57 +0x1.ef7d66p+8 +0x1.736c3cp+1 +0x1.12ddbep+0 +0x1.b85ebcp+6 +0x1.0e259p+1 +0x1.5cc2c4p+2 +0x1.99e614p+3 +0x1.f30aa6p+2 +0x1.3911c6p+15 +0x1.119b92p+1 +0x1.352a3p-1 +0x1.0001b2p+0 +0x1.00b26p+0 +0x1.bd730ep+60 +0x1.54fc5p+0 +0x1.5a4804p+0 +0x1.ff7eaep-1 +0x1.5cc268p+2 +0x1.1077aap+2 +0x1.1723d6p+0 +0x1p+0 +0x1p+0 +0x1.30c17p-1 +0x1.000648p+0 +0x1.91aa4cp+6 +0x1.17234p+6 +0x1p+0 +0x1.6d5b18p+2 +0x1.00027ap+0 +0x1.dc8224p+1 +0x1.a9eabep-6 +0x1.099edcp+1 +0x1.004118p+1 +0x1.58d5fcp+60 +0x1.000098p+0 +0x1.004e8p+0 +0x1.f32edap-1 +0x1.0394aep+0 +0x1.0689bp+2 +0x1.124e5cp+0 +0x1.71fe86p+1 +0x1.025ce2p+0 +0x1.46107cp+0 +0x1.047c74p+2 +0x1.a57e74p+15 +0x1.18bbcep+0 +0x1p+0 +0x1.65b9a4p+0 +0x1.0000eep+0 +0x1.08a4a4p+0 +0x1.0fe774p+1 +0x1.000128p+0 +0x1.3e95fp+12 +0x1.b14e3ap-56 +0x1.00007cp+0 +0x1.5619c2p+1 +0x1.4ac958p+0 +0x1.00031p+0 +0x1.003064p+0 +0x1.e119eap-1 +0x1.577b36p+0 +0x1p+0 +0x1.26ff2ap+0 +0x1.004ap+0 +0x1.0000a2p+0 +0x1.1fcc7ep+4 +0x1.6f959p+16 +0x1.000064p+0 +0x1.375c6ap+0 +0x1.6a806ep+2 +0x1p+0 +0x1.8e27aep+1 +0x1p+0 +0x1.000b22p+0 +0x1.8f0c12p+0 +0x1.192892p+5 +0x1.2bcaacp+1 +0x1.984264p+2 +0x1.0034cp+0 +0x1p+0 +0x1.abf4dp+0 +0x1.001044p+0 +0x1.0d26f4p+0 +0x1.626906p+0 +0x1.8bf0c2p+5 +0x1.02d288p+0 +0x1.900128p+4 +0x1.bbbbcp+12 +0x1.45fa5p+0 +0x1p+0 +0x1.01bef2p+0 +0x1.524f26p+2 +0x1.083b0ep+0 +0x1.4811e4p+0 +0x1.0163a8p+0 +0x1.9570fap+15 +0x1.3022f2p-1 +0x1.14c73ap+0 +0x1.0009d8p+0 +0x1.056b92p+63 +0x1.0025a4p+0 +0x1.36aad4p+17 +0x1.05c244p+8 +0x1.d00886p+17 +0x1.001188p+0 +0x1.3376ecp-1 +0x1.6719c8p+16 +0x1.02495p+0 +0x1.fd9bacp-1 +0x1.3882c6p+6 +0x1.3cb358p+0 +0x1.0ec93ep+0 +0x1.4fd2bap+1 +0x1.f8b68p+1 +0x1.33b1f2p-1 +0x1.ba7f4cp+1 +0x1p+0 +0x1.44a3d2p-17 +0x1.9a6a8p+2 +0x1.00918ap+6 +0x1.30d50ep-1 +0x1p+0 +0x1.0001bep+0 +0x1.05b93ep+0 +0x1.aa9d98p+0 +0x1.039b74p+0 +0x1.1ac25ep+8 +0x1p+0 +0x1.12b23ap+1 +0x1.4c5c52p+0 +0x1.07de64p+0 +0x1.950f94p+1 +0x1.001caap+47 +0x1.0a9448p+0 +0x1.01026cp+0 +0x1.03d74ap+0 +0x1p+0 +0x1.0032dap+0 +0x1.380922p-1 +0x1.c0e7ccp+15 +0x1.a35e4p+4 +0x1.25b1e6p+0 +0x1.000044p+2 +0x1.05ac24p+7 +0x1.1fa744p+44 +0x1.0007b2p+0 +0x1.2cca62p+2 +0x1.04be3ap+6 +0x1.00065p+0 +0x1.2b9f3ap+1 +0x1.74085p+3 +0x1p+0 +0x1.01fc4cp+0 +0x1.e137bcp+2 +0x1.097ac8p+0 +0x1.ad1458p+4 +0x1.c8587cp+1 +0x1.31d172p-1 +0x1.0b414ap+1 +0x1.664e36p+1 +0x1.30ae16p-1 +0x1p+0 +0x1.3b7e3cp+2 +0x1.9cc348p+64 +0x1p+0 +0x1p+0 +0x1.cdb384p-32 +0x1p+0 +0x1.00b998p+0 +0x1.36b69ep-1 +0x1.939538p+4 +0x1.dc9deep+4 +0x1.36f86ep+2 +0x1.02113cp+0 +0x1.035852p+0 +0x1.9de428p+2 +0x1.369814p+1 +0x1.147f44p+3 +0x1.031bc8p+0 +0x1.03f7cp+0 +0x1.000924p+0 +0x1.145e14p+2 +0x1.0000d4p+0 +0x1p+0 +0x1.54fdfp+2 +0x1.07c0ep+0 +0x1.829aeep+1 +0x1.000f08p+0 +0x1.34dcdp-1 +0x1p+0 +0x1.cd56e4p+1 +0x1.16400ap+8 +0x1p+0 +0x1.00000ap+2 +0x1.00a21p+0 +0x1.8d6286p+6 +0x1.de4f28p+1 +0x1.9f55b6p+48 +0x1.01c802p+0 +0x1.0327cp+0 +0x1.32fb52p-1 +0x1p+0 +0x1.2525dcp+0 +0x1.91da28p-6 +0x1.5a23a8p+0 +0x1.5f024ap+1 +0x1p+0 +0x1.0008f2p+0 +0x1.05563cp+0 +0x1.89381cp+0 +0x1.8bb056p+16 +0x1.7cc93ep+1 +0x1.8bf0acp+5 +0x1.1722bap+6 +0x1p+0 +0x1.00238ep+0 +0x1.ebb8d2p-1 +0x1.001194p+0 +0x1.6cd388p+1 +0x1.08e4bp+8 +0x1.00002p+0 +0x1.01a0bep+0 +0x1.00e7cep+8 +0x1.1193p+0 +0x1.06a9c8p+0 +0x1.11c7fep+0 +0x1.5ef17cp+0 +0x1.4ae72cp+0 +0x1.e0df4cp+41 +0x1.7e5468p+1 +0x1.8dd478p+0 +0x1.3c2784p+51 +0x1p+0 +0x1p+0 +0x1.b9d454p+12 +0x1.011a58p+0 +0x1.3efb48p+4 +0x1.000208p+0 +0x1.57b3eep+7 +0x1.000004p+0 +0x1.1cd6b8p+0 +0x1.c366fap+9 +0x1.466d2cp+0 +0x1p+0 +0x1.300096p-1 +0x1p+0 +0x1.bef388p+0 +0x1.0c20e8p+8 +0x1.397f2p+4 +0x1.037596p+2 +0x1.62a0a4p+52 +0x1.37269ap+0 +0x1.81fe24p+2 +0x1.dd4196p+56 +0x1.b143ep+0 +0x1p+0 +0x1.b8c2fp+1 +0x1.056b3ep+1 +0x1.3b6cbp+0 +0x1.3ffb2p+0 +0x1p+0 +0x1.3c21cp+0 +0x1.00312cp+0 +0x1p+0 +0x1.3822f8p+0 +0x1.02734p+2 +0x1.05a7dap+0 +0x1.6df1b4p+5 +0x1.0006f4p+0 +0x1.31aebep-1 +0x1p+0 +0x1p+0 +0x1.b997fap+18 +0x1.0570d8p+0 +0x1p+0 +0x1.0a9216p+42 +0x1.ef16f2p+1 +0x1p+0 +0x1.31269ep-1 +0x1.a9954ap+2 +0x1.1cc5e8p+0 +0x1.01d334p+0 +0x1.905f98p+4 +0x1.0310d4p+0 +0x1.16a62ap+0 +0x1.8dd6b2p+0 +0x1.395dcep+7 +0x1.ef5f92p+0 +0x1.000868p+0 +0x1p+0 +0x1.844a16p+2 +0x1.452efcp+0 +0x1p+0 +0x1.1c5da2p+6 +0x1.31ac3ap-1 +0x1.cc1bfp+2 +0x1p+0 +0x1.08215ap+0 +0x1.3b4306p+0 +0x1.71fe6p+1 +0x1.192bd8p+0 +0x1.262f78p+0 +0x1.00013cp+0 +0x1.33c486p-1 +0x1.000014p+0 +0x1.b8f4fp+1 +0x1.5f9f5ap-1 +0x1.059872p+0 +0x1p+0 +0x1.58168p+1 +0x1.826d5cp+0 +0x1p+0 +0x1.032a04p+0 +0x1p+0 +0x1.0c0a5cp+0 +0x1.668d9p+0 +0x1.2f9644p-1 +0x1p+0 +0x1.1821b8p+6 +0x1.b22e8ep+7 +0x1.4f7a78p+0 +0x1.52df24p+0 +0x1.48c612p+0 +0x1.93a19ap+4 +0x1.8bf102p+5 +0x1.122d94p+0 +0x1p+0 +0x1.00018p+0 +0x1.30083ap-1 +0x1p+0 +0x1p+0 +0x1.30d20ep-1 +0x1p+0 +0x1.0000dcp+0 +0x1.285bb4p+0 +0x1p+0 +0x1.0003a4p+0 +0x1p+0 +0x1.2ffcfcp-1 +0x1.093d96p+0 +0x1.239bfcp+0 +0x1.f7c33cp-27 +0x1.a9982ep+2 +0x1.1969f4p+4 +0x1.ff5c88p-1 +0x1.04db6ep+2 +0x1p+0 +0x1.f010dap-1 +0x1.13647p+7 +0x1p+0 +0x1.ea6e18p-10 +0x1.2d16eap+0 +0x1.02b668p+0 +0x1.191704p+4 +0x1.18f2b4p+0 +0x1.b186eap+0 +0x1.24c01ap+2 +0x1.6a3adap+16 +0x1p+0 +0x1p+0 +0x1.2f9f28p-1 +0x1.4b5da4p+0 +0x1.004054p+0 +0x1.002616p+8 +0x1.561954p+1 +0x1p+0 +0x1.4c4394p+0 +0x1.1eed34p+1 +0x1.a702eap+5 +0x1.ee054p+7 +0x1.1156a8p+0 +0x1.9a81fcp+2 +0x1.10ce16p-28 +0x1.b18b88p+0 +0x1.d9c4a8p+1 +0x1.0e275cp+0 +0x1.905f58p+4 +0x1p+0 +0x1.02f774p+0 +0x1.7ce226p+1 +0x1.0002bcp+0 +0x1.010f58p+0 +0x1p+0 +0x1.000198p+0 +0x1p+0 +0x1.4aa832p+0 +0x1.0006c2p+0 +0x1.358ca4p+7 +0x1.1edc64p+0 +0x1.003508p+0 +0x1.fdb69p+1 +0x1.0ff4fep+0 +0x1p+0 +0x1.b8c2fp+1 +0x1.284c16p+0 +0x1.00a228p+0 +0x1.03080cp+0 +0x1.91a8f4p+48 +0x1p+0 +0x1.2080fep+1 +0x1.0002f8p+0 +0x1.b14338p+0 +0x1.081288p+0 +0x1.71b9bep+0 +0x1.09c368p+0 +0x1.35ed64p+0 +0x1.8dd68cp+0 +0x1.d2cc42p+0 +0x1.9be0ecp+3 +0x1.7407fcp+3 +0x1.313ecp-1 +0x1.cdc978p+0 +0x1.0ed538p+1 +0x1.159af4p+8 +0x1p+0 +0x1.128694p+0 +0x1.2f1b06p-1 +0x1.19c0d8p+0 +0x1.dcc7c8p+1 +0x1.a33f8ap+7 +0x1.000158p+0 +0x1p+0 +0x1.28bdaep-16 +0x1.74086cp+3 +0x1.ea297cp+1 +0x1.5d87fp+2 +0x1.0e2658p+1 +0x1.621c14p+1 +0x1.9d8a8cp+3 +0x1p+0 +0x1.7807e8p+3 +0x1.74c924p+0 +0x1.a484e4p+53 +0x1.771c44p+0 +0x1.13d1e4p+2 +0x1.2fa402p-1 +0x1p+0 +0x1.024d72p+2 +0x1.064c6ap+8 +0x1.15d2dep+0 +0x1.9c004ep+3 +0x1.bc2fcap+12 +0x1.befdbep+0 +0x1.36461p+0 +0x1.6db7b8p+5 +0x1.0000cp+0 +0x1p+0 +0x1.02f354p+0 +0x1p+0 +0x1.000228p+0 +0x1.013fep+0 +0x1.213782p+0 +0x1p+0 +0x1.000204p+0 +0x1.a69cccp+7 +0x1.0036acp+0 +0x1.0982b8p+0 +0x1.81693cp-22 +0x1.1e5d64p+6 +0x1.0009f2p+0 +0x1.2fe96p-1 +0x1.0368f8p+0 +0x1.2d2cbep+0 +0x1.37bc04p-1 +0x1p+0 +0x1.d45d88p+1 +0x1.000694p+0 +0x1.000272p+0 +0x1p+0 +0x1.d0b2e6p+1 +0x1.2598a4p+3 +0x1p+0 +0x1.8b7d3p+2 +0x1.192902p+5 +0x1.3d5386p+0 +0x1.9c779ap+1 +0x1.08257cp+0 +0x1.0b8a4p+2 +0x1.01afa4p+3 +0x1.e48b7ap-1 +0x1.f30a5cp+2 +0x1.0df814p+0 +0x1.2f28p-1 +0x1.983f46p+3 +0x1.009094p+6 +0x1.326a3ep-1 +0x1.9767e6p+0 +0x1.1027fp+0 +0x1.3274f8p-1 +0x1.197a9cp+1 +0x1.3807p+2 +0x1.90533p+4 +0x1.0332ecp+0 +0x1.3ca37p+0 +0x1p+0 +0x1p+0 +0x1.3ff4dcp+0 +0x1p+0 +0x1.900046p+0 +0x1p+0 +0x1.195576p+5 +0x1.aec2ecp+7 +0x1.65b984p+0 +0x1.74677p+3 +0x1.423322p+0 +0x1.aeef9ep+16 +0x1.0338c4p+0 +0x1.1ae22ap+8 +0x1.cc4adcp+0 +0x1.d20a9ep+0 +0x1.cdbefcp-45 +0x1.03b23cp+0 +0x1.25970cp+3 +0x1.e6b02ep-1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.000aa8p+0 +0x1.0054a4p+0 +0x1.06600ap+0 +0x1.b8601cp+6 +0x1.fea92cp+5 +0x1.6p+5 +0x1.c76586p+0 +0x1.90007ap+0 +0x1.ef2d1p-84 +0x1.03d5b6p+0 +0x1.0164ecp+0 +0x1.4441d8p+0 +0x1.005c42p+0 +0x1.046838p+0 +0x1.51f04ap+0 +0x1.cf822cp+0 +0x1.033b4ap+0 +0x1p+0 +0x1.091bep+0 +0x1p+0 +0x1.5bb2a4p+0 +0x1.01fe2cp+0 +0x1.2b96p+1 +0x1.242d9p+0 +0x1.42ade4p+0 +0x1p+0 +0x1.689714p+2 +0x1.4ac756p+0 +0x1p+0 +0x1.101ad8p+0 +0x1.6208e8p+41 +0x1.47091p+0 +0x1.3e28p+3 +0x1.04b70ep+0 +0x1p+0 +0x1.086c9p+0 +0x1.70eb62p+54 +0x1.dfb744p+4 +0x1p+0 +0x1.f302bcp-8 +0x1.8d5fd4p+6 +0x1.12d9a8p+0 +0x1.00a39p+0 +0x1p+0 +0x1.00003cp+0 +0x1.00031p+0 +0x1.58743ep+0 +0x1.003ae4p+0 +0x1.7de5cep+2 +0x1.096c7ep+0 +0x1.57e436p+1 +0x1.21fcb4p+2 +0x1.31297ap-1 +0x1p+0 +0x1.ab5fcp+16 +0x1.91e912p+42 +0x1.5cb206p+1 +0x1.000072p+0 +0x1.00f4d2p+0 +0x1.0ee52p+0 +0x1.000014p+0 +0x1.2f3a5ep-1 +0x1.3fc07cp+1 +0x1.64bd36p+1 +0x1.f48f56p-1 +0x1.0115f4p+0 +0x1.1650bcp+2 +0x1.013494p+0 +0x1p+0 +0x1.684e92p+0 +0x1.0063a4p+0 +0x1.3ca364p+0 +0x1.197a48p+1 +0x1.00a6f4p+0 +0x1.31ce92p-1 +0x1.fea91ep+5 +0x1.6dd5cep+5 +0x1.05035ep+8 +0x1.6d6acep+5 +0x1.8c4fa2p+5 +0x1.f4e59cp-12 +0x1.6330e4p+0 +0x1.01a9fep+0 +0x1.4f48e4p+0 +0x1.d589c6p+1 +0x1.5be04ap+15 +0x1.f9e2f2p-1 +0x1.294bdp+1 +0x1.8bf1p+5 +0x1.967eb8p-9 +0x1.018d04p+0 +0x1.00032cp+0 +0x1p+0 +0x1.ba21bcp+14 +0x1.8dd6bp+0 +0x1.7455a8p+3 +0x1p+0 +0x1.8e8a02p+15 +0x1.015f06p+0 +0x1.04a26p+8 +0x1.000c58p+0 +0x1.26a58cp+3 +0x1.2719bap-19 +0x1p+0 +0x1.05194cp+7 +0x1.34d9f4p+0 +0x1p+0 +0x1.029fa2p+0 +0x1.99a9dap+0 +0x1.cee06ep+0 +0x1.3e921ap+0 +0x1.9f8eep+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.13f606p+0 +0x1p+0 +0x1.0a176ep+2 +0x1.aa9c94p+7 +0x1.1211ep+0 +0x1.122594p+0 +0x1.b39642p+47 +0x1p+0 +0x1.000068p+0 +0x1.6600aep-12 +0x1.e0d6ecp+1 +0x1.0019ep+0 +0x1.34b8f4p-1 +0x1.581728p+2 +0x1.00016p+0 +0x1.12b1ep+8 +0x1.a679fp+14 +0x1.90005ap+4 +0x1.837996p-1 +0x1p+0 +0x1.0e2552p+1 +0x1.22160cp+9 +0x1p+0 +0x1.57e4b4p+1 +0x1p+0 +0x1.bf8d0cp+0 +0x1.d7e10ep+16 +0x1.06bcc8p+0 +0x1.133b12p+0 +0x1.1b6542p+6 +0x1p+0 +0x1.feddbcp-1 +0x1p+0 +0x1p+0 +0x1.2fd98ep-1 +0x1.03d5b6p+0 +0x1p+0 +0x1.db8a46p-1 +0x1.42e588p+0 +0x1.0ee1p+1 +0x1.361fep+0 +0x1.2f74a8p+0 +0x1p+0 +0x1.31596cp-1 +0x1.740a2p+3 +0x1p+0 +0x1.8dd672p+0 +0x1.00011cp+0 +0x1p+0 +0x1.000102p+0 +0x1.5cc2b2p+2 +0x1p+0 +0x1.17f4b4p+0 +0x1.619318p+12 +0x1.b14362p+0 +0x1.c1004ep+0 +0x1.318578p-1 +0x1.9728ecp+2 +0x1.25bdbcp+3 +0x1.37ac8ap+63 +0x1p+0 +0x1.41ef56p+2 +0x1.e65866p-1 +0x1p+0 +0x1.307e0ap+0 +0x1.ef570ep+54 +0x1.0290fap+1 +0x1.9dd308p+0 +0x1.21db9p+0 +0x1.00003cp+0 +0x1.eabf94p+0 +0x1.386614p+10 +0x1.f244dap+16 +0x1p+0 +0x1.00e094p+0 +0x1.5605e6p+1 +0x1.b16374p+2 +0x1.9a2d88p+0 +0x1.48748ap+9 +0x1p+0 +0x1.28e674p+0 +0x1.bf4324p+7 +0x1.2598c6p+3 +0x1.215484p+1 +0x1.05fb5p+51 +0x1.0000d8p+0 +0x1.f389dcp+6 +0x1.41a1bp+0 +0x1.001582p+0 +0x1.1928ecp+5 +0x1.00ff3ep+0 +0x1.3883c4p+13 +0x1.98b044p+2 +0x1.8a43eep+0 +0x1.733e8p+14 +0x1.73ebfcp+2 +0x1.0cd1fp+0 +0x1p+0 +0x1.af357p+5 +0x1.b2c586p+5 +0x1.470f58p+0 +0x1p+0 +0x1p+0 +0x1.0ffddep+0 +0x1.02c422p+1 +0x1.56c4a6p+1 +0x1.492014p-47 +0x1.192862p+5 +0x1p+0 +0x1.c7e222p+7 +0x1p+0 +0x1p+0 +0x1.1a0d3p+49 +0x1.946148p+0 +0x1.524f6ap+2 +0x1.31566ep-1 +0x1.000198p+0 +0x1.3d7efcp+3 +0x1.000264p+0 +0x1.4ed7ccp+0 +0x1.b667ecp+0 +0x1.81940ep+1 +0x1p+0 +0x1.088e6cp+0 +0x1.065bbcp+1 +0x1.009ae4p+1 +0x1.008bfp+6 +0x1.e9f5acp+7 +0x1.1e1c44p+8 +0x1.992348p+0 +0x1.3162fp+0 +0x1.fb0e1ap+48 +0x1.8bf0acp+5 +0x1p+0 +0x1.1f57b2p+60 +0x1.011f3p+0 +0x1.3af642p+0 +0x1.ccae9p+46 +0x1.21325cp+0 +0x1.07743p+7 +0x1.1ae49ep+8 +0x1.00006ap+0 +0x1.1928aap+5 +0x1.838206p-1 +0x1p+0 +0x1.00e9e8p+0 +0x1.4684cap+0 +0x1.02568p+0 +0x1.5efc62p+1 +0x1p+0 +0x1.000352p+0 +0x1.0578cap+0 +0x1.0039ecp+0 +0x1.2fc412p-1 +0x1.4a939ap+1 +0x1.ff27ep+5 +0x1.091a62p+0 +0x1.08c012p+0 +0x1.67c8p+4 +0x1.e26b74p-48 +0x1p+0 +0x1.283076p+3 +0x1.2fe494p-1 +0x1.4dcd9ep+5 +0x1p+0 +0x1.cdf4e4p+7 +0x1p+0 +0x1.c77d16p+1 +0x1.fccf76p-1 +0x1p+0 +0x1.120a84p+0 +0x1.054cdep+0 +0x1.002a0cp+0 +0x1.063b76p+0 +0x1.0000d8p+0 +0x1.30cedep-1 +0x1.003884p+0 +0x1p+0 +0x1.e0065cp-1 +0x1.693bd2p+15 +0x1.0fadc2p+0 +0x1.415d06p+0 +0x1.0002ecp+0 +0x1.27ce08p+0 +0x1.3b9762p+0 +0x1.2fb36p+2 +0x1.02c8f8p+0 +0x1.629facp+50 +0x1.281c56p+3 +0x1.4a93c8p+1 +0x1.0e6cacp-1 +0x1.f9ef4ap+0 +0x1.44f78ap+2 +0x1.9a1e18p+0 +0x1p+0 +0x1.3e566p+3 +0x1.000128p+0 +0x1p+0 +0x1.112c38p+0 +0x1.03d2dap+0 +0x1.5fb222p+12 +0x1.1f4b96p+0 +0x1.01422p+1 +0x1.ee5728p+63 +0x1.4bcdd8p+1 +0x1p+0 +0x1.30e0e4p-1 +0x1.6a36b2p+0 +0x1.00016cp+0 +0x1.04b966p+0 +0x1.106e16p+16 +0x1p+0 +0x1.1233d2p+0 +0x1p+0 +0x1.15d1cap+1 +0x1.137c02p+8 +0x1.00001ap+0 +0x1.07ab74p+0 +0x1.800b4ep-1 +0x1.55047p+0 +0x1.90017ap+4 +0x1.5c9898p+1 +0x1.8ce4ccp+6 +0x1p+0 +0x1.6ee34p+0 +0x1.bf600cp+0 +0x1.f13a7ep+8 +0x1.00015cp+0 +0x1.b9c51ep+12 +0x1.740826p+3 +0x1.c29e5p+1 +0x1.f56ba8p-1 +0x1.37fe18p+2 +0x1.190eap+0 +0x1.419f1cp+0 +0x1p+0 +0x1p+0 +0x1.20687ep+8 +0x1.938ecap+4 +0x1.01dd1cp+0 +0x1.bbe888p+7 +0x1.09d802p+0 +0x1.cf3b8p+0 +0x1.ea0d98p-1 +0x1.172472p+6 +0x1p+0 +0x1.61dce4p+1 +0x1.20b4fcp+0 +0x1.00038cp+0 +0x1p+0 +0x1.0822p+0 +0x1.9966ep+2 +0x1.21f47cp+0 +0x1.3a9762p+0 +0x1.8c4e0cp+5 +0x1p+0 +0x1.61878cp+12 +0x1.3ca348p+0 +0x1.289028p+0 +0x1.06e004p+0 +0x1.02b4b4p+0 +0x1.144eeep+1 +0x1.30a14ap-1 +0x1.07652p+0 +0x1p+0 +0x1.2ef288p+0 +0x1.1ba73cp+5 +0x1.48c714p+2 +0x1.25c508p+3 +0x1.b14382p+0 +0x1.b39acep+0 +0x1.0001c2p+0 +0x1.996938p+3 +0x1p+0 +0x1.e49b2ep+7 +0x1.000436p+0 +0x1.34712p+0 +0x1.47089p+0 +0x1.0353b8p-49 +0x1.2a818p+2 +0x1.00058p+0 +0x1.8a5a7ep+51 +0x1p+0 +0x1.8dbf04p+0 +0x1.5004d8p+61 +0x1.9557b2p+1 +0x1.0fa92cp+0 +0x1.16984ep+8 +0x1.72bd7ap+1 +0x1.980f0cp+1 +0x1.ae63fp+14 +0x1p+0 +0x1.085224p+0 +0x1.d8889ap-1 +0x1.1d3ff6p+4 +0x1.02c6ecp+1 +0x1.73eb4ep+2 +0x1.1916fp+4 +0x1.4a04e8p+5 +0x1.134906p+1 +0x1.0002dp+0 +0x1p+0 +0x1.32db7p+0 +0x1.0105b8p+0 +0x1.09f78p+0 +0x1.1d3e78p+4 +0x1.41b184p+0 +0x1.134914p+1 +0x1.410e6ep+1 +0x1.312a4ap-1 +0x1.7308f4p+1 +0x1p+0 +0x1.0afbe8p+0 +0x1p+0 +0x1.00026ap+0 +0x1.2ee012p+0 +0x1.001318p+0 +0x1.af1034p+4 +0x1.687b1cp-24 +0x1.a93ap+2 +0x1.084598p+0 +0x1.37031ap-1 +0x1.c046ep+5 +0x1.79a75ep+2 +0x1.46a9c8p+1 +0x1.000766p+0 +0x1.245d98p+0 +0x1.19287ap+5 +0x1.6a0fbep+0 +0x1p+0 +0x1.011424p+0 +0x1.879f4cp+0 +0x1p+0 +0x1p+0 +0x1.4ca7ecp-51 +0x1.5818c6p+2 +0x1p+0 +0x1.b4c9fap+7 +0x1.b14384p+0 +0x1.082fdp+0 +0x1.085672p+8 +0x1.918f3cp+6 +0x1p+0 +0x1.45623ep+0 +0x1.95515cp+2 +0x1.000068p+0 +0x1.31f33ap-1 +0x1.f9eed8p+0 +0x1.91b218p+6 +0x1.331446p-1 +0x1.000202p+0 +0x1p+0 +0x1.3cdfb8p-1 +0x1p+0 +0x1.08fb58p+7 +0x1.4dde38p+5 +0x1p+0 +0x1.0053a4p+0 +0x1p+0 +0x1.31e138p+7 +0x1p+0 +0x1.01c35cp+0 +0x1.dba85cp+7 +0x1.03682cp+2 +0x1.000108p+0 +0x1.bff348p+55 +0x1.582dbp+1 +0x1.31158p+0 +0x1.760bep+44 +0x1.e43226p+7 +0x1.082008p+0 +0x1.a03e4cp+7 +0x1.00b984p+0 +0x1.20c58ep+1 +0x1.221c1p+0 +0x1.594056p+7 +0x1.aabf58p+2 +0x1p+0 +0x1.b142e4p+0 +0x1.8bf166p+5 +0x1p+0 +0x1.000168p+0 +0x1.06c69cp+0 +0x1.900166p+4 +0x1.621b64p+12 +0x1.b142eep+0 +0x1p+0 +0x1.31c642p-1 +0x1p+0 +0x1.65b9cap+0 +0x1.4adbbep+0 +0x1p+0 +0x1.858ea2p+0 +0x1.076d06p+0 +0x1.000dap+0 +0x1.70cd96p+2 +0x1.347a2p-1 +0x1.73c75cp+2 +0x1p+0 +0x1.180c6ep+8 +0x1p+0 +0x1.1a32dcp+5 +0x1.342abp-1 +0x1.4a08p+5 +0x1.000484p+0 +0x1.e498b4p+7 +0x1.91e072p+0 +0x1p+0 +0x1.9ab2a8p+0 +0x1.0001dp+0 +0x1.6ab22p+0 +0x1.00036p+0 +0x1.00042cp+0 +0x1.0012a2p+0 +0x1.f2b45cp+0 +0x1.31b8fep-1 +0x1.2a3f48p+1 +0x1p+0 +0x1.d8ecc8p+49 +0x1.b143b2p+0 +0x1.4f7516p+0 +0x1.09a35cp+0 +0x1.000ap+0 +0x1.ad259ap+5 +0x1.8d9b38p-18 +0x1.92ef44p+0 +0x1.7407ep+3 +0x1.bcb74cp+7 +0x1.57d22p+0 +0x1.610e16p+0 +0x1.2ff3fap-1 +0x1.00aefcp+0 +0x1.6aaf1cp+0 +0x1.000298p+0 +0x1.10b236p+0 +0x1.2b6a4p+0 +0x1.25c852p+3 +0x1.000354p+0 +0x1p+0 +0x1.4fe4c2p+2 +0x1.8ea358p+6 +0x1.cd77f6p+2 +0x1.0000aap+0 +0x1.8c2a1ep-19 +0x1.000264p+0 +0x1.03001p+0 +0x1.0c772cp+0 +0x1.daea4p+4 +0x1p+0 +0x1.0f2d5ep+0 +0x1p+0 +0x1.1604d6p+0 +0x1.2f7b08p-1 +0x1.0002f4p+0 +0x1p+0 +0x1.91aaf8p+1 +0x1.896624p+0 +0x1.0024c2p+0 +0x1.0fde8cp+1 +0x1.3a7214p+16 +0x1.01ff8p+0 +0x1.02458p+1 +0x1.1d3f4cp+4 +0x1p+0 +0x1.c0d546p+1 +0x1.0ac2d4p+54 +0x1p+0 +0x1p+0 +0x1.75e65p+55 +0x1p+0 +0x1.010256p+0 +0x1.68165p+53 +0x1p+0 +0x1.013c3p+0 +0x1.bc712ep+13 +0x1p+0 +0x1.71d1cp+5 +0x1.49c482p+0 +0x1.00665p+0 +0x1.386324p+1 +0x1.385c4ap-1 +0x1p+0 +0x1.379e5p+0 +0x1.232592p+8 +0x1p+0 +0x1.000338p+0 +0x1p+0 +0x1p+0 +0x1.055404p+0 +0x1.208ef8p+1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.015d52p+0 +0x1.9ea35cp+1 +0x1.dc7eb4p+18 +0x1p+0 +0x1p+0 +0x1.b3d24ep+7 +0x1.fba328p+8 +0x1.00c7fp+0 +0x1.0d1acep+8 +0x1.779a24p+2 +0x1p+0 +0x1.19499ep+0 +0x1.25ddcep+3 +0x1.78346cp+3 +0x1.428e7ap+49 +0x1.003dp+0 +0x1p+0 +0x1.313dbcp-1 +0x1.6fef7p+1 +0x1p+0 +0x1.2ff116p-1 +0x1.00f598p+0 +0x1.45ab88p+0 +0x1p+0 +0x1.a93a36p+2 +0x1p+0 +0x1.54bb7p+2 +0x1p+0 +0x1.00004cp+0 +0x1.edac12p+0 +0x1.40f4fap+0 +0x1.45c0bcp+0 +0x1.0a2626p+0 +0x1.bfa67ap+51 +0x1.933f18p+0 +0x1p+0 +0x1.3f3fe8p+0 +0x1.006fc8p+0 +0x1.c04aecp+1 +0x1.0afc4p+0 +0x1.9b2f1ep+3 +0x1.11a134p+3 +0x1.0624dep-11 +0x1.eabf94p+0 +0x1.8950d8p+1 +0x1.35eba2p-1 +0x1.11c438p+0 +0x1.02073p+0 +0x1.483096p+0 +0x1.484bf4p+2 +0x1.1b86dcp+0 +0x1.0d3c56p+0 +0x1.0000e4p+0 +0x1.a93b64p+2 +0x1.b8db1cp+1 +0x1.308c0ep-1 +0x1p+0 +0x1.1e84fp+0 +0x1.3fc808p+0 +0x1.19179ap+4 +0x1p+0 +0x1.f1d3a4p+7 +0x1.273d1ep+1 +0x1.000a16p+0 +0x1.42ead6p+0 +0x1.b8c318p+1 +0x1.7226dp+1 +0x1.43af5cp+0 +0x1.450224p+0 +0x1.000234p+0 +0x1.358bc4p-1 +0x1.0000acp+0 +0x1.02ef5cp+0 +0x1.1d16fap+8 +0x1p+0 +0x1.0a9be6p+0 +0x1.2221d2p+8 +0x1.45abbp+0 +0x1p+0 +0x1.b787f6p-12 +0x1.960416p+0 +0x1.0af8b6p+1 +0x1.232048p+64 +0x1.f6b2fp+0 +0x1p+0 +0x1.02fc3ep+0 +0x1.19292ep+5 +0x1.00fdcap+0 +0x1.51ac2p+1 +0x1.020b04p+0 +0x1.3fe772p+1 +0x1p+0 +0x1.3a87dap+0 +0x1.00dbf8p+0 +0x1.dc825cp+1 +0x1.051eap+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.000bp+0 +0x1.004874p+0 +0x1.ed7906p+14 +0x1.ba64fcp+12 +0x1.03e86ap+0 +0x1.5cdd2p+2 +0x1.2fc1c6p-1 +0x1.08a1b8p+0 +0x1p+0 +0x1.4e97bp+62 +0x1.364392p+0 +0x1.000236p+0 +0x1.32f478p-1 +0x1.362732p+4 +0x1.1d3f0ep+4 +0x1.205236p+44 +0x1p+0 +0x1.93afd4p+2 +0x1.2f40ecp-1 +0x1p+0 +0x1.0fe4a4p+1 +0x1.9975e8p+64 +0x1.4a93fap+1 +0x1.259756p+3 +0x1.1e1e64p+8 +0x1.000048p+0 +0x1p+0 +0x1.2f1f74p-1 +0x1.7a124ap+0 +0x1.5e3f8ep+2 +0x1.e58cd8p-1 +0x1.b3857ep+0 +0x1.6f4da4p+0 +0x1p+0 +0x1.44caaep+0 +0x1.6831b2p+0 +0x1.7537bep+1 +0x1p+0 +0x1.003054p+0 +0x1.4934p+2 +0x1.00005p+0 +0x1.000098p+0 +0x1.091ebcp+0 +0x1.465e2cp+9 +0x1.00017p+0 +0x1p+0 +0x1.31ab6cp-1 +0x1p+0 +0x1p+0 +0x1.f2386ep+57 +0x1.147d32p+3 +0x1.e480eep+7 +0x1.03b3b2p+0 +0x1.02035cp+0 +0x1.11d934p+3 +0x1.5776d8p+53 +0x1.2c73p+0 +0x1.63073ap+9 +0x1.2041aep+8 +0x1p+0 +0x1.00594cp+0 +0x1.3ee136p+0 +0x1p+0 +0x1.09548p+1 +0x1.05f1f4p-11 +0x1.0002a4p+0 +0x1.16ac18p+3 +0x1.b8531ep+7 +0x1.0fd73cp+1 +0x1.011f64p+0 +0x1.0ff65ep+0 +0x1.b1ecfp+4 +0x1.8f0888p+0 +0x1.f95e02p-1 +0x1p+0 +0x1.9000cep+0 +0x1.e9b4fep+52 +0x1.009838p+0 +0x1.5ef598p+1 +0x1.a6ad24p+7 +0x1.4913c6p+0 +0x1p+0 +0x1.3d7314p+0 +0x1p+0 +0x1.a591c8p+0 +0x1.017966p-13 +0x1.9825cep+3 +0x1.192898p+5 +0x1.cddc2p+42 +0x1p+0 +0x1p+0 +0x1.0dde0ap+8 +0x1.0e56e8p+1 +0x1.a6fbcep+3 +0x1.b92cc8p+7 +0x1.d57268p+0 +0x1.b8f132p+1 +0x1.4c257ap+0 +0x1.00000ap+0 +0x1.38635p+1 +0x1.1cc07ap+45 +0x1.71ff7ep+1 +0x1.ef8b44p+0 +0x1.6cf93ep+51 +0x1p+0 +0x1p+0 +0x1.11f506p+8 +0x1.77844ap+0 +0x1p+0 +0x1.bdd978p+7 +0x1.00006ap+0 +0x1.0e2602p+1 +0x1.045486p+0 +0x1.0002c8p+0 +0x1.4d67c8p+1 +0x1.e5b314p-1 +0x1.6a374cp+0 +0x1.99db52p+0 +0x1.f9eeap-1 +0x1.bf7f2cp+5 +0x1.da61b4p+4 +0x1.488ff4p+0 +0x1.003p+0 +0x1p+0 +0x1.02ffcp+0 +0x1.d09a76p+1 +0x1.225a2cp+0 +0x1.0637f2p+0 +0x1.b3893p+0 +0x1.00005p+0 +0x1.bcc5ccp+59 +0x1p+0 +0x1.01f38ep+0 +0x1.a720ecp+7 +0x1.05390cp+1 +0x1.bf3ffep+2 +0x1.6b9574p+0 +0x1.388f0cp+11 +0x1.29a6aap+0 +0x1.31e90ep-1 +0x1p+0 +0x1p+0 +0x1.2f1498p-1 +0x1.0000eep+0 +0x1p+0 +0x1.3190e2p-1 +0x1p+0 +0x1.7703c2p+1 +0x1.0ffd1cp-24 +0x1p+0 +0x1p+0 +0x1.f5c25p-24 +0x1.7407c8p+3 +0x1.45abd2p+0 +0x1.1304ecp+0 +0x1p+0 +0x1.0002f4p+0 +0x1.cd1cdap+1 +0x1.6ef2fp+15 +0x1.0002cap+0 +0x1.dc83cp+1 +0x1.0000ccp+0 +0x1.0093cep+0 +0x1.0066bap+0 +0x1.002dp+0 +0x1.0e6c8p+0 +0x1.7be50ap+16 +0x1.00b348p+0 +0x1.089b3p+16 +0x1.98b07cp+2 +0x1.3389b2p+0 +0x1.a41e1ep+7 +0x1.7195dep+5 +0x1.08b45cp+0 +0x1.29c1eap+56 +0x1.740b96p+3 +0x1.71fef4p+1 +0x1.07ba2cp+0 +0x1.5ee4a2p+1 +0x1p+0 +0x1.f9599cp-1 +0x1.b9154ep+14 +0x1.f8911cp+0 +0x1p+0 +0x1.373e1p+4 +0x1p+0 +0x1.00146cp+0 +0x1.4a05acp+5 +0x1.1928aap+5 +0x1.060cecp+0 +0x1.773996p+0 +0x1.af11c2p-11 +0x1p+0 +0x1.3f7d98p+7 +0x1.1361ep+52 +0x1.f9f064p+0 +0x1p+0 +0x1.a9b908p+7 +0x1.c55b46p+0 +0x1p+0 +0x1.682ec4p+46 +0x1.00003p+0 +0x1p+0 +0x1.2fdba4p-1 +0x1.9beca4p+0 +0x1.0004a8p+0 +0x1.2fb262p-1 +0x1.8bf118p+5 +0x1.0001aap+0 +0x1.31a74p-1 +0x1.25db7ep+3 +0x1p+0 +0x1.197a7cp+1 +0x1p+0 +0x1.2d315cp+0 +0x1.0024f8p+0 +0x1.2a7f04p+1 +0x1p+0 +0x1p+0 +0x1.01211cp+0 +0x1.f11d7ep-1 +0x1.d4f718p+2 +0x1.b233dep+0 +0x1.6d6b1cp+5 +0x1.7724fep+15 +0x1p+0 +0x1.a86fbap+7 +0x1p+0 +0x1p+0 +0x1.4aa984p+49 +0x1.000054p+0 +0x1p+0 +0x1.33d3f4p-1 +0x1p+0 +0x1.1b0cd8p+6 +0x1.000958p+0 +0x1p+0 +0x1.49ef4ep+4 +0x1.7cc648p+1 +0x1p+0 +0x1.23470ap+0 +0x1.3223a4p+0 +0x1p+0 +0x1.4d6912p+0 +0x1.51e25p+0 +0x1p+0 +0x1.34962cp+0 +0x1.0fdd0cp+1 +0x1.0001d8p+0 +0x1.38637cp+1 +0x1.9de754p+3 +0x1.8e020cp+5 +0x1.ad9158p+4 +0x1.094afap+0 +0x1.ea949ep+52 +0x1.ec6aa4p+1 +0x1.1a5e6cp+4 +0x1.07ed56p+0 +0x1.711ffp+0 +0x1p+0 +0x1.062702p+8 +0x1.233ffap+18 +0x1.10c252p+7 +0x1.002a14p+0 +0x1.98f468p+0 +0x1.833884p+0 +0x1p+0 +0x1.9179acp+4 +0x1.d944c4p-1 +0x1.00bc84p+0 +0x1p+0 +0x1.46c0aep+0 +0x1.ad157p+4 +0x1.13492cp+1 +0x1.4b0ceep+0 +0x1.000246p+0 +0x1p+0 +0x1p+0 +0x1.176dbep+0 +0x1.52e1b8p+0 +0x1.050ab8p+0 +0x1p+0 +0x1.ef2d1p-84 +0x1.d0999p+1 +0x1.00b594p+0 +0x1.19ae42p+54 +0x1p+0 +0x1p+0 +0x1.bf05cap-56 +0x1.fba48p+0 +0x1.19a5ecp+4 +0x1.000518p+0 +0x1.cd1cc6p+1 +0x1.0008d2p+0 +0x1.00291cp+0 +0x1.01ae5cp+0 +0x1.18229cp+0 +0x1.0000d6p+0 +0x1.00017p+0 +0x1.1083fep-25 +0x1p+0 +0x1.7d379ap+9 +0x1.2f5e0ep-1 +0x1.365e38p+0 +0x1.000912p+0 +0x1.8p+3 +0x1.13e39cp+1 +0x1p+0 +0x1.0ba4aep+0 +0x1.9deafcp+3 +0x1.2fead4p-1 +0x1p+0 +0x1.11a49cp+16 +0x1.968f3ap+62 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.b85f8ep+6 +0x1.141a8ep+8 +0x1.0564ecp+0 +0x1.c6b168p+2 +0x1.05b106p+8 +0x1.000298p+0 +0x1p+0 +0x1.0001fap+0 +0x1.000164p+0 +0x1.31a84p+0 +0x1p+0 +0x1.403f5cp+5 +0x1.ea62dep-1 +0x1p+0 +0x1.131eeep+1 +0x1.3625d8p+4 +0x1.066f0cp+0 +0x1.e7a64p+7 +0x1.047e06p+0 +0x1p+0 +0x1.32aad8p-1 +0x1p+0 +0x1.000118p+0 +0x1.1b0d0cp+6 +0x1.a11c9p+0 +0x1.a2588ep+54 +0x1p+0 +0x1p+0 +0x1.09ffa8p+8 +0x1.bb2a7cp+5 +0x1p+0 +0x1.a1f9p+0 +0x1p+0 +0x1.f3d4b4p-1 +0x1.4dc16ap+5 +0x1.3b2274p+4 +0x1.457d56p+0 +0x1.01cfcp+0 +0x1p+0 +0x1.a93982p+2 +0x1.04054cp+0 +0x1.0080fap+0 +0x1.dc801cp+0 +0x1.0b77bep+1 +0x1.013094p+0 +0x1.0001e8p+0 +0x1.02e2ep+0 +0x1p+0 +0x1.000094p+0 +0x1.fb4382p-1 +0x1.00019p+0 +0x1.0007b8p+0 +0x1.127e1ap+8 +0x1p+0 +0x1p+0 +0x1.0e25cp+1 +0x1.2f4b78p+1 +0x1.015b26p+8 +0x1.0eb20cp+0 +0x1.081558p+7 +0x1.42ff58p+0 +0x1.1c5d1p+6 +0x1.887b42p+14 +0x1.02904p+1 +0x1.7ce25ap+1 +0x1.f96d6p-1 +0x1.5c64f4p+0 +0x1.0005c8p+0 +0x1.78e9d4p-33 +0x1.da628ep+4 +0x1.003634p+0 +0x1.3184d6p-1 +0x1.bd96f4p+6 +0x1.ba5156p+12 +0x1.8df4acp+0 +0x1p+0 +0x1.a3b92p+7 +0x1.3e4f26p+11 +0x1.543868p+4 +0x1.eabfe6p+0 +0x1.0073e6p+0 +0x1.0f2bdep+8 +0x1.3e3c3ep+13 +0x1.3884dp+6 +0x1p+0 +0x1.690fecp+0 +0x1.dfa074p-1 +0x1.000638p+0 +0x1.4a93acp+1 +0x1.8dd68ap+0 +0x1.0048dcp+0 +0x1.002f8ep+0 +0x1.00015p+0 +0x1.45abbcp+0 +0x1.f3f306p-1 +0x1.1b639p+0 +0x1.ef2d1p-84 +0x1.abd54p+0 +0x1.36f8aap+2 +0x1.e317cep-1 +0x1.36f9cap+2 +0x1.530ddp+0 +0x1.2f74bp+0 +0x1.3c4448p+0 +0x1.0718dcp+0 +0x1.0001bp+0 +0x1p+0 +0x1.1d3ebap+4 +0x1.42e55ap+0 +0x1.3ace3ep+50 +0x1.5b5108p+1 +0x1.13527cp+3 +0x1.0002ap+0 +0x1.6f3ebcp+2 +0x1.b0af06p+7 +0x1.016c28p+0 +0x1p+0 +0x1.4542a6p+0 +0x1p+0 +0x1.6120cep+55 +0x1.02a2p+0 +0x1.0714d6p+15 +0x1.21293ep+0 +0x1.023b38p+0 +0x1.000d12p+0 +0x1.4d9f06p+15 +0x1p+0 +0x1.dd3bb4p-1 +0x1p+0 +0x1.00029ep+0 +0x1.eabfa8p+0 +0x1.362a2ep+0 +0x1.000a5ap+48 +0x1.dfbac8p+4 +0x1.259742p+3 +0x1.0000acp+0 +0x1.00cc58p+1 +0x1.49155ep+0 +0x1p+0 +0x1p+0 +0x1.30d9ap-1 +0x1.02fc6p+0 +0x1.3cac76p+0 +0x1.b8c472p+1 +0x1.8bf1bcp+5 +0x1.2cd56p+0 +0x1.1d37a6p+0 +0x1p+0 +0x1.6b03dep+2 +0x1p+0 +0x1.4bc794p+0 +0x1.dc56e6p+1 +0x1.b1432ap+0 +0x1.5a6574p+2 +0x1.a21356p+4 +0x1.6269ep+64 +0x1.0000dp+0 +0x1.10766cp+7 +0x1.0096e6p+0 +0x1.adf486p+0 +0x1.309de8p-1 +0x1.085fb4p+0 +0x1.3afb0ep+0 +0x1.0002a2p+0 +0x1.085208p+0 +0x1.213daap+8 +0x1.000a5ap+0 +0x1.503f0cp+0 +0x1.000428p+0 +0x1.7ee7d4p+16 +0x1.8e5064p+61 +0x1.3f6054p+7 +0x1.3a78a6p+0 +0x1.0a197ap+0 +0x1.016ea8p+0 +0x1.0bbb28p+8 +0x1.000014p+0 +0x1.0010d4p+0 +0x1.5983f8p-26 +0x1.2dddep+0 +0x1.3f4af4p+0 +0x1.15f078p+0 +0x1p+0 +0x1.8ffae8p-20 +0x1.0000a4p+0 +0x1.4f32a8p+0 +0x1.8bf1f2p+5 +0x1.0000fp+0 +0x1.1e9612p+0 +0x1.000512p+0 +0x1.000184p+0 +0x1p+0 +0x1.4a071ap+5 +0x1.316586p-1 +0x1.026922p+0 +0x1.9323dcp+3 +0x1.0530acp+0 +0x1.18125p+0 +0x1.e39054p-1 +0x1.3ad2p+11 +0x1.005ad4p+0 +0x1.000208p+0 +0x1.b85f4cp+6 +0x1.002d02p+0 +0x1p+0 +0x1p+0 +0x1.da3556p+8 +0x1p+0 +0x1.02c298p+0 +0x1.11a35ep+3 +0x1.4a0a02p+1 +0x1.02741p+2 +0x1p+0 +0x1.2749a2p+0 +0x1.45abacp+0 +0x1p+0 +0x1.3920bcp+13 +0x1.000054p+0 +0x1.4ceda8p+0 +0x1p+0 +0x1.390b2p+7 +0x1.66764ep+7 +0x1p+0 +0x1.e11478p+7 +0x1.0f264cp+0 +0x1p+0 +0x1.2f7ec2p-1 +0x1p+0 +0x1.0ac6fcp+8 +0x1.3ca396p+0 +0x1.9ad138p+5 +0x1.e5b8acp+7 +0x1.0000b8p+0 +0x1.f14fd6p-11 +0x1.00009p+0 +0x1.01571ep+0 +0x1.17c726p+0 +0x1.00019p+0 +0x1.362514p+4 +0x1.004efp+0 +0x1.003f5cp+0 +0x1.43c41cp+0 +0x1p+0 +0x1.3e6c78p+12 +0x1.000c5cp+0 +0x1.3e795cp+6 +0x1.b825a6p+7 +0x1.ace64p+1 +0x1.36f8dp+2 +0x1.587484p+0 +0x1.94967ap+14 +0x1.af98e6p+17 +0x1.6488b6p+0 +0x1.1d3e98p+4 +0x1.009978p+0 +0x1.377d08p+0 +0x1.2fdc0ep+0 +0x1.045768p+0 +0x1.f9ef1ap+0 +0x1.003e4ap+0 +0x1.3e825p+9 +0x1.38da1p+0 +0x1p+0 +0x1p+0 +0x1.00d4a2p+0 +0x1.3e6838p+12 +0x1.0c24a8p+0 +0x1.00012cp+0 +0x1p+0 +0x1p+0 +0x1.001188p+0 +0x1.30be32p-1 +0x1.d20bfcp+0 +0x1.000314p+0 +0x1.467b6ap+1 +0x1.b14436p+0 +0x1.be3eccp+7 +0x1.035cc4p+0 +0x1p+0 +0x1.358ca4p+7 +0x1p+0 +0x1.052ef8p+8 +0x1.08ac7ep+0 +0x1p+0 +0x1.ef2d1p-84 +0x1p+0 +0x1.388d04p+56 +0x1.003836p+0 +0x1.65f1ecp+0 +0x1.5b141p+47 +0x1.fadea2p+0 +0x1.d1e872p+59 +0x1p+0 +0x1.acd704p+0 +0x1.d46c0ap-34 +0x1p+0 +0x1.015a84p+0 +0x1p+0 +0x1p+0 +0x1.02161ep+0 +0x1p+0 +0x1.02283cp+0 +0x1.2fb3d8p+2 +0x1.3b1854p+4 +0x1.9a69d8p+48 +0x1.f9ef08p+0 +0x1.7e849cp+3 +0x1.eabffp+0 +0x1.054884p+0 +0x1.9faadcp+7 +0x1.01dbfep+0 +0x1.a9a6aap+1 +0x1p+0 +0x1.ae82b2p+5 +0x1.423f6p-20 +0x1.42e57p+0 +0x1.41466p+2 +0x1p+0 +0x1.49ef3ep+4 +0x1.f264ccp-1 +0x1.0084dap+0 +0x1.07aabap+0 +0x1p+0 +0x1p+0 +0x1.009f06p+0 +0x1.008b44p+0 +0x1.3e2b8cp+5 +0x1.000324p+0 +0x1.0c4158p+0 +0x1.32644cp-1 +0x1.1929dp+5 +0x1.8ac548p+4 +0x1.01b036p+0 +0x1.7e3a98p+5 +0x1.34bc8p-1 +0x1.b14336p+0 +0x1.0cb4e2p+0 +0x1.b931bp+12 +0x1.2358fp+1 +0x1.f23b6cp+51 +0x1p+0 +0x1.16fa4cp+4 +0x1.0baf84p+0 +0x1.a856a8p+5 +0x1.066f6p+0 +0x1p+0 +0x1p+0 +0x1.20b7bp+0 +0x1.3fe392p+0 +0x1.388ae2p+0 +0x1.00035cp+0 +0x1.3adcf2p+12 +0x1.30393p-1 +0x1.e17338p+1 +0x1.aa6b1ap+7 +0x1.0000b6p+0 +0x1p+0 +0x1.345b46p-1 +0x1.74921cp+8 +0x1.b29bd6p+7 +0x1p+0 +0x1.77c706p+2 +0x1.c4d8ecp+65 +0x1.8d98bp+0 +0x1.8b8002p-6 +0x1.3881ecp+15 +0x1.010cd4p+0 +0x1.c8fdaap+7 +0x1.72b958p+2 +0x1.965c1cp+3 +0x1p+0 +0x1p+0 +0x1.2a515cp+0 +0x1.cd1e9p+1 +0x1.006674p+0 +0x1p+0 +0x1.66e4cp+2 +0x1.13aa9ep+8 +0x1p+0 +0x1.13101cp+1 +0x1.0004ecp+0 +0x1p+0 +0x1.c51ad2p+7 +0x1p+0 +0x1.2a0908p+8 +0x1.000182p+0 +0x1.ac40fcp+2 +0x1.30f308p-1 +0x1p+0 +0x1p+0 +0x1.1ceeaep+7 +0x1.0000a4p+0 +0x1.f407acp+7 +0x1.36f98ep+2 +0x1.1c60a8p+10 +0x1.617238p+12 +0x1p+0 +0x1.48fb3ap+0 +0x1p+0 +0x1.000d5p+0 +0x1.33833cp-1 +0x1p+0 +0x1.41be46p+51 +0x1.238e58p+0 +0x1.00266cp+0 +0x1.9fc4bp+58 +0x1.000618p+0 +0x1.88a592p+48 +0x1.0001c8p+0 +0x1p+0 +0x1.51c89cp+0 +0x1.317344p+7 +0x1.308e8ap-1 +0x1p+0 +0x1.0387e6p+0 +0x1.454a32p+0 +0x1.74a828p+7 +0x1.f57daep-8 +0x1.287a44p+0 +0x1.b84b08p+2 +0x1.27fc5ap+0 +0x1p+0 +0x1.0e423p+1 +0x1p+0 +0x1.079ddp+0 +0x1.f49a74p+14 +0x1.0f47bp+0 +0x1.9000bap+4 +0x1.000244p+0 +0x1p+0 +0x1.4a38ep+0 +0x1.36f8bp+2 +0x1.6bf43cp+0 +0x1.a3a9f4p+1 +0x1.001d24p+0 +0x1.106f8ap+0 +0x1.0003ep+0 +0x1.00025p+0 +0x1.89be24p+0 +0x1.3d65b4p+6 +0x1.44b46ep+0 +0x1.5caecap+1 +0x1.00327cp+2 +0x1.54bbep+2 +0x1.2597aap+3 +0x1.059a5ap-11 +0x1.43884ep+2 +0x1p+0 +0x1.c04628p+9 +0x1p+0 +0x1.c1b9bp-49 +0x1.73ed24p+2 +0x1.000598p+0 +0x1.44105p+0 +0x1.b7c192p+5 +0x1.312178p-1 +0x1p+0 +0x1.f9efc2p+0 +0x1.014252p-51 +0x1.017a66p+0 +0x1.1f3de4p+8 +0x1.02b182p+0 +0x1.257372p+0 +0x1.93944ap+48 +0x1.e2305cp+1 +0x1.3e0ee6p-8 +0x1.00011ep+0 +0x1.a31448p+5 +0x1.8c9ca6p+48 +0x1.194216p+0 +0x1p+0 +0x1.5cc2ap+2 +0x1p+0 +0x1.506fe6p+49 +0x1.2588fp+0 +0x1.26ffaep+1 +0x1p+0 +0x1p+0 +0x1.4ff01ap+66 +0x1.00009cp+0 +0x1.000f38p+0 +0x1.00e4d6p+0 +0x1.001d5cp+0 +0x1.02b29cp+50 +0x1.358d1p+7 +0x1.3eff02p+8 +0x1.900058p+4 +0x1.3ae0bcp+13 +0x1.034d3ep+0 +0x1.b9346p+5 +0x1p+0 +0x1.71b9cp+0 +0x1.2f7456p+0 +0x1.47ccf2p+0 +0x1.498974p+0 +0x1.046cb8p+0 +0x1.458c62p+1 +0x1.a93bf4p+2 +0x1.0f113ap+8 +0x1p+0 +0x1.04ae52p+0 +0x1.7c2a68p+0 +0x1.3b24fep+9 +0x1.04ef5p-11 +0x1.11a28ap+3 +0x1p+0 +0x1.056b24p+1 +0x1.0000e4p+0 +0x1.2c01cap+0 +0x1p+0 +0x1p+0 +0x1.c61f72p+15 +0x1p+0 +0x1.02fc2ap+0 +0x1p+0 +0x1.093acep+0 +0x1.5643eap+53 +0x1p+0 +0x1.0087a8p-47 +0x1.2f5868p+0 +0x1.38e848p+10 +0x1.e5c11cp+7 +0x1p+0 +0x1.129e64p+8 +0x1.5c6c98p+1 +0x1.00015ap+0 +0x1.b745e2p+48 +0x1.1bfb08p+0 +0x1.a92b86p+5 +0x1.7c2a54p+0 +0x1p+0 +0x1.3334b6p+0 +0x1.b5c006p+5 +0x1p+0 +0x1.bec8c6p+16 +0x1p+0 +0x1.dc5496p-1 +0x1.0a88ep+0 +0x1.f95e78p+1 +0x1p+0 +0x1.0037b4p+0 +0x1.1eaf62p+8 +0x1p+0 +0x1.43bfcp+5 +0x1.3af986p+15 +0x1.03dbf4p+0 +0x1.b1b5a8p-12 +0x1p+0 +0x1.90007ep+0 +0x1.0003b4p+0 +0x1p+0 +0x1.f8f086p-12 +0x1.dd7178p+4 +0x1.00207p+0 +0x1.118916p+0 +0x1p+0 +0x1.a298c4p+7 +0x1.006a6cp+0 +0x1.1dfa5p+0 +0x1.327c54p-1 +0x1p+0 +0x1.f7e922p-1 +0x1.3e365ap+13 +0x1p+0 +0x1.04318ap+0 +0x1.52381cp+0 +0x1.60a298p-1 +0x1.000076p+0 +0x1.977c42p+14 +0x1.a8cb5cp+7 +0x1.1b0d18p+6 +0x1.29cedp+0 +0x1.15a46ap+1 +0x1p+0 +0x1.639aaep-12 +0x1.004a8cp+0 +0x1.0ab1bcp+1 +0x1.b85ecp+6 +0x1.36279ep+4 +0x1.22ae32p+8 +0x1.615228p+1 +0x1.000898p+0 +0x1.001968p+0 +0x1p+0 +0x1.2f791ap-1 +0x1.00001cp+0 +0x1p+0 +0x1.0627aep+0 +0x1.0e38d4p+5 +0x1.490936p+57 +0x1p+0 +0x1.000358p+0 +0x1.57b4bp+7 +0x1.4b4766p+0 +0x1.26da06p+0 +0x1.cd1ec6p+1 +0x1.38ee44p+15 +0x1.c0ffbcp+15 +0x1.01caacp+0 +0x1.e2a336p-1 +0x1p+0 +0x1.0c69f4p+2 +0x1.50a08cp+55 +0x1.10d0b8p+0 +0x1.1eed7p+1 +0x1.b14428p+0 +0x1.004f94p+0 +0x1.31c2acp-1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.b47948p+0 +0x1.78d5eap+51 +0x1.01316ep+0 +0x1.4a937cp+0 +0x1.1ba54ap+1 +0x1.6ba304p+0 +0x1.3591c6p-1 +0x1p+0 +0x1.08a91ap+8 +0x1.19ade8p+0 +0x1.01535ap+0 +0x1.317184p-1 +0x1.36f9a4p+2 +0x1.7f08a8p+0 +0x1p+0 +0x1.00013p+0 +0x1.ff478p-1 +0x1.27e0d2p+0 +0x1.0ecbacp+7 +0x1.8dd6acp+0 +0x1.100ecep+0 +0x1.25edd8p+8 +0x1.198a9p+0 +0x1p+0 +0x1.5c6cc2p+1 +0x1.016276p+0 +0x1.329f88p-1 +0x1.9e35ap+0 +0x1.004612p+0 +0x1.fb9b82p-1 +0x1.000d84p+0 +0x1.43e8a8p+0 +0x1.57e548p+1 +0x1.057f18p+0 +0x1.a6dfbep+7 +0x1p+0 +0x1.341ce2p-1 +0x1p+0 +0x1p+0 +0x1.fcbce2p+56 +0x1.004454p+0 +0x1.909ec2p-6 +0x1p+0 +0x1.58649p+9 +0x1.4b96e6p+49 +0x1.3ca38cp+0 +0x1.00033ep+0 +0x1.0099f4p+0 +0x1p+0 +0x1.21869p+8 +0x1p+0 +0x1.65b514p+16 +0x1p+0 +0x1.740878p+3 +0x1.a4cea2p+43 +0x1.b143fep+0 +0x1.25ed36p+4 +0x1.003d7ap+0 +0x1.0d82d4p+1 +0x1.3389ap-1 +0x1p+0 +0x1.11a222p+3 +0x1.983f38p+3 +0x1.000162p+0 +0x1.46b986p+0 +0x1.3e3e9cp+8 +0x1.58747p+0 +0x1.45632cp+0 +0x1.3f738cp+3 +0x1.00d0bp+0 +0x1.5dca1p+0 +0x1p+0 +0x1.43257p+0 +0x1.0b38fap+0 +0x1.1ca4aep+8 +0x1p+0 +0x1p+0 +0x1.319a2p-1 +0x1.2d4fd4p+5 +0x1.02f006p+0 +0x1.e0c05ap+4 +0x1.98f464p+0 +0x1.05db3ap+8 +0x1.a2bd9ep+2 +0x1.a05a58p+0 +0x1.8bf254p+5 +0x1.3eb04cp+4 +0x1.3140a6p-1 +0x1.011d98p+0 +0x1p+0 +0x1.000ac8p+0 +0x1.3b2774p+10 +0x1.44d29p+0 +0x1p+0 +0x1.009f9ep+0 +0x1.0a8702p+2 +0x1.1349bep+1 +0x1.a585b4p+7 +0x1.00f23cp+0 +0x1.338168p+0 +0x1p+0 +0x1.3e7816p+14 +0x1.0e9d14p+0 +0x1.8f53ccp+1 +0x1.28c922p+0 +0x1.6bb30ep+15 +0x1.b58932p+14 +0x1.1c682p+0 +0x1.00846p+0 +0x1.00240cp+0 +0x1.000674p+0 +0x1.2c71ep+3 +0x1.750298p+67 +0x1.364684p+0 +0x1.134676p+16 +0x1.47a244p+0 +0x1p+0 +0x1.dee22ep-1 +0x1.3e8204p+9 +0x1.00007p+0 +0x1.31f1e6p-1 +0x1p+0 +0x1.a187f8p+7 +0x1.0097e4p+0 +0x1.08e1b2p+0 +0x1.0e3e7ap+0 +0x1.0006fap+0 +0x1p+0 +0x1.358ca6p+7 +0x1.83bcacp+3 +0x1.4603f4p+0 +0x1.3093c8p+0 +0x1.5c6cap+1 +0x1.1f5efcp+0 +0x1.6ba3e8p+0 +0x1.cba7b2p+7 +0x1.015e1ep+0 +0x1.b85f58p+6 +0x1.dc835ep+1 +0x1.000598p+0 +0x1.f9551ap-1 +0x1p+0 +0x1p+0 +0x1.0a67fp+0 +0x1.1bdf58p+0 +0x1.f75026p-1 +0x1.5e3b5p+1 +0x1.3f9b72p+0 +0x1.8ff798p-51 +0x1.0115bap+0 +0x1.4e13fcp+0 +0x1.6d6c54p+5 +0x1.0e7538p+0 +0x1.dcf5d8p-12 +0x1.134aa6p+1 +0x1.b7cc8p+12 +0x1.3e46dap+12 +0x1p+0 +0x1.3fb2fep+0 +0x1p+0 +0x1p+0 +0x1.0f8834p+0 +0x1p+0 +0x1.2f8fc8p-1 +0x1.0032aap+0 +0x1.0134d4p+0 +0x1.0006ecp+0 +0x1.36f9b8p+2 +0x1.d32d7p+43 +0x1.65f516p+1 +0x1.a71662p+5 +0x1.02731cp+2 +0x1.00002cp+0 +0x1.090ap+0 +0x1.8ce46ep+6 +0x1.0001bp+0 +0x1.003c82p+0 +0x1.a2cb78p+5 +0x1.1b3cc6p+0 +0x1p+0 +0x1.000698p+0 +0x1p+0 +0x1p+0 +0x1.0a01d2p+50 +0x1.000b52p+0 +0x1.63092ep+0 +0x1.0011fcp+0 +0x1.684b74p+2 +0x1.782834p+49 +0x1.213286p+0 +0x1.2b13b6p+9 +0x1.383ep+0 +0x1.f91f5cp+2 +0x1.bf1f3cp+7 +0x1.3e44f4p+7 +0x1p+0 +0x1.4637a4p+0 +0x1.3e8c48p+12 +0x1.192a3cp+8 +0x1.0008c2p+0 +0x1p+0 +0x1.01a4b6p+8 +0x1.0002d8p+0 +0x1.001054p-6 +0x1p+0 +0x1.275d2cp+0 +0x1.320582p-1 +0x1.02643ep+0 +0x1.aa4074p+5 +0x1.02528cp+0 +0x1.0adc1p+7 +0x1.e25f42p-1 +0x1p+0 +0x1.0076ap+0 +0x1.0008acp+0 +0x1.783ba4p+3 +0x1.01af66p+0 +0x1.192eep+0 +0x1.132ea6p+7 +0x1.a93964p+2 +0x1.9bc85p+14 +0x1.1e3f46p+8 +0x1.1d8db6p+13 +0x1.0007cap+0 +0x1.2fa568p-1 +0x1.3e8fd4p+12 +0x1.2f5bf6p-1 +0x1.a0994cp+14 +0x1.7ed6b2p+0 +0x1.0f2b1ap+0 +0x1.4ab6e6p+1 +0x1.04c838p+8 +0x1.000034p+0 +0x1p+0 +0x1.eadcd6p-1 +0x1.00008p+0 +0x1.12103cp-1 +0x1p+0 +0x1p+0 +0x1.2f93bp-1 +0x1.7b4b16p+5 +0x1.38fe8cp+6 +0x1p+0 +0x1.36f96cp+2 +0x1.716462p+39 +0x1.000048p+0 +0x1.7c680ep+4 +0x1p+0 +0x1.28cbfap+0 +0x1.a416eap+41 +0x1p+0 +0x1.57e51p+1 +0x1.0004f4p+0 +0x1p+0 +0x1.3167b6p-1 +0x1.984032p+3 +0x1.04f21ep+0 +0x1p+0 +0x1.73ed4p+2 +0x1.0f4eb8p+8 +0x1p+0 +0x1.2df9p+5 +0x1.54bbf8p+2 +0x1.0bf9a4p+0 +0x1.a91d34p+63 +0x1.130ed8p+0 +0x1p+0 +0x1.00036ap+0 +0x1.3ae7aep+8 +0x1.16524ap+8 +0x1.9f774ap+0 +0x1.ba601cp+2 +0x1.bb2f0cp+12 +0x1.a93bd4p+2 +0x1.32e318p+0 +0x1.0ab44ap+0 +0x1p+0 +0x1.2f871ep-1 +0x1p+0 +0x1.a78356p+7 +0x1.001e8cp+0 +0x1.4a08dap+5 +0x1.069e1cp+0 +0x1.e3e184p+1 +0x1.f60012p+18 +0x1p+0 +0x1.b8600ep+6 +0x1.300bc6p-1 +0x1.76f83cp+6 +0x1.16f978p+0 +0x1.0003a4p+0 +0x1.0b4f22p+7 +0x1.37409cp+0 +0x1p+0 +0x1.3e95dp+12 +0x1.00098p+0 +0x1.004038p+0 +0x1.301bfep-1 +0x1p+0 +0x1.9c872ep+0 +0x1.378344p+16 +0x1.18c55cp+0 +0x1.274a0ep-20 +0x1.2811b2p+0 +0x1p+0 +0x1.ba668cp+12 +0x1.7f2c8ap+13 +0x1.0f72fcp+8 +0x1.6308a6p+0 +0x1.b0cac6p+13 +0x1.4837p+0 +0x1p+0 +0x1.40bd6cp+0 +0x1p+0 +0x1.39133p+12 +0x1.c62f4cp+46 +0x1.0004bcp+0 +0x1.12257ap+8 +0x1p+0 +0x1.85645cp+9 +0x1.4cb85ep+0 +0x1p+0 +0x1.a234a8p-1 +0x1p+0 +0x1p+0 +0x1.3cf408p-27 +0x1.0e263ep+1 +0x1.00026p+0 +0x1p+0 +0x1p+0 +0x1.332f2cp-1 +0x1.04bb28p+0 +0x1.4a67cap+0 +0x1.0003dcp+0 +0x1p+0 +0x1.3482d4p-1 +0x1.134a04p+1 +0x1p+0 +0x1.9000ecp+4 +0x1p+0 +0x1.2f4e26p-1 +0x1.0395dp+9 +0x1.38dbb4p+11 +0x1p+0 +0x1.049432p+0 +0x1.1a9a96p+8 +0x1.54bcd2p+2 +0x1.14487cp+0 +0x1.020458p+0 +0x1.000b9p+0 +0x1.32254cp-1 +0x1.73ed2ep+2 +0x1p+0 +0x1.3d8be4p+0 +0x1.3e96d4p+15 +0x1.ffa44cp-1 +0x1.11a334p+3 +0x1.08317p+0 +0x1.000238p+0 +0x1.3e498p+9 +0x1.3389eap-1 +0x1.36f9ccp+2 +0x1.0bbe0ap+0 +0x1.0b53f4p+8 +0x1p+0 +0x1.0e42d2p+0 +0x1.d22332p+18 +0x1p+0 +0x1.05197ep+0 +0x1.205a74p+1 +0x1p+0 +0x1.0086dp+0 +0x1p+0 +0x1.296a6cp+0 +0x1.7ced1p+2 +0x1p+0 +0x1p+0 +0x1.0053eep+0 +0x1.09c5dcp+0 +0x1p+0 +0x1.a07194p+9 +0x1.0a151ap+0 +0x1.01e6ccp+0 +0x1.ef2d1p-84 +0x1.8eb89cp+3 +0x1.15dbb6p+0 +0x1.00307ap+0 +0x1.03571ep+0 +0x1.f5292ep-1 +0x1.59f064p+0 +0x1.0e26a8p+1 +0x1.6d6ab4p+5 +0x1.7ad0fcp+6 +0x1.40fc28p+0 +0x1.c6b9p+14 +0x1.071bfcp+0 +0x1.b0cb28p+7 +0x1.1614b2p+1 +0x1.4bdc7ep+0 +0x1.358db8p+7 +0x1.405dp+3 +0x1.0461d4p+0 +0x1p+0 +0x1.a8b5b2p+7 +0x1.130dbap+7 +0x1.259792p+3 +0x1.2fcf92p-1 +0x1.0092d2p+0 +0x1.0fea96p+0 +0x1.000024p+0 +0x1.a0abccp+5 +0x1.3b1076p+0 +0x1.192914p+5 +0x1.85f5dap-9 +0x1.0b2ae8p+0 +0x1.dc84ap+1 +0x1.2121acp+8 +0x1.b144fep+0 +0x1.131a68p+1 +0x1.28131p+0 +0x1.35dc48p+5 +0x1.b81b5p-51 +0x1.0a1caep+0 +0x1.f9ef34p+0 +0x1.95da52p+0 +0x1p+0 +0x1.3032a2p-1 +0x1.1cc56ep+0 +0x1.c77bfcp+0 +0x1.05370ep+0 +0x1.d6d0c6p+2 +0x1.2fbfap-1 +0x1p+0 +0x1.0000b8p+2 +0x1.b8c316p+1 +0x1.00010cp+0 +0x1.028104p+0 +0x1p+0 +0x1.13f12cp+0 +0x1p+0 +0x1p+0 +0x1.fb7e4ep+53 +0x1p+0 +0x1.780d04p+9 +0x1.1973c4p+6 +0x1.b09184p+0 +0x1.b4ed32p+51 +0x1p+0 +0x1.00b82p+0 +0x1.198ba4p+0 +0x1.57b63cp+7 +0x1.0016d4p+0 +0x1p+0 +0x1.01a3e4p+0 +0x1.e8d11ep+44 +0x1.b7e5d4p+13 +0x1.00667cp+0 +0x1.06ed08p+0 +0x1.05f47ap+0 +0x1.4aa86ap+0 +0x1.04aeap+0 +0x1p+0 +0x1p+0 +0x1.3b13a8p+11 +0x1.596846p+47 +0x1.0d8c64p+0 +0x1.0012aap+0 +0x1p+0 diff --git a/benchtests/log1pf-inputs b/benchtests/log1pf-inputs new file mode 100644 index 0000000000..dcf79e82cd --- /dev/null +++ b/benchtests/log1pf-inputs @@ -0,0 +1,1005 @@ +## args: float +## ret: float +## includes: math.h +# Random inputs x*2^e where x is random in [1/2,1] and e in [-29,127] +## name: workload-random +0x1.c78e3p+14 +0x1.48495cp+92 +0x1.4b1328p+101 +0x1.9a5a14p+58 +0x1.41168p-3 +0x1.302f02p+27 +0x1.d10646p+119 +0x1.a94a78p+23 +0x1.4dbaecp-4 +0x1.d91022p+79 +0x1.15a1cp-2 +0x1.2dfc7ap-14 +0x1.3687dep-20 +0x1.40df16p+120 +0x1.59de46p-21 +0x1.c94704p+22 +0x1.bbcb8p-3 +0x1.a50b8ap+63 +0x1.3195c2p+28 +0x1.8b82ecp+9 +0x1.0fd406p-6 +0x1.18ea9cp+99 +0x1.fa7eb4p+61 +0x1.542ac6p+90 +0x1.db1fe8p-23 +0x1.5add68p+47 +0x1.31596ap+110 +0x1.fac144p+72 +0x1.ec4f38p+12 +0x1.ec0826p-24 +0x1.6eba14p+45 +0x1.89ff32p+98 +0x1.e97588p-9 +0x1.c9a5fap+77 +0x1.9ab35ep+42 +0x1.c588c8p+62 +0x1.605674p+95 +0x1.52d5d6p+22 +0x1.9856a8p+29 +0x1.b8a602p+64 +0x1.42695cp-19 +0x1.7d557cp+43 +0x1.94417p+21 +0x1.c0728cp+68 +0x1.90cddp+82 +0x1.b7434p+68 +0x1.2b73bcp+84 +0x1.191af2p+4 +0x1.72b818p+60 +0x1.9e46ep+8 +0x1.f2ae94p+70 +0x1.0baa78p+110 +0x1.581e48p-4 +0x1.43f84ap+30 +0x1.794728p-2 +0x1.cbcd88p-9 +0x1.dfad2p+106 +0x1.be2368p-26 +0x1.575892p+43 +0x1.9f0008p+84 +0x1.173adcp-15 +0x1.33982p+14 +0x1.f2b8f4p+17 +0x1.ea0a08p+4 +0x1.3960d8p-27 +0x1.62e26cp+126 +0x1.7b60a4p-27 +0x1.6f03cap+29 +0x1.99ac0cp+116 +0x1.ff26d4p+18 +0x1.f9d1aep+2 +0x1.0f1e66p+61 +0x1.9bdfdep+52 +0x1.02f87cp-26 +0x1.d37e0ap+121 +0x1.e3495p+108 +0x1.421a48p+94 +0x1.4061a8p+94 +0x1.3c8fb8p+126 +0x1.def69ep-20 +0x1.348b92p+82 +0x1.30ad6ep+93 +0x1.2ce07cp+12 +0x1.c408dp-12 +0x1.cd7284p-15 +0x1.2b7638p+27 +0x1.746976p+82 +0x1.8ddae4p-12 +0x1.81efe8p+76 +0x1.3d4b4ep-14 +0x1.7f06acp+57 +0x1.fcbf08p+29 +0x1.5fba1ep+80 +0x1.18101ep+93 +0x1.1532eep+89 +0x1.837216p+82 +0x1.6acd42p+93 +0x1.f57efp+29 +0x1.699bf4p+46 +0x1.ad6918p+96 +0x1.b795b8p+91 +0x1.a7c832p+14 +0x1.8f63b4p+103 +0x1.63da54p+60 +0x1.7ea5a8p+76 +0x1.1a80c8p+124 +0x1.8b317ap+27 +0x1.cced4p+114 +0x1.ce4cbcp-21 +0x1.561304p+123 +0x1.0addcep+33 +0x1.94edf8p+60 +0x1.cba4fcp+85 +0x1.aa558cp+101 +0x1.690c84p+80 +0x1.57aa64p+40 +0x1.4cb082p+102 +0x1.a2c26p+53 +0x1.8fa5fcp+103 +0x1.933fe8p+14 +0x1.a22faep+112 +0x1.ff8c2p+14 +0x1.2e15c2p+62 +0x1.2baacap+103 +0x1.43602p+26 +0x1.927d7p+34 +0x1.f3a606p-15 +0x1.49ac3ep+94 +0x1.95b7e4p+26 +0x1.b1612cp+30 +0x1.4b4b6ap+11 +0x1.02229cp-2 +0x1.339d92p+76 +0x1.e3e66p-5 +0x1.0206bep-25 +0x1.d8f222p-30 +0x1.34ab66p+107 +0x1.720baep+26 +0x1.f83ab4p+101 +0x1.1a3096p+35 +0x1.4ed274p+104 +0x1.2fd074p-12 +0x1.223b6cp+35 +0x1.17b0c2p+22 +0x1.292496p-10 +0x1.68be8ep+81 +0x1.9d9f94p+23 +0x1.7e0f22p-19 +0x1.fc5a44p+54 +0x1.2ca3ccp+81 +0x1.4a77dap-29 +0x1.cc29c4p+93 +0x1.295e5ep+118 +0x1.359e08p-14 +0x1.11b84cp+25 +0x1.083ceep+102 +0x1.1fbe94p-15 +0x1.b0f068p+43 +0x1.ede1ap+43 +0x1.670c9ep+37 +0x1.9b3568p+97 +0x1.047f1cp+2 +0x1.62ce96p+112 +0x1.42a968p+48 +0x1.fbbd34p+10 +0x1.5ad592p+45 +0x1.55505ep-21 +0x1.703858p+50 +0x1.8ed60cp+52 +0x1.e0bf78p+5 +0x1.5db4f8p-18 +0x1.42575p+40 +0x1.a3a58p+91 +0x1.a89f2ap+34 +0x1.3bfc7cp+7 +0x1.eb7722p+103 +0x1.1ff1b8p+3 +0x1.7549aap+3 +0x1.9dec4p-30 +0x1.cec6bp+23 +0x1.59baaap+115 +0x1.f2bda4p+48 +0x1.1708bep+8 +0x1.315ee8p+17 +0x1.1f438ap+55 +0x1.151096p+119 +0x1.cd1ae4p+68 +0x1.7bede6p+9 +0x1.1aed6ap+102 +0x1.ffe9dcp+20 +0x1.e8911p+55 +0x1.1e844cp+48 +0x1.b2fd3ap-21 +0x1.2f5366p-23 +0x1.1346dap+58 +0x1.de57d4p+23 +0x1.4a36c6p+20 +0x1.40806ep+77 +0x1.ef9586p+10 +0x1.60f92ep+53 +0x1.ee3824p+73 +0x1.8edde4p+54 +0x1.909c74p-21 +0x1.2fc7bcp+108 +0x1.92e0f8p+117 +0x1.5bf1fcp+36 +0x1.79d04p+23 +0x1.6d2c2ap+37 +0x1.800ab8p+8 +0x1.d3ba46p+35 +0x1.919584p+116 +0x1.43b9d6p+27 +0x1.8ce338p+63 +0x1.73897ep+14 +0x1.835668p+66 +0x1.cc770cp+65 +0x1.b9c258p+52 +0x1.018998p+117 +0x1.78032p-18 +0x1.3622dep-4 +0x1.35b20ap+6 +0x1.cca16p+42 +0x1.27f6a4p+78 +0x1.b79478p+41 +0x1.569bfp-16 +0x1.460578p-20 +0x1.963b2p-28 +0x1.12fceep+65 +0x1.6161c8p+25 +0x1.a5a884p+104 +0x1.374e64p+124 +0x1.6ca26ap-14 +0x1.92a25cp+108 +0x1.ff3df8p+7 +0x1.d1b016p+48 +0x1.1babc6p+74 +0x1.99fc8cp+60 +0x1.f8c8fcp+20 +0x1.0fb918p+9 +0x1.8bceap+74 +0x1.e8204p+66 +0x1.b857b6p+52 +0x1.76973p+87 +0x1.aa7d1ap+124 +0x1.7b6cdp-8 +0x1.f775ap+16 +0x1.30b07ap+59 +0x1.5bad4p+94 +0x1.952a02p+122 +0x1.749176p+123 +0x1.e59b1ep-4 +0x1.703cbcp+70 +0x1.5298d2p+77 +0x1.f09cfp+97 +0x1.13832ep-25 +0x1.952d74p+104 +0x1.2be9fp-23 +0x1.1f0e24p+103 +0x1.652f96p-16 +0x1.66cebcp+57 +0x1.4725f4p-23 +0x1.b570fcp-23 +0x1.44b468p+68 +0x1.2f344p-21 +0x1.3f4edap+20 +0x1.92c7fcp+53 +0x1.523ec2p+62 +0x1.83d1eep+16 +0x1.77eeaep+101 +0x1.ba8b3p-25 +0x1.c1dd2cp+67 +0x1.7de188p+29 +0x1.7cc2dep+105 +0x1.a2c70ap+83 +0x1.979716p+9 +0x1.b2ccd4p+71 +0x1.6335a4p+22 +0x1.913b3p+90 +0x1.2d549cp-22 +0x1.ef209cp+12 +0x1.378f4cp+68 +0x1.9d1174p+110 +0x1.6b2932p+27 +0x1.b24748p+32 +0x1.a849f4p+57 +0x1.c354f4p+125 +0x1.28299p+88 +0x1.82a79ap+93 +0x1.cc5a3p+2 +0x1.f52c34p-6 +0x1.8deb48p+20 +0x1.3e8efep-12 +0x1.8c6954p+23 +0x1.77ee34p+82 +0x1.80c7dp+86 +0x1.04a6d8p+32 +0x1.019068p+77 +0x1.a8356cp+16 +0x1.8971dep+59 +0x1.dddddcp-20 +0x1.c92964p+85 +0x1.0f431ep+126 +0x1.584092p+121 +0x1.4d45f8p-3 +0x1.9ac9d8p+5 +0x1.971d64p-24 +0x1.911ba4p+76 +0x1.2a89acp+80 +0x1.33f062p+113 +0x1.691c9ap+100 +0x1.827bfcp+64 +0x1.1f7b46p+101 +0x1.a5d6eep+88 +0x1.4de20cp+1 +0x1.784a7p+28 +0x1.6573bp+57 +0x1.1be33p+107 +0x1.13c7p+37 +0x1.081416p+27 +0x1.c41d7cp+36 +0x1.cc4cbcp+88 +0x1.a9c4e8p+86 +0x1.f57668p-1 +0x1.b42b9cp+64 +0x1.bb8cfp-10 +0x1.72c6c8p+24 +0x1.a02fbep+67 +0x1.5e7e62p+84 +0x1.9002b4p+69 +0x1.74eb64p-24 +0x1.80d85p+123 +0x1.50fe44p+31 +0x1.012cc8p-9 +0x1.eb2182p+110 +0x1.945b8cp-27 +0x1.e73c6cp-1 +0x1.8b1d6ap+4 +0x1.e37d54p+4 +0x1.78d304p+32 +0x1.a45042p+58 +0x1.99d3d4p-9 +0x1.6a379cp+34 +0x1.34a222p+48 +0x1.d05824p+15 +0x1.4cef9ap-27 +0x1.dab2fcp-13 +0x1.21465ep+59 +0x1.c2239cp+77 +0x1.f094dap+85 +0x1.a57344p+0 +0x1.cd14d6p-19 +0x1.7e3bccp+53 +0x1.d4264p-14 +0x1.ae14p+69 +0x1.36af58p+0 +0x1.7c43bp+9 +0x1.10551p+9 +0x1.514b0ap-17 +0x1.e74e42p+89 +0x1.6107aap+8 +0x1.51c72cp+114 +0x1.6fd3fp+89 +0x1.dd9fb8p-10 +0x1.1dece6p+75 +0x1.05af5ap+6 +0x1.eafe46p+104 +0x1.b498dp+65 +0x1.2ed2b4p-24 +0x1.ae9ff4p+52 +0x1.e0b21cp+95 +0x1.3f0124p+31 +0x1.d56474p+81 +0x1.20f0ccp+68 +0x1.594a9cp+0 +0x1.35f866p+13 +0x1.a3ffd2p+117 +0x1.0edd6ep+114 +0x1.e2e148p+2 +0x1.d241ccp+105 +0x1.0b021ep+82 +0x1.6e3d3p+40 +0x1.906e6cp+10 +0x1.50861cp+61 +0x1.5ea378p+8 +0x1.cea9e8p+119 +0x1.5c3ef4p-5 +0x1.e71eb8p+59 +0x1.3b8e0cp+114 +0x1.119f66p+121 +0x1.8261cap+108 +0x1.0f6d6ep+103 +0x1.d35b7cp-14 +0x1.b3df3ep-27 +0x1.620ecp+81 +0x1.84385p+56 +0x1.26090ep-13 +0x1.951978p+84 +0x1.33d696p+17 +0x1.774ap+65 +0x1.e24d1p+0 +0x1.2bcd16p+71 +0x1.df2954p-20 +0x1.ebf7b6p+99 +0x1.a7be3p+82 +0x1.508f92p-29 +0x1.4c43acp+116 +0x1.bd2648p-13 +0x1.c0e1b6p-9 +0x1.4c529p+88 +0x1.62b418p-13 +0x1.8d524cp-17 +0x1.0755fp+65 +0x1.af4dd8p-11 +0x1.a1d094p+51 +0x1.50b074p+38 +0x1.9bc71cp-3 +0x1.88b7fcp+111 +0x1.dc8924p+77 +0x1.d6e174p+35 +0x1.ca0538p-13 +0x1.5ba842p+50 +0x1.fdbbdcp+4 +0x1.ddb1a6p+84 +0x1.18c1f2p+31 +0x1.f3afe2p+68 +0x1.acc2e4p-2 +0x1.d92dfp+23 +0x1.f61cf4p+111 +0x1.6719ecp+101 +0x1.80e2ccp+74 +0x1.f8a5e8p+21 +0x1.f6b4ap+95 +0x1.216d62p+61 +0x1.dea2c4p+58 +0x1.a8f8dp+33 +0x1.5bcc0ap+78 +0x1.5dc2a8p+62 +0x1.dff08p-7 +0x1.4a9768p-14 +0x1.070104p+99 +0x1.67d5fp-21 +0x1.435c4p+27 +0x1.7aadbcp-9 +0x1.eb517ap+0 +0x1.1e63f8p+2 +0x1.154b94p-18 +0x1.a456p-24 +0x1.8307ap+34 +0x1.158706p+21 +0x1.7c14acp+0 +0x1.0d4f2ap+92 +0x1.43411ap+33 +0x1.e269dcp+60 +0x1.420fa8p-20 +0x1.6627d4p+88 +0x1.e27a8p+102 +0x1.a019ccp+125 +0x1.79684p+74 +0x1.51d7eep+3 +0x1.d6179p+71 +0x1.a73554p+67 +0x1.9b29f2p+106 +0x1.a363a8p+109 +0x1.c97f9ep+103 +0x1.3c408p+77 +0x1.ba923p+99 +0x1.0eebfep+72 +0x1.f3a6f4p+22 +0x1.519874p+117 +0x1.badc1cp+93 +0x1.ced474p+106 +0x1.f0c904p-13 +0x1.1ceedep+52 +0x1.656258p-14 +0x1.006cap+104 +0x1.a6960ap+90 +0x1.3c2162p+80 +0x1.0a744ap+24 +0x1.e50c24p+48 +0x1.ed24f4p-18 +0x1.00e7bep+37 +0x1.30215ap+105 +0x1.7dd83cp+126 +0x1.dcf948p+39 +0x1.6a3be8p+50 +0x1.942234p+19 +0x1.2c2ea2p+74 +0x1.93853p-22 +0x1.eeb9ap+105 +0x1.58dcc4p-27 +0x1.b0cc4cp+2 +0x1.fb1334p+73 +0x1.f2f5cap+111 +0x1.c409dp+29 +0x1.0930a6p+24 +0x1.5c2174p+63 +0x1.ab1fc8p+79 +0x1.ffdba4p+75 +0x1.7cdb48p-11 +0x1.ffddp-27 +0x1.ba4628p+21 +0x1.f22dbep+63 +0x1.0b047ep+21 +0x1.4ce8a4p+7 +0x1.0e6b0cp+61 +0x1.57e578p+64 +0x1.c5d5a8p+17 +0x1.e0afep+5 +0x1.bc466ap+79 +0x1.74a8a4p+114 +0x1.6d508ep+89 +0x1.49e98p+48 +0x1.21b884p+103 +0x1.0ab83ap+90 +0x1.07570ep+110 +0x1.cfffp+37 +0x1.ca655cp+90 +0x1.a55c7cp+25 +0x1.f7b02cp+18 +0x1.57d4b2p+17 +0x1.4bffbp+48 +0x1.08ffbap+95 +0x1.f98ce8p+59 +0x1.a265aep+88 +0x1.45d7acp+20 +0x1.2ad7dap+88 +0x1.62a68cp+70 +0x1.e025ep+101 +0x1.90de6p+121 +0x1.f346acp+70 +0x1.27422ap+34 +0x1.a9408cp+95 +0x1.868eb4p-29 +0x1.b2970cp+104 +0x1.b54268p-14 +0x1.8d8d04p-8 +0x1.fc3416p+87 +0x1.74f35p-19 +0x1.c9a32cp+121 +0x1.f7585p+91 +0x1.3ced2p+119 +0x1.d666a6p+115 +0x1.de1114p+1 +0x1.f893ep+80 +0x1.299b54p+61 +0x1.bc9b18p+35 +0x1.beac46p-11 +0x1.09f0bp+63 +0x1.481d54p+47 +0x1.49203p+107 +0x1.4c321ap+37 +0x1.255248p+7 +0x1.67ff82p+82 +0x1.054522p+125 +0x1.ff16c8p+0 +0x1.7c0998p+25 +0x1.09b04cp-18 +0x1.a80cfcp+115 +0x1.fcfffcp-24 +0x1.46e548p+42 +0x1.dc7eeap-21 +0x1.50719cp+20 +0x1.4f7f94p+9 +0x1.c4d6cp+116 +0x1.4b691cp+108 +0x1.672e42p-22 +0x1.8656p+43 +0x1.5bdcc8p+124 +0x1.72661ep+57 +0x1.865e68p+68 +0x1.1192bcp+83 +0x1.15b732p+76 +0x1.2c5c48p+28 +0x1.52a1ap+117 +0x1.7deaa4p+82 +0x1.03c784p-11 +0x1.d7e19cp-13 +0x1.63d338p+87 +0x1.82ff8ep+23 +0x1.7e95ap+59 +0x1.f60af8p+15 +0x1.ec346ep+32 +0x1.a27c8cp+67 +0x1.907d3cp-22 +0x1.d4da32p+9 +0x1.3822d6p+43 +0x1.06638ep+39 +0x1.eeb39ep+20 +0x1.d8bd88p+50 +0x1.84668ep+34 +0x1.120c92p+121 +0x1.a93be6p+65 +0x1.9563f4p+100 +0x1.3327c6p+43 +0x1.a9715p+17 +0x1.d074ep+73 +0x1.20628ep-7 +0x1.61d828p+81 +0x1.863c42p+106 +0x1.afa75p-20 +0x1.d1d34p+50 +0x1.e5fe78p+71 +0x1.c1c444p+6 +0x1.5a8e32p-3 +0x1.f6abb4p+50 +0x1.2fc66cp+55 +0x1.d1d578p-17 +0x1.cd4182p+53 +0x1.87fcp+78 +0x1.de95fep+15 +0x1.7e52bep+35 +0x1.cc0276p+81 +0x1.f676f4p+124 +0x1.6f025cp-28 +0x1.14f37ap+46 +0x1.5bb684p-4 +0x1.741e6p+42 +0x1.1068f4p+25 +0x1.39efep+79 +0x1.903634p+101 +0x1.9aabacp+46 +0x1.7cffb4p+43 +0x1.7b9352p-27 +0x1.b0a5b8p+19 +0x1.a226b4p+65 +0x1.f6f1acp+41 +0x1.b026dep+92 +0x1.472994p+123 +0x1.e0ca9cp-17 +0x1.5ac904p+11 +0x1.60cacp+67 +0x1.79072p+89 +0x1.46fdccp+87 +0x1.f512c8p+70 +0x1.49d4dp+0 +0x1.37dd84p+77 +0x1.1281aep+126 +0x1.300db6p+100 +0x1.f4128ap+115 +0x1.31e05p+46 +0x1.92e078p+96 +0x1.274c92p-18 +0x1.c15cfcp+87 +0x1.9c9c26p+97 +0x1.f2736cp+43 +0x1.32d744p+99 +0x1.7ff204p+113 +0x1.7551d4p+18 +0x1.4f48d6p+3 +0x1.917b02p-9 +0x1.70b748p-20 +0x1.d995bep+120 +0x1.5b9a8ep+126 +0x1.2a16dep+11 +0x1.8eba58p+36 +0x1.e0e7d2p+60 +0x1.7d7b9ep+8 +0x1.2600cp+124 +0x1.dbd354p-21 +0x1.e48b7cp+49 +0x1.d69a48p-4 +0x1.6aa834p+14 +0x1.e74886p+15 +0x1.2ac858p+92 +0x1.9d1846p+71 +0x1.3f5248p+1 +0x1.07e47cp-5 +0x1.ef1cc8p+15 +0x1.e8c3fcp+65 +0x1.6f7c44p+13 +0x1.d9e316p+95 +0x1.62c2ep+112 +0x1.5a1d42p+3 +0x1.d06c94p+53 +0x1.02e408p+93 +0x1.d6cf8cp+99 +0x1.99518p+81 +0x1.96a648p+47 +0x1.b61406p+105 +0x1.28f042p+81 +0x1.b7b51ep+99 +0x1.197a2ap+70 +0x1.125076p+29 +0x1.8ace44p+114 +0x1.bc2894p-23 +0x1.fab642p+99 +0x1.74f0f8p+43 +0x1.35c95cp+3 +0x1.e63cc8p+68 +0x1.5e67a6p+111 +0x1.8a2106p+47 +0x1.b5cbd4p+24 +0x1.9bef3cp+43 +0x1.79f9b4p+122 +0x1.026196p+21 +0x1.d8f1c4p+112 +0x1.5cc3b8p+2 +0x1.fb5a02p+99 +0x1.d757e8p+95 +0x1.4c6c6ep+30 +0x1.a252fap+120 +0x1.6b28fcp+18 +0x1.393468p+67 +0x1.b71dc8p-28 +0x1.e1bd2p+14 +0x1.7b54fep-25 +0x1.fda27cp+82 +0x1.64b6a2p-19 +0x1.3093bep+1 +0x1.a3682cp-23 +0x1.f6e6bep+72 +0x1.3e6df8p+71 +0x1.08b9b4p+102 +0x1.fecd98p+36 +0x1.a4b34p+119 +0x1.3937b8p+44 +0x1.8feb44p+67 +0x1.474cdp-28 +0x1.31c2eap+119 +0x1.68009cp-30 +0x1.9bf9dep+0 +0x1.577e1cp-16 +0x1.56fbep+79 +0x1.b1518p+27 +0x1.150692p+30 +0x1.7f3282p+95 +0x1.0782f4p-7 +0x1.b759a6p+27 +0x1.0adec6p+72 +0x1.77a9c6p-4 +0x1.bf9d96p-29 +0x1.9bd634p-23 +0x1.e9cep+99 +0x1.f7f754p+57 +0x1.5ddf7p+122 +0x1.59ee6p-1 +0x1.12910ep+118 +0x1.71fd44p+74 +0x1.707568p-4 +0x1.fd93a4p+112 +0x1.855fb4p+18 +0x1.3f1fcap+9 +0x1.c0a59cp+83 +0x1.6f2dacp-11 +0x1.89a71cp+5 +0x1.bee8p+39 +0x1.0be354p+44 +0x1.aff39p+67 +0x1.5d24c4p-15 +0x1.7cc108p+31 +0x1.d32a18p+38 +0x1.0ea1b8p+65 +0x1.a213dp+89 +0x1.30dd9cp-8 +0x1.2a4a3p+36 +0x1.7b3cbcp+97 +0x1.1af5b6p+122 +0x1.42af5cp-26 +0x1.0d4742p+88 +0x1.612c34p+66 +0x1.4dd1ap+125 +0x1.901f28p+115 +0x1.b15c54p-8 +0x1.1e653p+51 +0x1.ea9588p+126 +0x1.84d654p-19 +0x1.c97e52p+51 +0x1.462354p+83 +0x1.796108p+98 +0x1.f322ap+32 +0x1.3ce698p+13 +0x1.acbb5ap+9 +0x1.17a4bap+9 +0x1.98d19ap+112 +0x1.457ddp+13 +0x1.f6944cp+49 +0x1.cd2cbep+2 +0x1.38c15ap-12 +0x1.e41944p+3 +0x1.57b62ap+43 +0x1.725aaep+67 +0x1.65e4eep+63 +0x1.cbd734p+66 +0x1.e772e8p-6 +0x1.37d578p+68 +0x1.50ae48p+108 +0x1.10d0fcp-25 +0x1.f9b7f8p+66 +0x1.3739ecp+85 +0x1.3d9934p-18 +0x1.2d6a9cp+79 +0x1.c1cbacp-9 +0x1.2e2838p+20 +0x1.f98104p+51 +0x1.ec9cacp-10 +0x1.3ff662p+14 +0x1.f6ab04p+22 +0x1.53919ep+46 +0x1.6abf86p+11 +0x1.242a66p+26 +0x1.1fa5p+54 +0x1.5f8ebcp+60 +0x1.1c5062p+108 +0x1.3a512cp+72 +0x1.644c3p+91 +0x1.9fbd4p+10 +0x1.eaf508p+46 +0x1.676988p+10 +0x1.0ef3fcp+80 +0x1.10effp+122 +0x1.0b42a6p+11 +0x1.150394p+66 +0x1.b2643ep+99 +0x1.d5a0e4p+2 +0x1.9c408p+18 +0x1.743e64p+75 +0x1.045344p+121 +0x1.f1bb38p+5 +0x1.6b8874p+94 +0x1.2d15bep+116 +0x1.f5e62p+101 +0x1.0ed362p+23 +0x1.267a4ap-7 +0x1.a049b4p+13 +0x1.e0b384p-5 +0x1.ac764ap+54 +0x1.ddf4c4p+117 +0x1.19adacp+103 +0x1.f250dp+63 +0x1.2e9f22p+98 +0x1.62d7ecp+17 +0x1.1694dap+52 +0x1.698dc6p+104 +0x1.fbba02p+39 +0x1.7f5b78p+17 +0x1.d0c96ap+23 +0x1.44d132p-29 +0x1.b2fb4cp+58 +0x1.8e55c4p+68 +0x1.a08278p+100 +0x1.f5258ep+41 +0x1.628518p-21 +0x1.4e55a4p+102 +0x1.2802cp+95 +0x1.c941f8p-24 +0x1.89858ap+67 +0x1.c7247cp-3 +0x1.3d7d2ep+110 +0x1.350f86p+57 +0x1.537d4p+11 +0x1.922ed4p+9 +0x1.35687ep+28 +0x1.e30698p+91 +0x1.5884b4p+38 +0x1.5544aap-21 +0x1.a9d5bap-22 +0x1.d3b1e2p+11 +0x1.989d34p+44 +0x1.1e1688p+24 +0x1.a09474p+39 +0x1.33fdb8p+22 +0x1.07201ep+96 +0x1.ab8c4cp+53 +0x1.f372ep+124 +0x1.4a12acp-21 +0x1.d062d4p-25 +0x1.9aa33p+18 +0x1.9e5dfp-5 +0x1.a207acp+71 +0x1.743dacp+46 +0x1.6dc7d4p+25 +0x1.7a79d2p+99 +0x1.1c8c86p+17 +0x1.fb41d4p+67 +0x1.6eba0cp+43 +0x1.89051p+75 +0x1.f3f0dp+13 +0x1.1a22d2p+109 +0x1.7882c2p+98 +0x1.39d0e4p+88 +0x1.59376cp+12 +0x1.52307cp+115 +0x1.5ee274p+32 +0x1.975b2p+107 +0x1.fc09ecp+116 +0x1.fa266cp+117 +0x1.14d94ep+91 +0x1.d07092p+57 +0x1.048b56p+23 +0x1.1a9444p+124 +0x1.33ee9cp+42 +0x1.ce1e94p+5 +0x1.298e6ap+12 +0x1.83f364p+107 +0x1.a8041ep+72 +0x1.bdad9ep+98 +0x1.dd3bacp+43 +0x1.0f5f74p+11 +0x1.3609d4p+87 +0x1.36514ap-19 +0x1.48ab3p+106 +0x1.b405e8p+117 +0x1.dd1888p+42 +0x1.003064p+34 +0x1.42ee58p-2 +0x1.d65efcp+120 +0x1.93379p-8 +0x1.0ed062p+60 +0x1.9d6b7p+122 +0x1.eb7c38p-6 +0x1.e3acd4p+33 +0x1.a56b18p-15 +0x1.c47d0cp+115 +0x1.98da58p-7 +0x1.836538p+35 +0x1.602f52p+89 +0x1.19d46cp+93 +0x1.5f842cp+106 +0x1.7ccd92p+65 +0x1.0a8b8ep+19 +0x1.f5e4c2p+46 +0x1.8245e8p+85 +0x1.e70628p+12 +0x1.d6de78p+72 +0x1.8c17f4p+44 +0x1.3d7a4ap-6 +0x1.adbb94p+120 +0x1.c87cc6p+43 +0x1.99cc74p+7 +0x1.f8ec06p+18 +0x1.faca5cp+124 +0x1.23b434p-23 +0x1.d93cf6p+0 +0x1.ea87bcp+42 +0x1.cf38f8p+71 +0x1.536422p+99 +0x1.05a9e2p+100 +0x1.3f7a3ap+39 +0x1.8c70a6p+4 +0x1.e95c9ap+86 +0x1.135a0ep+46 +0x1.e1e24p+95 +0x1.91fe44p+95 +0x1.b407b8p+33 +0x1.dd491p+112 +0x1.8a6032p+78 +0x1.da346ap+72 +0x1.97be92p+29 +0x1.865e88p+73 +0x1.b9ab6cp+71 +0x1.af54bep+110 +0x1.e371e4p+15 +0x1.7e1d94p+92 +0x1.f304bp+83 +0x1.990e44p+43 +0x1.889c7cp+103 +0x1.bd9744p-17 +0x1.47d546p-29 +0x1.f930f2p+124 +0x1.b6102p+105 +0x1.ebac74p+52 +0x1.44af08p+8 +0x1.44dfbp+83 +0x1.55e238p+43 +0x1.a39c2p+28 +0x1.91faacp+107 +0x1.36d48cp+85 +0x1.e2d052p+104 +0x1.4825fcp+81 +0x1.97ab88p+47 +0x1.e3597cp-26 +0x1.a8ecf6p+27 +0x1.5cbf28p-24 +0x1.43c954p+23 +0x1.33f908p-9 +0x1.30f61ap+36 +0x1.43fafcp-19 +0x1.c2df2p+91 +0x1.e36e44p+26 +0x1.cf461cp-28 +0x1.994accp+125 +0x1.f6f952p+35 +0x1.37c426p-2 +0x1.26b718p+86 +0x1.aa1014p-27 +0x1.8d3cf8p+66 +0x1.d05446p+17 +0x1.34b966p+43 +0x1.401e0cp+41 +0x1.48070cp+91 +0x1.0db642p+4 +0x1.683af4p+121 +0x1.9a1162p+114 +0x1.30ca88p+9 +0x1.e79f4ep+55 +0x1.48725cp+16 +0x1.798c2p+106 +0x1.5913dcp-7 +0x1.e4f136p+63 +0x1.0a67c8p-9 diff --git a/benchtests/log2p1f-inputs b/benchtests/log2p1f-inputs new file mode 100644 index 0000000000..50a9739476 --- /dev/null +++ b/benchtests/log2p1f-inputs @@ -0,0 +1,2888 @@ +## args: float +## ret: float +## includes: math.h +## name: workload-spec2017.wrf +0x1.fe4c3p-1 +0x1.0e33e6p+1 +0x1.00000ap+0 +0x1.900028p+4 +0x1.f8cdeep+0 +0x1.332986p+7 +0x1.493696p+0 +0x1p+0 +0x1.38c67p+7 +0x1.029046p+1 +0x1.1bd31cp+4 +0x1.bb3e3ep+12 +0x1.000098p+0 +0x1.a7971p+7 +0x1p+0 +0x1.0001a8p+0 +0x1.00004ep+0 +0x1p+0 +0x1.0606f2p+0 +0x1.3e54a8p+11 +0x1.3a0662p+3 +0x1.000c72p+0 +0x1p+0 +0x1.0bf8b6p+0 +0x1.000204p+0 +0x1.500ad2p+0 +0x1p+0 +0x1.3e4cfp+8 +0x1.00006cp+0 +0x1.54f7fp+0 +0x1.267858p+0 +0x1.191ccp+0 +0x1.0cdb18p+1 +0x1.29bf1ep+15 +0x1.64bd92p+1 +0x1.255534p+0 +0x1p+0 +0x1.93bb82p+3 +0x1.1348ep+1 +0x1.00456ep+0 +0x1.08afbcp+8 +0x1.32c37ep+0 +0x1.3437cep-1 +0x1.000214p+0 +0x1.03d5ap+0 +0x1.172378p+6 +0x1p+0 +0x1.330f22p-1 +0x1.00b91p+0 +0x1.e831f2p+15 +0x1.092318p+9 +0x1p+0 +0x1.e80902p+7 +0x1.71ec54p+2 +0x1.1935dcp+0 +0x1.651082p+14 +0x1p+0 +0x1.0f41d8p+8 +0x1.17f4p+0 +0x1.7cf946p+9 +0x1.b14396p+0 +0x1.92f94p+1 +0x1.2f3784p-1 +0x1p+0 +0x1.305ad4p-1 +0x1.002a08p+0 +0x1.3e338p+5 +0x1.1863f6p+8 +0x1p+0 +0x1.ed8fd8p+58 +0x1p+0 +0x1p+0 +0x1.215fc8p+9 +0x1.1965bep+16 +0x1.00031cp+0 +0x1.00011p+0 +0x1p+0 +0x1.e384fep-20 +0x1p+0 +0x1.00020cp+0 +0x1.007e24p+0 +0x1.b14346p+0 +0x1.243ff8p+0 +0x1.3f6ac2p+3 +0x1.816ff6p+5 +0x1.0115ap+8 +0x1.162028p+16 +0x1.62692cp+0 +0x1.0227c8p+1 +0x1.4dda3ep+0 +0x1.418696p+0 +0x1.0272f4p+2 +0x1.62c6ecp+5 +0x1.3cd07ap+18 +0x1.0191eap+0 +0x1.21c3a2p+8 +0x1p+0 +0x1.000bf6p+0 +0x1.a4b51cp+7 +0x1.04d1f8p+0 +0x1.8de2b8p+0 +0x1.7b7a4ep+8 +0x1.1928acp+5 +0x1.305a8p-1 +0x1.ba8662p+5 +0x1p+0 +0x1.ab75a2p-12 +0x1.7cc13cp+9 +0x1.505306p+0 +0x1.63085p+0 +0x1.000064p+0 +0x1.b3f16ap+7 +0x1.1348f8p+1 +0x1.71fe88p+1 +0x1.0b7132p+4 +0x1.470316p+1 +0x1.3228b6p-1 +0x1.8dd666p+0 +0x1.38ed88p+12 +0x1.432218p+0 +0x1.00e0cap+0 +0x1.73eb44p+2 +0x1p+0 +0x1p+0 +0x1.bda15ep+7 +0x1.0272fep+2 +0x1.00171ep+0 +0x1p+0 +0x1.3faa86p+3 +0x1.33c2a2p-1 +0x1.3e48e2p+7 +0x1.017ef2p+0 +0x1.30115ap-1 +0x1.587444p+0 +0x1.3efed8p+8 +0x1.8a5526p+0 +0x1.cb1ecap+15 +0x1.1f5cp+0 +0x1.0001a4p+0 +0x1.1a20dap+7 +0x1.376e6p+0 +0x1.0001aap+0 +0x1.9182f6p-1 +0x1.000292p+0 +0x1.3d46a2p+12 +0x1.e177b6p+7 +0x1.3f5646p+1 +0x1.2ab784p+9 +0x1.dc81b4p+1 +0x1.0ef326p+0 +0x1.996588p-12 +0x1.740848p+3 +0x1.00016p+0 +0x1.ffd51ap+52 +0x1p+0 +0x1.4461ap+4 +0x1.08e7bcp+51 +0x1p+0 +0x1.106e98p+3 +0x1.5490e4p+0 +0x1.46703cp+4 +0x1.6b1e86p-29 +0x1.324caap+0 +0x1.0467ccp+0 +0x1.424574p+0 +0x1p+0 +0x1.001da4p+0 +0x1.364604p+0 +0x1p+0 +0x1.0951e2p+8 +0x1.408994p+0 +0x1.0003ap+0 +0x1.619e92p+12 +0x1.313e72p+2 +0x1.8b47p-6 +0x1.2190fp+2 +0x1.20aaacp+0 +0x1.f0059cp-1 +0x1p+0 +0x1.018e78p+0 +0x1.313e1p+2 +0x1p+0 +0x1.2efce4p-1 +0x1.5ebdap+0 +0x1p+0 +0x1.5e2488p+51 +0x1.bf95f2p+5 +0x1.5a1124p+16 +0x1.73bad6p+1 +0x1.00048ap+0 +0x1.0c9beap+8 +0x1p+0 +0x1.358c08p+7 +0x1.7f834ep-26 +0x1.3e56bcp+15 +0x1.52d8b2p+15 +0x1p+0 +0x1.00109cp+0 +0x1.0a0bb2p+0 +0x1p+0 +0x1.026908p+6 +0x1.370f22p+0 +0x1.5c6c5ap+1 +0x1.7fe4bcp+2 +0x1p+0 +0x1p+0 +0x1.42be68p+49 +0x1.0000d8p+0 +0x1.3abdf8p+12 +0x1.370a44p-12 +0x1.aef9f4p+0 +0x1.00001ep+2 +0x1.017c2p+0 +0x1.00b614p+0 +0x1.32f9f8p-1 +0x1p+0 +0x1.00ebf2p+0 +0x1.0c3116p+0 +0x1.00004p+0 +0x1.03b992p+0 +0x1p+0 +0x1.24eb3cp+0 +0x1.4c73ecp+51 +0x1.fad3ep+1 +0x1p+0 +0x1.32368ap-1 +0x1.000908p+0 +0x1.5ea59ep+12 +0x1.1928ccp+5 +0x1p+0 +0x1.21a93cp+8 +0x1p+0 +0x1.0001e8p+0 +0x1.95b6c2p-12 +0x1.00002p+0 +0x1.2399fap+9 +0x1.449b44p+0 +0x1p+0 +0x1.64a766p+15 +0x1.06ccecp+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.c81f9cp+1 +0x1.5ef196p+0 +0x1.022822p+1 +0x1.99beep+3 +0x1.1f417p+8 +0x1p+0 +0x1.c08726p+5 +0x1.397d9ep+0 +0x1.88e748p+18 +0x1.3b319p+9 +0x1.2fd3b6p-1 +0x1.0001aep+0 +0x1.4a0562p+5 +0x1.4e5f1ap+0 +0x1p+0 +0x1.017fbp+0 +0x1.acaf56p+57 +0x1.ef7d66p+8 +0x1.736c3cp+1 +0x1.12ddbep+0 +0x1.b85ebcp+6 +0x1.0e259p+1 +0x1.5cc2c4p+2 +0x1.99e614p+3 +0x1.f30aa6p+2 +0x1.3911c6p+15 +0x1.119b92p+1 +0x1.352a3p-1 +0x1.0001b2p+0 +0x1.00b26p+0 +0x1.bd730ep+60 +0x1.54fc5p+0 +0x1.5a4804p+0 +0x1.ff7eaep-1 +0x1.5cc268p+2 +0x1.1077aap+2 +0x1.1723d6p+0 +0x1p+0 +0x1p+0 +0x1.30c17p-1 +0x1.000648p+0 +0x1.91aa4cp+6 +0x1.17234p+6 +0x1p+0 +0x1.6d5b18p+2 +0x1.00027ap+0 +0x1.dc8224p+1 +0x1.a9eabep-6 +0x1.099edcp+1 +0x1.004118p+1 +0x1.58d5fcp+60 +0x1.000098p+0 +0x1.004e8p+0 +0x1.f32edap-1 +0x1.0394aep+0 +0x1.0689bp+2 +0x1.124e5cp+0 +0x1.71fe86p+1 +0x1.025ce2p+0 +0x1.46107cp+0 +0x1.047c74p+2 +0x1.a57e74p+15 +0x1.18bbcep+0 +0x1p+0 +0x1.65b9a4p+0 +0x1.0000eep+0 +0x1.08a4a4p+0 +0x1.0fe774p+1 +0x1.000128p+0 +0x1.3e95fp+12 +0x1.b14e3ap-56 +0x1.00007cp+0 +0x1.5619c2p+1 +0x1.4ac958p+0 +0x1.00031p+0 +0x1.003064p+0 +0x1.e119eap-1 +0x1.577b36p+0 +0x1p+0 +0x1.26ff2ap+0 +0x1.004ap+0 +0x1.0000a2p+0 +0x1.1fcc7ep+4 +0x1.6f959p+16 +0x1.000064p+0 +0x1.375c6ap+0 +0x1.6a806ep+2 +0x1p+0 +0x1.8e27aep+1 +0x1p+0 +0x1.000b22p+0 +0x1.8f0c12p+0 +0x1.192892p+5 +0x1.2bcaacp+1 +0x1.984264p+2 +0x1.0034cp+0 +0x1p+0 +0x1.abf4dp+0 +0x1.001044p+0 +0x1.0d26f4p+0 +0x1.626906p+0 +0x1.8bf0c2p+5 +0x1.02d288p+0 +0x1.900128p+4 +0x1.bbbbcp+12 +0x1.45fa5p+0 +0x1p+0 +0x1.01bef2p+0 +0x1.524f26p+2 +0x1.083b0ep+0 +0x1.4811e4p+0 +0x1.0163a8p+0 +0x1.9570fap+15 +0x1.3022f2p-1 +0x1.14c73ap+0 +0x1.0009d8p+0 +0x1.056b92p+63 +0x1.0025a4p+0 +0x1.36aad4p+17 +0x1.05c244p+8 +0x1.d00886p+17 +0x1.001188p+0 +0x1.3376ecp-1 +0x1.6719c8p+16 +0x1.02495p+0 +0x1.fd9bacp-1 +0x1.3882c6p+6 +0x1.3cb358p+0 +0x1.0ec93ep+0 +0x1.4fd2bap+1 +0x1.f8b68p+1 +0x1.33b1f2p-1 +0x1.ba7f4cp+1 +0x1p+0 +0x1.44a3d2p-17 +0x1.9a6a8p+2 +0x1.00918ap+6 +0x1.30d50ep-1 +0x1p+0 +0x1.0001bep+0 +0x1.05b93ep+0 +0x1.aa9d98p+0 +0x1.039b74p+0 +0x1.1ac25ep+8 +0x1p+0 +0x1.12b23ap+1 +0x1.4c5c52p+0 +0x1.07de64p+0 +0x1.950f94p+1 +0x1.001caap+47 +0x1.0a9448p+0 +0x1.01026cp+0 +0x1.03d74ap+0 +0x1p+0 +0x1.0032dap+0 +0x1.380922p-1 +0x1.c0e7ccp+15 +0x1.a35e4p+4 +0x1.25b1e6p+0 +0x1.000044p+2 +0x1.05ac24p+7 +0x1.1fa744p+44 +0x1.0007b2p+0 +0x1.2cca62p+2 +0x1.04be3ap+6 +0x1.00065p+0 +0x1.2b9f3ap+1 +0x1.74085p+3 +0x1p+0 +0x1.01fc4cp+0 +0x1.e137bcp+2 +0x1.097ac8p+0 +0x1.ad1458p+4 +0x1.c8587cp+1 +0x1.31d172p-1 +0x1.0b414ap+1 +0x1.664e36p+1 +0x1.30ae16p-1 +0x1p+0 +0x1.3b7e3cp+2 +0x1.9cc348p+64 +0x1p+0 +0x1p+0 +0x1.cdb384p-32 +0x1p+0 +0x1.00b998p+0 +0x1.36b69ep-1 +0x1.939538p+4 +0x1.dc9deep+4 +0x1.36f86ep+2 +0x1.02113cp+0 +0x1.035852p+0 +0x1.9de428p+2 +0x1.369814p+1 +0x1.147f44p+3 +0x1.031bc8p+0 +0x1.03f7cp+0 +0x1.000924p+0 +0x1.145e14p+2 +0x1.0000d4p+0 +0x1p+0 +0x1.54fdfp+2 +0x1.07c0ep+0 +0x1.829aeep+1 +0x1.000f08p+0 +0x1.34dcdp-1 +0x1p+0 +0x1.cd56e4p+1 +0x1.16400ap+8 +0x1p+0 +0x1.00000ap+2 +0x1.00a21p+0 +0x1.8d6286p+6 +0x1.de4f28p+1 +0x1.9f55b6p+48 +0x1.01c802p+0 +0x1.0327cp+0 +0x1.32fb52p-1 +0x1p+0 +0x1.2525dcp+0 +0x1.91da28p-6 +0x1.5a23a8p+0 +0x1.5f024ap+1 +0x1p+0 +0x1.0008f2p+0 +0x1.05563cp+0 +0x1.89381cp+0 +0x1.8bb056p+16 +0x1.7cc93ep+1 +0x1.8bf0acp+5 +0x1.1722bap+6 +0x1p+0 +0x1.00238ep+0 +0x1.ebb8d2p-1 +0x1.001194p+0 +0x1.6cd388p+1 +0x1.08e4bp+8 +0x1.00002p+0 +0x1.01a0bep+0 +0x1.00e7cep+8 +0x1.1193p+0 +0x1.06a9c8p+0 +0x1.11c7fep+0 +0x1.5ef17cp+0 +0x1.4ae72cp+0 +0x1.e0df4cp+41 +0x1.7e5468p+1 +0x1.8dd478p+0 +0x1.3c2784p+51 +0x1p+0 +0x1p+0 +0x1.b9d454p+12 +0x1.011a58p+0 +0x1.3efb48p+4 +0x1.000208p+0 +0x1.57b3eep+7 +0x1.000004p+0 +0x1.1cd6b8p+0 +0x1.c366fap+9 +0x1.466d2cp+0 +0x1p+0 +0x1.300096p-1 +0x1p+0 +0x1.bef388p+0 +0x1.0c20e8p+8 +0x1.397f2p+4 +0x1.037596p+2 +0x1.62a0a4p+52 +0x1.37269ap+0 +0x1.81fe24p+2 +0x1.dd4196p+56 +0x1.b143ep+0 +0x1p+0 +0x1.b8c2fp+1 +0x1.056b3ep+1 +0x1.3b6cbp+0 +0x1.3ffb2p+0 +0x1p+0 +0x1.3c21cp+0 +0x1.00312cp+0 +0x1p+0 +0x1.3822f8p+0 +0x1.02734p+2 +0x1.05a7dap+0 +0x1.6df1b4p+5 +0x1.0006f4p+0 +0x1.31aebep-1 +0x1p+0 +0x1p+0 +0x1.b997fap+18 +0x1.0570d8p+0 +0x1p+0 +0x1.0a9216p+42 +0x1.ef16f2p+1 +0x1p+0 +0x1.31269ep-1 +0x1.a9954ap+2 +0x1.1cc5e8p+0 +0x1.01d334p+0 +0x1.905f98p+4 +0x1.0310d4p+0 +0x1.16a62ap+0 +0x1.8dd6b2p+0 +0x1.395dcep+7 +0x1.ef5f92p+0 +0x1.000868p+0 +0x1p+0 +0x1.844a16p+2 +0x1.452efcp+0 +0x1p+0 +0x1.1c5da2p+6 +0x1.31ac3ap-1 +0x1.cc1bfp+2 +0x1p+0 +0x1.08215ap+0 +0x1.3b4306p+0 +0x1.71fe6p+1 +0x1.192bd8p+0 +0x1.262f78p+0 +0x1.00013cp+0 +0x1.33c486p-1 +0x1.000014p+0 +0x1.b8f4fp+1 +0x1.5f9f5ap-1 +0x1.059872p+0 +0x1p+0 +0x1.58168p+1 +0x1.826d5cp+0 +0x1p+0 +0x1.032a04p+0 +0x1p+0 +0x1.0c0a5cp+0 +0x1.668d9p+0 +0x1.2f9644p-1 +0x1p+0 +0x1.1821b8p+6 +0x1.b22e8ep+7 +0x1.4f7a78p+0 +0x1.52df24p+0 +0x1.48c612p+0 +0x1.93a19ap+4 +0x1.8bf102p+5 +0x1.122d94p+0 +0x1p+0 +0x1.00018p+0 +0x1.30083ap-1 +0x1p+0 +0x1p+0 +0x1.30d20ep-1 +0x1p+0 +0x1.0000dcp+0 +0x1.285bb4p+0 +0x1p+0 +0x1.0003a4p+0 +0x1p+0 +0x1.2ffcfcp-1 +0x1.093d96p+0 +0x1.239bfcp+0 +0x1.f7c33cp-27 +0x1.a9982ep+2 +0x1.1969f4p+4 +0x1.ff5c88p-1 +0x1.04db6ep+2 +0x1p+0 +0x1.f010dap-1 +0x1.13647p+7 +0x1p+0 +0x1.ea6e18p-10 +0x1.2d16eap+0 +0x1.02b668p+0 +0x1.191704p+4 +0x1.18f2b4p+0 +0x1.b186eap+0 +0x1.24c01ap+2 +0x1.6a3adap+16 +0x1p+0 +0x1p+0 +0x1.2f9f28p-1 +0x1.4b5da4p+0 +0x1.004054p+0 +0x1.002616p+8 +0x1.561954p+1 +0x1p+0 +0x1.4c4394p+0 +0x1.1eed34p+1 +0x1.a702eap+5 +0x1.ee054p+7 +0x1.1156a8p+0 +0x1.9a81fcp+2 +0x1.10ce16p-28 +0x1.b18b88p+0 +0x1.d9c4a8p+1 +0x1.0e275cp+0 +0x1.905f58p+4 +0x1p+0 +0x1.02f774p+0 +0x1.7ce226p+1 +0x1.0002bcp+0 +0x1.010f58p+0 +0x1p+0 +0x1.000198p+0 +0x1p+0 +0x1.4aa832p+0 +0x1.0006c2p+0 +0x1.358ca4p+7 +0x1.1edc64p+0 +0x1.003508p+0 +0x1.fdb69p+1 +0x1.0ff4fep+0 +0x1p+0 +0x1.b8c2fp+1 +0x1.284c16p+0 +0x1.00a228p+0 +0x1.03080cp+0 +0x1.91a8f4p+48 +0x1p+0 +0x1.2080fep+1 +0x1.0002f8p+0 +0x1.b14338p+0 +0x1.081288p+0 +0x1.71b9bep+0 +0x1.09c368p+0 +0x1.35ed64p+0 +0x1.8dd68cp+0 +0x1.d2cc42p+0 +0x1.9be0ecp+3 +0x1.7407fcp+3 +0x1.313ecp-1 +0x1.cdc978p+0 +0x1.0ed538p+1 +0x1.159af4p+8 +0x1p+0 +0x1.128694p+0 +0x1.2f1b06p-1 +0x1.19c0d8p+0 +0x1.dcc7c8p+1 +0x1.a33f8ap+7 +0x1.000158p+0 +0x1p+0 +0x1.28bdaep-16 +0x1.74086cp+3 +0x1.ea297cp+1 +0x1.5d87fp+2 +0x1.0e2658p+1 +0x1.621c14p+1 +0x1.9d8a8cp+3 +0x1p+0 +0x1.7807e8p+3 +0x1.74c924p+0 +0x1.a484e4p+53 +0x1.771c44p+0 +0x1.13d1e4p+2 +0x1.2fa402p-1 +0x1p+0 +0x1.024d72p+2 +0x1.064c6ap+8 +0x1.15d2dep+0 +0x1.9c004ep+3 +0x1.bc2fcap+12 +0x1.befdbep+0 +0x1.36461p+0 +0x1.6db7b8p+5 +0x1.0000cp+0 +0x1p+0 +0x1.02f354p+0 +0x1p+0 +0x1.000228p+0 +0x1.013fep+0 +0x1.213782p+0 +0x1p+0 +0x1.000204p+0 +0x1.a69cccp+7 +0x1.0036acp+0 +0x1.0982b8p+0 +0x1.81693cp-22 +0x1.1e5d64p+6 +0x1.0009f2p+0 +0x1.2fe96p-1 +0x1.0368f8p+0 +0x1.2d2cbep+0 +0x1.37bc04p-1 +0x1p+0 +0x1.d45d88p+1 +0x1.000694p+0 +0x1.000272p+0 +0x1p+0 +0x1.d0b2e6p+1 +0x1.2598a4p+3 +0x1p+0 +0x1.8b7d3p+2 +0x1.192902p+5 +0x1.3d5386p+0 +0x1.9c779ap+1 +0x1.08257cp+0 +0x1.0b8a4p+2 +0x1.01afa4p+3 +0x1.e48b7ap-1 +0x1.f30a5cp+2 +0x1.0df814p+0 +0x1.2f28p-1 +0x1.983f46p+3 +0x1.009094p+6 +0x1.326a3ep-1 +0x1.9767e6p+0 +0x1.1027fp+0 +0x1.3274f8p-1 +0x1.197a9cp+1 +0x1.3807p+2 +0x1.90533p+4 +0x1.0332ecp+0 +0x1.3ca37p+0 +0x1p+0 +0x1p+0 +0x1.3ff4dcp+0 +0x1p+0 +0x1.900046p+0 +0x1p+0 +0x1.195576p+5 +0x1.aec2ecp+7 +0x1.65b984p+0 +0x1.74677p+3 +0x1.423322p+0 +0x1.aeef9ep+16 +0x1.0338c4p+0 +0x1.1ae22ap+8 +0x1.cc4adcp+0 +0x1.d20a9ep+0 +0x1.cdbefcp-45 +0x1.03b23cp+0 +0x1.25970cp+3 +0x1.e6b02ep-1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.000aa8p+0 +0x1.0054a4p+0 +0x1.06600ap+0 +0x1.b8601cp+6 +0x1.fea92cp+5 +0x1.6p+5 +0x1.c76586p+0 +0x1.90007ap+0 +0x1.ef2d1p-84 +0x1.03d5b6p+0 +0x1.0164ecp+0 +0x1.4441d8p+0 +0x1.005c42p+0 +0x1.046838p+0 +0x1.51f04ap+0 +0x1.cf822cp+0 +0x1.033b4ap+0 +0x1p+0 +0x1.091bep+0 +0x1p+0 +0x1.5bb2a4p+0 +0x1.01fe2cp+0 +0x1.2b96p+1 +0x1.242d9p+0 +0x1.42ade4p+0 +0x1p+0 +0x1.689714p+2 +0x1.4ac756p+0 +0x1p+0 +0x1.101ad8p+0 +0x1.6208e8p+41 +0x1.47091p+0 +0x1.3e28p+3 +0x1.04b70ep+0 +0x1p+0 +0x1.086c9p+0 +0x1.70eb62p+54 +0x1.dfb744p+4 +0x1p+0 +0x1.f302bcp-8 +0x1.8d5fd4p+6 +0x1.12d9a8p+0 +0x1.00a39p+0 +0x1p+0 +0x1.00003cp+0 +0x1.00031p+0 +0x1.58743ep+0 +0x1.003ae4p+0 +0x1.7de5cep+2 +0x1.096c7ep+0 +0x1.57e436p+1 +0x1.21fcb4p+2 +0x1.31297ap-1 +0x1p+0 +0x1.ab5fcp+16 +0x1.91e912p+42 +0x1.5cb206p+1 +0x1.000072p+0 +0x1.00f4d2p+0 +0x1.0ee52p+0 +0x1.000014p+0 +0x1.2f3a5ep-1 +0x1.3fc07cp+1 +0x1.64bd36p+1 +0x1.f48f56p-1 +0x1.0115f4p+0 +0x1.1650bcp+2 +0x1.013494p+0 +0x1p+0 +0x1.684e92p+0 +0x1.0063a4p+0 +0x1.3ca364p+0 +0x1.197a48p+1 +0x1.00a6f4p+0 +0x1.31ce92p-1 +0x1.fea91ep+5 +0x1.6dd5cep+5 +0x1.05035ep+8 +0x1.6d6acep+5 +0x1.8c4fa2p+5 +0x1.f4e59cp-12 +0x1.6330e4p+0 +0x1.01a9fep+0 +0x1.4f48e4p+0 +0x1.d589c6p+1 +0x1.5be04ap+15 +0x1.f9e2f2p-1 +0x1.294bdp+1 +0x1.8bf1p+5 +0x1.967eb8p-9 +0x1.018d04p+0 +0x1.00032cp+0 +0x1p+0 +0x1.ba21bcp+14 +0x1.8dd6bp+0 +0x1.7455a8p+3 +0x1p+0 +0x1.8e8a02p+15 +0x1.015f06p+0 +0x1.04a26p+8 +0x1.000c58p+0 +0x1.26a58cp+3 +0x1.2719bap-19 +0x1p+0 +0x1.05194cp+7 +0x1.34d9f4p+0 +0x1p+0 +0x1.029fa2p+0 +0x1.99a9dap+0 +0x1.cee06ep+0 +0x1.3e921ap+0 +0x1.9f8eep+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.13f606p+0 +0x1p+0 +0x1.0a176ep+2 +0x1.aa9c94p+7 +0x1.1211ep+0 +0x1.122594p+0 +0x1.b39642p+47 +0x1p+0 +0x1.000068p+0 +0x1.6600aep-12 +0x1.e0d6ecp+1 +0x1.0019ep+0 +0x1.34b8f4p-1 +0x1.581728p+2 +0x1.00016p+0 +0x1.12b1ep+8 +0x1.a679fp+14 +0x1.90005ap+4 +0x1.837996p-1 +0x1p+0 +0x1.0e2552p+1 +0x1.22160cp+9 +0x1p+0 +0x1.57e4b4p+1 +0x1p+0 +0x1.bf8d0cp+0 +0x1.d7e10ep+16 +0x1.06bcc8p+0 +0x1.133b12p+0 +0x1.1b6542p+6 +0x1p+0 +0x1.feddbcp-1 +0x1p+0 +0x1p+0 +0x1.2fd98ep-1 +0x1.03d5b6p+0 +0x1p+0 +0x1.db8a46p-1 +0x1.42e588p+0 +0x1.0ee1p+1 +0x1.361fep+0 +0x1.2f74a8p+0 +0x1p+0 +0x1.31596cp-1 +0x1.740a2p+3 +0x1p+0 +0x1.8dd672p+0 +0x1.00011cp+0 +0x1p+0 +0x1.000102p+0 +0x1.5cc2b2p+2 +0x1p+0 +0x1.17f4b4p+0 +0x1.619318p+12 +0x1.b14362p+0 +0x1.c1004ep+0 +0x1.318578p-1 +0x1.9728ecp+2 +0x1.25bdbcp+3 +0x1.37ac8ap+63 +0x1p+0 +0x1.41ef56p+2 +0x1.e65866p-1 +0x1p+0 +0x1.307e0ap+0 +0x1.ef570ep+54 +0x1.0290fap+1 +0x1.9dd308p+0 +0x1.21db9p+0 +0x1.00003cp+0 +0x1.eabf94p+0 +0x1.386614p+10 +0x1.f244dap+16 +0x1p+0 +0x1.00e094p+0 +0x1.5605e6p+1 +0x1.b16374p+2 +0x1.9a2d88p+0 +0x1.48748ap+9 +0x1p+0 +0x1.28e674p+0 +0x1.bf4324p+7 +0x1.2598c6p+3 +0x1.215484p+1 +0x1.05fb5p+51 +0x1.0000d8p+0 +0x1.f389dcp+6 +0x1.41a1bp+0 +0x1.001582p+0 +0x1.1928ecp+5 +0x1.00ff3ep+0 +0x1.3883c4p+13 +0x1.98b044p+2 +0x1.8a43eep+0 +0x1.733e8p+14 +0x1.73ebfcp+2 +0x1.0cd1fp+0 +0x1p+0 +0x1.af357p+5 +0x1.b2c586p+5 +0x1.470f58p+0 +0x1p+0 +0x1p+0 +0x1.0ffddep+0 +0x1.02c422p+1 +0x1.56c4a6p+1 +0x1.492014p-47 +0x1.192862p+5 +0x1p+0 +0x1.c7e222p+7 +0x1p+0 +0x1p+0 +0x1.1a0d3p+49 +0x1.946148p+0 +0x1.524f6ap+2 +0x1.31566ep-1 +0x1.000198p+0 +0x1.3d7efcp+3 +0x1.000264p+0 +0x1.4ed7ccp+0 +0x1.b667ecp+0 +0x1.81940ep+1 +0x1p+0 +0x1.088e6cp+0 +0x1.065bbcp+1 +0x1.009ae4p+1 +0x1.008bfp+6 +0x1.e9f5acp+7 +0x1.1e1c44p+8 +0x1.992348p+0 +0x1.3162fp+0 +0x1.fb0e1ap+48 +0x1.8bf0acp+5 +0x1p+0 +0x1.1f57b2p+60 +0x1.011f3p+0 +0x1.3af642p+0 +0x1.ccae9p+46 +0x1.21325cp+0 +0x1.07743p+7 +0x1.1ae49ep+8 +0x1.00006ap+0 +0x1.1928aap+5 +0x1.838206p-1 +0x1p+0 +0x1.00e9e8p+0 +0x1.4684cap+0 +0x1.02568p+0 +0x1.5efc62p+1 +0x1p+0 +0x1.000352p+0 +0x1.0578cap+0 +0x1.0039ecp+0 +0x1.2fc412p-1 +0x1.4a939ap+1 +0x1.ff27ep+5 +0x1.091a62p+0 +0x1.08c012p+0 +0x1.67c8p+4 +0x1.e26b74p-48 +0x1p+0 +0x1.283076p+3 +0x1.2fe494p-1 +0x1.4dcd9ep+5 +0x1p+0 +0x1.cdf4e4p+7 +0x1p+0 +0x1.c77d16p+1 +0x1.fccf76p-1 +0x1p+0 +0x1.120a84p+0 +0x1.054cdep+0 +0x1.002a0cp+0 +0x1.063b76p+0 +0x1.0000d8p+0 +0x1.30cedep-1 +0x1.003884p+0 +0x1p+0 +0x1.e0065cp-1 +0x1.693bd2p+15 +0x1.0fadc2p+0 +0x1.415d06p+0 +0x1.0002ecp+0 +0x1.27ce08p+0 +0x1.3b9762p+0 +0x1.2fb36p+2 +0x1.02c8f8p+0 +0x1.629facp+50 +0x1.281c56p+3 +0x1.4a93c8p+1 +0x1.0e6cacp-1 +0x1.f9ef4ap+0 +0x1.44f78ap+2 +0x1.9a1e18p+0 +0x1p+0 +0x1.3e566p+3 +0x1.000128p+0 +0x1p+0 +0x1.112c38p+0 +0x1.03d2dap+0 +0x1.5fb222p+12 +0x1.1f4b96p+0 +0x1.01422p+1 +0x1.ee5728p+63 +0x1.4bcdd8p+1 +0x1p+0 +0x1.30e0e4p-1 +0x1.6a36b2p+0 +0x1.00016cp+0 +0x1.04b966p+0 +0x1.106e16p+16 +0x1p+0 +0x1.1233d2p+0 +0x1p+0 +0x1.15d1cap+1 +0x1.137c02p+8 +0x1.00001ap+0 +0x1.07ab74p+0 +0x1.800b4ep-1 +0x1.55047p+0 +0x1.90017ap+4 +0x1.5c9898p+1 +0x1.8ce4ccp+6 +0x1p+0 +0x1.6ee34p+0 +0x1.bf600cp+0 +0x1.f13a7ep+8 +0x1.00015cp+0 +0x1.b9c51ep+12 +0x1.740826p+3 +0x1.c29e5p+1 +0x1.f56ba8p-1 +0x1.37fe18p+2 +0x1.190eap+0 +0x1.419f1cp+0 +0x1p+0 +0x1p+0 +0x1.20687ep+8 +0x1.938ecap+4 +0x1.01dd1cp+0 +0x1.bbe888p+7 +0x1.09d802p+0 +0x1.cf3b8p+0 +0x1.ea0d98p-1 +0x1.172472p+6 +0x1p+0 +0x1.61dce4p+1 +0x1.20b4fcp+0 +0x1.00038cp+0 +0x1p+0 +0x1.0822p+0 +0x1.9966ep+2 +0x1.21f47cp+0 +0x1.3a9762p+0 +0x1.8c4e0cp+5 +0x1p+0 +0x1.61878cp+12 +0x1.3ca348p+0 +0x1.289028p+0 +0x1.06e004p+0 +0x1.02b4b4p+0 +0x1.144eeep+1 +0x1.30a14ap-1 +0x1.07652p+0 +0x1p+0 +0x1.2ef288p+0 +0x1.1ba73cp+5 +0x1.48c714p+2 +0x1.25c508p+3 +0x1.b14382p+0 +0x1.b39acep+0 +0x1.0001c2p+0 +0x1.996938p+3 +0x1p+0 +0x1.e49b2ep+7 +0x1.000436p+0 +0x1.34712p+0 +0x1.47089p+0 +0x1.0353b8p-49 +0x1.2a818p+2 +0x1.00058p+0 +0x1.8a5a7ep+51 +0x1p+0 +0x1.8dbf04p+0 +0x1.5004d8p+61 +0x1.9557b2p+1 +0x1.0fa92cp+0 +0x1.16984ep+8 +0x1.72bd7ap+1 +0x1.980f0cp+1 +0x1.ae63fp+14 +0x1p+0 +0x1.085224p+0 +0x1.d8889ap-1 +0x1.1d3ff6p+4 +0x1.02c6ecp+1 +0x1.73eb4ep+2 +0x1.1916fp+4 +0x1.4a04e8p+5 +0x1.134906p+1 +0x1.0002dp+0 +0x1p+0 +0x1.32db7p+0 +0x1.0105b8p+0 +0x1.09f78p+0 +0x1.1d3e78p+4 +0x1.41b184p+0 +0x1.134914p+1 +0x1.410e6ep+1 +0x1.312a4ap-1 +0x1.7308f4p+1 +0x1p+0 +0x1.0afbe8p+0 +0x1p+0 +0x1.00026ap+0 +0x1.2ee012p+0 +0x1.001318p+0 +0x1.af1034p+4 +0x1.687b1cp-24 +0x1.a93ap+2 +0x1.084598p+0 +0x1.37031ap-1 +0x1.c046ep+5 +0x1.79a75ep+2 +0x1.46a9c8p+1 +0x1.000766p+0 +0x1.245d98p+0 +0x1.19287ap+5 +0x1.6a0fbep+0 +0x1p+0 +0x1.011424p+0 +0x1.879f4cp+0 +0x1p+0 +0x1p+0 +0x1.4ca7ecp-51 +0x1.5818c6p+2 +0x1p+0 +0x1.b4c9fap+7 +0x1.b14384p+0 +0x1.082fdp+0 +0x1.085672p+8 +0x1.918f3cp+6 +0x1p+0 +0x1.45623ep+0 +0x1.95515cp+2 +0x1.000068p+0 +0x1.31f33ap-1 +0x1.f9eed8p+0 +0x1.91b218p+6 +0x1.331446p-1 +0x1.000202p+0 +0x1p+0 +0x1.3cdfb8p-1 +0x1p+0 +0x1.08fb58p+7 +0x1.4dde38p+5 +0x1p+0 +0x1.0053a4p+0 +0x1p+0 +0x1.31e138p+7 +0x1p+0 +0x1.01c35cp+0 +0x1.dba85cp+7 +0x1.03682cp+2 +0x1.000108p+0 +0x1.bff348p+55 +0x1.582dbp+1 +0x1.31158p+0 +0x1.760bep+44 +0x1.e43226p+7 +0x1.082008p+0 +0x1.a03e4cp+7 +0x1.00b984p+0 +0x1.20c58ep+1 +0x1.221c1p+0 +0x1.594056p+7 +0x1.aabf58p+2 +0x1p+0 +0x1.b142e4p+0 +0x1.8bf166p+5 +0x1p+0 +0x1.000168p+0 +0x1.06c69cp+0 +0x1.900166p+4 +0x1.621b64p+12 +0x1.b142eep+0 +0x1p+0 +0x1.31c642p-1 +0x1p+0 +0x1.65b9cap+0 +0x1.4adbbep+0 +0x1p+0 +0x1.858ea2p+0 +0x1.076d06p+0 +0x1.000dap+0 +0x1.70cd96p+2 +0x1.347a2p-1 +0x1.73c75cp+2 +0x1p+0 +0x1.180c6ep+8 +0x1p+0 +0x1.1a32dcp+5 +0x1.342abp-1 +0x1.4a08p+5 +0x1.000484p+0 +0x1.e498b4p+7 +0x1.91e072p+0 +0x1p+0 +0x1.9ab2a8p+0 +0x1.0001dp+0 +0x1.6ab22p+0 +0x1.00036p+0 +0x1.00042cp+0 +0x1.0012a2p+0 +0x1.f2b45cp+0 +0x1.31b8fep-1 +0x1.2a3f48p+1 +0x1p+0 +0x1.d8ecc8p+49 +0x1.b143b2p+0 +0x1.4f7516p+0 +0x1.09a35cp+0 +0x1.000ap+0 +0x1.ad259ap+5 +0x1.8d9b38p-18 +0x1.92ef44p+0 +0x1.7407ep+3 +0x1.bcb74cp+7 +0x1.57d22p+0 +0x1.610e16p+0 +0x1.2ff3fap-1 +0x1.00aefcp+0 +0x1.6aaf1cp+0 +0x1.000298p+0 +0x1.10b236p+0 +0x1.2b6a4p+0 +0x1.25c852p+3 +0x1.000354p+0 +0x1p+0 +0x1.4fe4c2p+2 +0x1.8ea358p+6 +0x1.cd77f6p+2 +0x1.0000aap+0 +0x1.8c2a1ep-19 +0x1.000264p+0 +0x1.03001p+0 +0x1.0c772cp+0 +0x1.daea4p+4 +0x1p+0 +0x1.0f2d5ep+0 +0x1p+0 +0x1.1604d6p+0 +0x1.2f7b08p-1 +0x1.0002f4p+0 +0x1p+0 +0x1.91aaf8p+1 +0x1.896624p+0 +0x1.0024c2p+0 +0x1.0fde8cp+1 +0x1.3a7214p+16 +0x1.01ff8p+0 +0x1.02458p+1 +0x1.1d3f4cp+4 +0x1p+0 +0x1.c0d546p+1 +0x1.0ac2d4p+54 +0x1p+0 +0x1p+0 +0x1.75e65p+55 +0x1p+0 +0x1.010256p+0 +0x1.68165p+53 +0x1p+0 +0x1.013c3p+0 +0x1.bc712ep+13 +0x1p+0 +0x1.71d1cp+5 +0x1.49c482p+0 +0x1.00665p+0 +0x1.386324p+1 +0x1.385c4ap-1 +0x1p+0 +0x1.379e5p+0 +0x1.232592p+8 +0x1p+0 +0x1.000338p+0 +0x1p+0 +0x1p+0 +0x1.055404p+0 +0x1.208ef8p+1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.015d52p+0 +0x1.9ea35cp+1 +0x1.dc7eb4p+18 +0x1p+0 +0x1p+0 +0x1.b3d24ep+7 +0x1.fba328p+8 +0x1.00c7fp+0 +0x1.0d1acep+8 +0x1.779a24p+2 +0x1p+0 +0x1.19499ep+0 +0x1.25ddcep+3 +0x1.78346cp+3 +0x1.428e7ap+49 +0x1.003dp+0 +0x1p+0 +0x1.313dbcp-1 +0x1.6fef7p+1 +0x1p+0 +0x1.2ff116p-1 +0x1.00f598p+0 +0x1.45ab88p+0 +0x1p+0 +0x1.a93a36p+2 +0x1p+0 +0x1.54bb7p+2 +0x1p+0 +0x1.00004cp+0 +0x1.edac12p+0 +0x1.40f4fap+0 +0x1.45c0bcp+0 +0x1.0a2626p+0 +0x1.bfa67ap+51 +0x1.933f18p+0 +0x1p+0 +0x1.3f3fe8p+0 +0x1.006fc8p+0 +0x1.c04aecp+1 +0x1.0afc4p+0 +0x1.9b2f1ep+3 +0x1.11a134p+3 +0x1.0624dep-11 +0x1.eabf94p+0 +0x1.8950d8p+1 +0x1.35eba2p-1 +0x1.11c438p+0 +0x1.02073p+0 +0x1.483096p+0 +0x1.484bf4p+2 +0x1.1b86dcp+0 +0x1.0d3c56p+0 +0x1.0000e4p+0 +0x1.a93b64p+2 +0x1.b8db1cp+1 +0x1.308c0ep-1 +0x1p+0 +0x1.1e84fp+0 +0x1.3fc808p+0 +0x1.19179ap+4 +0x1p+0 +0x1.f1d3a4p+7 +0x1.273d1ep+1 +0x1.000a16p+0 +0x1.42ead6p+0 +0x1.b8c318p+1 +0x1.7226dp+1 +0x1.43af5cp+0 +0x1.450224p+0 +0x1.000234p+0 +0x1.358bc4p-1 +0x1.0000acp+0 +0x1.02ef5cp+0 +0x1.1d16fap+8 +0x1p+0 +0x1.0a9be6p+0 +0x1.2221d2p+8 +0x1.45abbp+0 +0x1p+0 +0x1.b787f6p-12 +0x1.960416p+0 +0x1.0af8b6p+1 +0x1.232048p+64 +0x1.f6b2fp+0 +0x1p+0 +0x1.02fc3ep+0 +0x1.19292ep+5 +0x1.00fdcap+0 +0x1.51ac2p+1 +0x1.020b04p+0 +0x1.3fe772p+1 +0x1p+0 +0x1.3a87dap+0 +0x1.00dbf8p+0 +0x1.dc825cp+1 +0x1.051eap+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.000bp+0 +0x1.004874p+0 +0x1.ed7906p+14 +0x1.ba64fcp+12 +0x1.03e86ap+0 +0x1.5cdd2p+2 +0x1.2fc1c6p-1 +0x1.08a1b8p+0 +0x1p+0 +0x1.4e97bp+62 +0x1.364392p+0 +0x1.000236p+0 +0x1.32f478p-1 +0x1.362732p+4 +0x1.1d3f0ep+4 +0x1.205236p+44 +0x1p+0 +0x1.93afd4p+2 +0x1.2f40ecp-1 +0x1p+0 +0x1.0fe4a4p+1 +0x1.9975e8p+64 +0x1.4a93fap+1 +0x1.259756p+3 +0x1.1e1e64p+8 +0x1.000048p+0 +0x1p+0 +0x1.2f1f74p-1 +0x1.7a124ap+0 +0x1.5e3f8ep+2 +0x1.e58cd8p-1 +0x1.b3857ep+0 +0x1.6f4da4p+0 +0x1p+0 +0x1.44caaep+0 +0x1.6831b2p+0 +0x1.7537bep+1 +0x1p+0 +0x1.003054p+0 +0x1.4934p+2 +0x1.00005p+0 +0x1.000098p+0 +0x1.091ebcp+0 +0x1.465e2cp+9 +0x1.00017p+0 +0x1p+0 +0x1.31ab6cp-1 +0x1p+0 +0x1p+0 +0x1.f2386ep+57 +0x1.147d32p+3 +0x1.e480eep+7 +0x1.03b3b2p+0 +0x1.02035cp+0 +0x1.11d934p+3 +0x1.5776d8p+53 +0x1.2c73p+0 +0x1.63073ap+9 +0x1.2041aep+8 +0x1p+0 +0x1.00594cp+0 +0x1.3ee136p+0 +0x1p+0 +0x1.09548p+1 +0x1.05f1f4p-11 +0x1.0002a4p+0 +0x1.16ac18p+3 +0x1.b8531ep+7 +0x1.0fd73cp+1 +0x1.011f64p+0 +0x1.0ff65ep+0 +0x1.b1ecfp+4 +0x1.8f0888p+0 +0x1.f95e02p-1 +0x1p+0 +0x1.9000cep+0 +0x1.e9b4fep+52 +0x1.009838p+0 +0x1.5ef598p+1 +0x1.a6ad24p+7 +0x1.4913c6p+0 +0x1p+0 +0x1.3d7314p+0 +0x1p+0 +0x1.a591c8p+0 +0x1.017966p-13 +0x1.9825cep+3 +0x1.192898p+5 +0x1.cddc2p+42 +0x1p+0 +0x1p+0 +0x1.0dde0ap+8 +0x1.0e56e8p+1 +0x1.a6fbcep+3 +0x1.b92cc8p+7 +0x1.d57268p+0 +0x1.b8f132p+1 +0x1.4c257ap+0 +0x1.00000ap+0 +0x1.38635p+1 +0x1.1cc07ap+45 +0x1.71ff7ep+1 +0x1.ef8b44p+0 +0x1.6cf93ep+51 +0x1p+0 +0x1p+0 +0x1.11f506p+8 +0x1.77844ap+0 +0x1p+0 +0x1.bdd978p+7 +0x1.00006ap+0 +0x1.0e2602p+1 +0x1.045486p+0 +0x1.0002c8p+0 +0x1.4d67c8p+1 +0x1.e5b314p-1 +0x1.6a374cp+0 +0x1.99db52p+0 +0x1.f9eeap-1 +0x1.bf7f2cp+5 +0x1.da61b4p+4 +0x1.488ff4p+0 +0x1.003p+0 +0x1p+0 +0x1.02ffcp+0 +0x1.d09a76p+1 +0x1.225a2cp+0 +0x1.0637f2p+0 +0x1.b3893p+0 +0x1.00005p+0 +0x1.bcc5ccp+59 +0x1p+0 +0x1.01f38ep+0 +0x1.a720ecp+7 +0x1.05390cp+1 +0x1.bf3ffep+2 +0x1.6b9574p+0 +0x1.388f0cp+11 +0x1.29a6aap+0 +0x1.31e90ep-1 +0x1p+0 +0x1p+0 +0x1.2f1498p-1 +0x1.0000eep+0 +0x1p+0 +0x1.3190e2p-1 +0x1p+0 +0x1.7703c2p+1 +0x1.0ffd1cp-24 +0x1p+0 +0x1p+0 +0x1.f5c25p-24 +0x1.7407c8p+3 +0x1.45abd2p+0 +0x1.1304ecp+0 +0x1p+0 +0x1.0002f4p+0 +0x1.cd1cdap+1 +0x1.6ef2fp+15 +0x1.0002cap+0 +0x1.dc83cp+1 +0x1.0000ccp+0 +0x1.0093cep+0 +0x1.0066bap+0 +0x1.002dp+0 +0x1.0e6c8p+0 +0x1.7be50ap+16 +0x1.00b348p+0 +0x1.089b3p+16 +0x1.98b07cp+2 +0x1.3389b2p+0 +0x1.a41e1ep+7 +0x1.7195dep+5 +0x1.08b45cp+0 +0x1.29c1eap+56 +0x1.740b96p+3 +0x1.71fef4p+1 +0x1.07ba2cp+0 +0x1.5ee4a2p+1 +0x1p+0 +0x1.f9599cp-1 +0x1.b9154ep+14 +0x1.f8911cp+0 +0x1p+0 +0x1.373e1p+4 +0x1p+0 +0x1.00146cp+0 +0x1.4a05acp+5 +0x1.1928aap+5 +0x1.060cecp+0 +0x1.773996p+0 +0x1.af11c2p-11 +0x1p+0 +0x1.3f7d98p+7 +0x1.1361ep+52 +0x1.f9f064p+0 +0x1p+0 +0x1.a9b908p+7 +0x1.c55b46p+0 +0x1p+0 +0x1.682ec4p+46 +0x1.00003p+0 +0x1p+0 +0x1.2fdba4p-1 +0x1.9beca4p+0 +0x1.0004a8p+0 +0x1.2fb262p-1 +0x1.8bf118p+5 +0x1.0001aap+0 +0x1.31a74p-1 +0x1.25db7ep+3 +0x1p+0 +0x1.197a7cp+1 +0x1p+0 +0x1.2d315cp+0 +0x1.0024f8p+0 +0x1.2a7f04p+1 +0x1p+0 +0x1p+0 +0x1.01211cp+0 +0x1.f11d7ep-1 +0x1.d4f718p+2 +0x1.b233dep+0 +0x1.6d6b1cp+5 +0x1.7724fep+15 +0x1p+0 +0x1.a86fbap+7 +0x1p+0 +0x1p+0 +0x1.4aa984p+49 +0x1.000054p+0 +0x1p+0 +0x1.33d3f4p-1 +0x1p+0 +0x1.1b0cd8p+6 +0x1.000958p+0 +0x1p+0 +0x1.49ef4ep+4 +0x1.7cc648p+1 +0x1p+0 +0x1.23470ap+0 +0x1.3223a4p+0 +0x1p+0 +0x1.4d6912p+0 +0x1.51e25p+0 +0x1p+0 +0x1.34962cp+0 +0x1.0fdd0cp+1 +0x1.0001d8p+0 +0x1.38637cp+1 +0x1.9de754p+3 +0x1.8e020cp+5 +0x1.ad9158p+4 +0x1.094afap+0 +0x1.ea949ep+52 +0x1.ec6aa4p+1 +0x1.1a5e6cp+4 +0x1.07ed56p+0 +0x1.711ffp+0 +0x1p+0 +0x1.062702p+8 +0x1.233ffap+18 +0x1.10c252p+7 +0x1.002a14p+0 +0x1.98f468p+0 +0x1.833884p+0 +0x1p+0 +0x1.9179acp+4 +0x1.d944c4p-1 +0x1.00bc84p+0 +0x1p+0 +0x1.46c0aep+0 +0x1.ad157p+4 +0x1.13492cp+1 +0x1.4b0ceep+0 +0x1.000246p+0 +0x1p+0 +0x1p+0 +0x1.176dbep+0 +0x1.52e1b8p+0 +0x1.050ab8p+0 +0x1p+0 +0x1.ef2d1p-84 +0x1.d0999p+1 +0x1.00b594p+0 +0x1.19ae42p+54 +0x1p+0 +0x1p+0 +0x1.bf05cap-56 +0x1.fba48p+0 +0x1.19a5ecp+4 +0x1.000518p+0 +0x1.cd1cc6p+1 +0x1.0008d2p+0 +0x1.00291cp+0 +0x1.01ae5cp+0 +0x1.18229cp+0 +0x1.0000d6p+0 +0x1.00017p+0 +0x1.1083fep-25 +0x1p+0 +0x1.7d379ap+9 +0x1.2f5e0ep-1 +0x1.365e38p+0 +0x1.000912p+0 +0x1.8p+3 +0x1.13e39cp+1 +0x1p+0 +0x1.0ba4aep+0 +0x1.9deafcp+3 +0x1.2fead4p-1 +0x1p+0 +0x1.11a49cp+16 +0x1.968f3ap+62 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.b85f8ep+6 +0x1.141a8ep+8 +0x1.0564ecp+0 +0x1.c6b168p+2 +0x1.05b106p+8 +0x1.000298p+0 +0x1p+0 +0x1.0001fap+0 +0x1.000164p+0 +0x1.31a84p+0 +0x1p+0 +0x1.403f5cp+5 +0x1.ea62dep-1 +0x1p+0 +0x1.131eeep+1 +0x1.3625d8p+4 +0x1.066f0cp+0 +0x1.e7a64p+7 +0x1.047e06p+0 +0x1p+0 +0x1.32aad8p-1 +0x1p+0 +0x1.000118p+0 +0x1.1b0d0cp+6 +0x1.a11c9p+0 +0x1.a2588ep+54 +0x1p+0 +0x1p+0 +0x1.09ffa8p+8 +0x1.bb2a7cp+5 +0x1p+0 +0x1.a1f9p+0 +0x1p+0 +0x1.f3d4b4p-1 +0x1.4dc16ap+5 +0x1.3b2274p+4 +0x1.457d56p+0 +0x1.01cfcp+0 +0x1p+0 +0x1.a93982p+2 +0x1.04054cp+0 +0x1.0080fap+0 +0x1.dc801cp+0 +0x1.0b77bep+1 +0x1.013094p+0 +0x1.0001e8p+0 +0x1.02e2ep+0 +0x1p+0 +0x1.000094p+0 +0x1.fb4382p-1 +0x1.00019p+0 +0x1.0007b8p+0 +0x1.127e1ap+8 +0x1p+0 +0x1p+0 +0x1.0e25cp+1 +0x1.2f4b78p+1 +0x1.015b26p+8 +0x1.0eb20cp+0 +0x1.081558p+7 +0x1.42ff58p+0 +0x1.1c5d1p+6 +0x1.887b42p+14 +0x1.02904p+1 +0x1.7ce25ap+1 +0x1.f96d6p-1 +0x1.5c64f4p+0 +0x1.0005c8p+0 +0x1.78e9d4p-33 +0x1.da628ep+4 +0x1.003634p+0 +0x1.3184d6p-1 +0x1.bd96f4p+6 +0x1.ba5156p+12 +0x1.8df4acp+0 +0x1p+0 +0x1.a3b92p+7 +0x1.3e4f26p+11 +0x1.543868p+4 +0x1.eabfe6p+0 +0x1.0073e6p+0 +0x1.0f2bdep+8 +0x1.3e3c3ep+13 +0x1.3884dp+6 +0x1p+0 +0x1.690fecp+0 +0x1.dfa074p-1 +0x1.000638p+0 +0x1.4a93acp+1 +0x1.8dd68ap+0 +0x1.0048dcp+0 +0x1.002f8ep+0 +0x1.00015p+0 +0x1.45abbcp+0 +0x1.f3f306p-1 +0x1.1b639p+0 +0x1.ef2d1p-84 +0x1.abd54p+0 +0x1.36f8aap+2 +0x1.e317cep-1 +0x1.36f9cap+2 +0x1.530ddp+0 +0x1.2f74bp+0 +0x1.3c4448p+0 +0x1.0718dcp+0 +0x1.0001bp+0 +0x1p+0 +0x1.1d3ebap+4 +0x1.42e55ap+0 +0x1.3ace3ep+50 +0x1.5b5108p+1 +0x1.13527cp+3 +0x1.0002ap+0 +0x1.6f3ebcp+2 +0x1.b0af06p+7 +0x1.016c28p+0 +0x1p+0 +0x1.4542a6p+0 +0x1p+0 +0x1.6120cep+55 +0x1.02a2p+0 +0x1.0714d6p+15 +0x1.21293ep+0 +0x1.023b38p+0 +0x1.000d12p+0 +0x1.4d9f06p+15 +0x1p+0 +0x1.dd3bb4p-1 +0x1p+0 +0x1.00029ep+0 +0x1.eabfa8p+0 +0x1.362a2ep+0 +0x1.000a5ap+48 +0x1.dfbac8p+4 +0x1.259742p+3 +0x1.0000acp+0 +0x1.00cc58p+1 +0x1.49155ep+0 +0x1p+0 +0x1p+0 +0x1.30d9ap-1 +0x1.02fc6p+0 +0x1.3cac76p+0 +0x1.b8c472p+1 +0x1.8bf1bcp+5 +0x1.2cd56p+0 +0x1.1d37a6p+0 +0x1p+0 +0x1.6b03dep+2 +0x1p+0 +0x1.4bc794p+0 +0x1.dc56e6p+1 +0x1.b1432ap+0 +0x1.5a6574p+2 +0x1.a21356p+4 +0x1.6269ep+64 +0x1.0000dp+0 +0x1.10766cp+7 +0x1.0096e6p+0 +0x1.adf486p+0 +0x1.309de8p-1 +0x1.085fb4p+0 +0x1.3afb0ep+0 +0x1.0002a2p+0 +0x1.085208p+0 +0x1.213daap+8 +0x1.000a5ap+0 +0x1.503f0cp+0 +0x1.000428p+0 +0x1.7ee7d4p+16 +0x1.8e5064p+61 +0x1.3f6054p+7 +0x1.3a78a6p+0 +0x1.0a197ap+0 +0x1.016ea8p+0 +0x1.0bbb28p+8 +0x1.000014p+0 +0x1.0010d4p+0 +0x1.5983f8p-26 +0x1.2dddep+0 +0x1.3f4af4p+0 +0x1.15f078p+0 +0x1p+0 +0x1.8ffae8p-20 +0x1.0000a4p+0 +0x1.4f32a8p+0 +0x1.8bf1f2p+5 +0x1.0000fp+0 +0x1.1e9612p+0 +0x1.000512p+0 +0x1.000184p+0 +0x1p+0 +0x1.4a071ap+5 +0x1.316586p-1 +0x1.026922p+0 +0x1.9323dcp+3 +0x1.0530acp+0 +0x1.18125p+0 +0x1.e39054p-1 +0x1.3ad2p+11 +0x1.005ad4p+0 +0x1.000208p+0 +0x1.b85f4cp+6 +0x1.002d02p+0 +0x1p+0 +0x1p+0 +0x1.da3556p+8 +0x1p+0 +0x1.02c298p+0 +0x1.11a35ep+3 +0x1.4a0a02p+1 +0x1.02741p+2 +0x1p+0 +0x1.2749a2p+0 +0x1.45abacp+0 +0x1p+0 +0x1.3920bcp+13 +0x1.000054p+0 +0x1.4ceda8p+0 +0x1p+0 +0x1.390b2p+7 +0x1.66764ep+7 +0x1p+0 +0x1.e11478p+7 +0x1.0f264cp+0 +0x1p+0 +0x1.2f7ec2p-1 +0x1p+0 +0x1.0ac6fcp+8 +0x1.3ca396p+0 +0x1.9ad138p+5 +0x1.e5b8acp+7 +0x1.0000b8p+0 +0x1.f14fd6p-11 +0x1.00009p+0 +0x1.01571ep+0 +0x1.17c726p+0 +0x1.00019p+0 +0x1.362514p+4 +0x1.004efp+0 +0x1.003f5cp+0 +0x1.43c41cp+0 +0x1p+0 +0x1.3e6c78p+12 +0x1.000c5cp+0 +0x1.3e795cp+6 +0x1.b825a6p+7 +0x1.ace64p+1 +0x1.36f8dp+2 +0x1.587484p+0 +0x1.94967ap+14 +0x1.af98e6p+17 +0x1.6488b6p+0 +0x1.1d3e98p+4 +0x1.009978p+0 +0x1.377d08p+0 +0x1.2fdc0ep+0 +0x1.045768p+0 +0x1.f9ef1ap+0 +0x1.003e4ap+0 +0x1.3e825p+9 +0x1.38da1p+0 +0x1p+0 +0x1p+0 +0x1.00d4a2p+0 +0x1.3e6838p+12 +0x1.0c24a8p+0 +0x1.00012cp+0 +0x1p+0 +0x1p+0 +0x1.001188p+0 +0x1.30be32p-1 +0x1.d20bfcp+0 +0x1.000314p+0 +0x1.467b6ap+1 +0x1.b14436p+0 +0x1.be3eccp+7 +0x1.035cc4p+0 +0x1p+0 +0x1.358ca4p+7 +0x1p+0 +0x1.052ef8p+8 +0x1.08ac7ep+0 +0x1p+0 +0x1.ef2d1p-84 +0x1p+0 +0x1.388d04p+56 +0x1.003836p+0 +0x1.65f1ecp+0 +0x1.5b141p+47 +0x1.fadea2p+0 +0x1.d1e872p+59 +0x1p+0 +0x1.acd704p+0 +0x1.d46c0ap-34 +0x1p+0 +0x1.015a84p+0 +0x1p+0 +0x1p+0 +0x1.02161ep+0 +0x1p+0 +0x1.02283cp+0 +0x1.2fb3d8p+2 +0x1.3b1854p+4 +0x1.9a69d8p+48 +0x1.f9ef08p+0 +0x1.7e849cp+3 +0x1.eabffp+0 +0x1.054884p+0 +0x1.9faadcp+7 +0x1.01dbfep+0 +0x1.a9a6aap+1 +0x1p+0 +0x1.ae82b2p+5 +0x1.423f6p-20 +0x1.42e57p+0 +0x1.41466p+2 +0x1p+0 +0x1.49ef3ep+4 +0x1.f264ccp-1 +0x1.0084dap+0 +0x1.07aabap+0 +0x1p+0 +0x1p+0 +0x1.009f06p+0 +0x1.008b44p+0 +0x1.3e2b8cp+5 +0x1.000324p+0 +0x1.0c4158p+0 +0x1.32644cp-1 +0x1.1929dp+5 +0x1.8ac548p+4 +0x1.01b036p+0 +0x1.7e3a98p+5 +0x1.34bc8p-1 +0x1.b14336p+0 +0x1.0cb4e2p+0 +0x1.b931bp+12 +0x1.2358fp+1 +0x1.f23b6cp+51 +0x1p+0 +0x1.16fa4cp+4 +0x1.0baf84p+0 +0x1.a856a8p+5 +0x1.066f6p+0 +0x1p+0 +0x1p+0 +0x1.20b7bp+0 +0x1.3fe392p+0 +0x1.388ae2p+0 +0x1.00035cp+0 +0x1.3adcf2p+12 +0x1.30393p-1 +0x1.e17338p+1 +0x1.aa6b1ap+7 +0x1.0000b6p+0 +0x1p+0 +0x1.345b46p-1 +0x1.74921cp+8 +0x1.b29bd6p+7 +0x1p+0 +0x1.77c706p+2 +0x1.c4d8ecp+65 +0x1.8d98bp+0 +0x1.8b8002p-6 +0x1.3881ecp+15 +0x1.010cd4p+0 +0x1.c8fdaap+7 +0x1.72b958p+2 +0x1.965c1cp+3 +0x1p+0 +0x1p+0 +0x1.2a515cp+0 +0x1.cd1e9p+1 +0x1.006674p+0 +0x1p+0 +0x1.66e4cp+2 +0x1.13aa9ep+8 +0x1p+0 +0x1.13101cp+1 +0x1.0004ecp+0 +0x1p+0 +0x1.c51ad2p+7 +0x1p+0 +0x1.2a0908p+8 +0x1.000182p+0 +0x1.ac40fcp+2 +0x1.30f308p-1 +0x1p+0 +0x1p+0 +0x1.1ceeaep+7 +0x1.0000a4p+0 +0x1.f407acp+7 +0x1.36f98ep+2 +0x1.1c60a8p+10 +0x1.617238p+12 +0x1p+0 +0x1.48fb3ap+0 +0x1p+0 +0x1.000d5p+0 +0x1.33833cp-1 +0x1p+0 +0x1.41be46p+51 +0x1.238e58p+0 +0x1.00266cp+0 +0x1.9fc4bp+58 +0x1.000618p+0 +0x1.88a592p+48 +0x1.0001c8p+0 +0x1p+0 +0x1.51c89cp+0 +0x1.317344p+7 +0x1.308e8ap-1 +0x1p+0 +0x1.0387e6p+0 +0x1.454a32p+0 +0x1.74a828p+7 +0x1.f57daep-8 +0x1.287a44p+0 +0x1.b84b08p+2 +0x1.27fc5ap+0 +0x1p+0 +0x1.0e423p+1 +0x1p+0 +0x1.079ddp+0 +0x1.f49a74p+14 +0x1.0f47bp+0 +0x1.9000bap+4 +0x1.000244p+0 +0x1p+0 +0x1.4a38ep+0 +0x1.36f8bp+2 +0x1.6bf43cp+0 +0x1.a3a9f4p+1 +0x1.001d24p+0 +0x1.106f8ap+0 +0x1.0003ep+0 +0x1.00025p+0 +0x1.89be24p+0 +0x1.3d65b4p+6 +0x1.44b46ep+0 +0x1.5caecap+1 +0x1.00327cp+2 +0x1.54bbep+2 +0x1.2597aap+3 +0x1.059a5ap-11 +0x1.43884ep+2 +0x1p+0 +0x1.c04628p+9 +0x1p+0 +0x1.c1b9bp-49 +0x1.73ed24p+2 +0x1.000598p+0 +0x1.44105p+0 +0x1.b7c192p+5 +0x1.312178p-1 +0x1p+0 +0x1.f9efc2p+0 +0x1.014252p-51 +0x1.017a66p+0 +0x1.1f3de4p+8 +0x1.02b182p+0 +0x1.257372p+0 +0x1.93944ap+48 +0x1.e2305cp+1 +0x1.3e0ee6p-8 +0x1.00011ep+0 +0x1.a31448p+5 +0x1.8c9ca6p+48 +0x1.194216p+0 +0x1p+0 +0x1.5cc2ap+2 +0x1p+0 +0x1.506fe6p+49 +0x1.2588fp+0 +0x1.26ffaep+1 +0x1p+0 +0x1p+0 +0x1.4ff01ap+66 +0x1.00009cp+0 +0x1.000f38p+0 +0x1.00e4d6p+0 +0x1.001d5cp+0 +0x1.02b29cp+50 +0x1.358d1p+7 +0x1.3eff02p+8 +0x1.900058p+4 +0x1.3ae0bcp+13 +0x1.034d3ep+0 +0x1.b9346p+5 +0x1p+0 +0x1.71b9cp+0 +0x1.2f7456p+0 +0x1.47ccf2p+0 +0x1.498974p+0 +0x1.046cb8p+0 +0x1.458c62p+1 +0x1.a93bf4p+2 +0x1.0f113ap+8 +0x1p+0 +0x1.04ae52p+0 +0x1.7c2a68p+0 +0x1.3b24fep+9 +0x1.04ef5p-11 +0x1.11a28ap+3 +0x1p+0 +0x1.056b24p+1 +0x1.0000e4p+0 +0x1.2c01cap+0 +0x1p+0 +0x1p+0 +0x1.c61f72p+15 +0x1p+0 +0x1.02fc2ap+0 +0x1p+0 +0x1.093acep+0 +0x1.5643eap+53 +0x1p+0 +0x1.0087a8p-47 +0x1.2f5868p+0 +0x1.38e848p+10 +0x1.e5c11cp+7 +0x1p+0 +0x1.129e64p+8 +0x1.5c6c98p+1 +0x1.00015ap+0 +0x1.b745e2p+48 +0x1.1bfb08p+0 +0x1.a92b86p+5 +0x1.7c2a54p+0 +0x1p+0 +0x1.3334b6p+0 +0x1.b5c006p+5 +0x1p+0 +0x1.bec8c6p+16 +0x1p+0 +0x1.dc5496p-1 +0x1.0a88ep+0 +0x1.f95e78p+1 +0x1p+0 +0x1.0037b4p+0 +0x1.1eaf62p+8 +0x1p+0 +0x1.43bfcp+5 +0x1.3af986p+15 +0x1.03dbf4p+0 +0x1.b1b5a8p-12 +0x1p+0 +0x1.90007ep+0 +0x1.0003b4p+0 +0x1p+0 +0x1.f8f086p-12 +0x1.dd7178p+4 +0x1.00207p+0 +0x1.118916p+0 +0x1p+0 +0x1.a298c4p+7 +0x1.006a6cp+0 +0x1.1dfa5p+0 +0x1.327c54p-1 +0x1p+0 +0x1.f7e922p-1 +0x1.3e365ap+13 +0x1p+0 +0x1.04318ap+0 +0x1.52381cp+0 +0x1.60a298p-1 +0x1.000076p+0 +0x1.977c42p+14 +0x1.a8cb5cp+7 +0x1.1b0d18p+6 +0x1.29cedp+0 +0x1.15a46ap+1 +0x1p+0 +0x1.639aaep-12 +0x1.004a8cp+0 +0x1.0ab1bcp+1 +0x1.b85ecp+6 +0x1.36279ep+4 +0x1.22ae32p+8 +0x1.615228p+1 +0x1.000898p+0 +0x1.001968p+0 +0x1p+0 +0x1.2f791ap-1 +0x1.00001cp+0 +0x1p+0 +0x1.0627aep+0 +0x1.0e38d4p+5 +0x1.490936p+57 +0x1p+0 +0x1.000358p+0 +0x1.57b4bp+7 +0x1.4b4766p+0 +0x1.26da06p+0 +0x1.cd1ec6p+1 +0x1.38ee44p+15 +0x1.c0ffbcp+15 +0x1.01caacp+0 +0x1.e2a336p-1 +0x1p+0 +0x1.0c69f4p+2 +0x1.50a08cp+55 +0x1.10d0b8p+0 +0x1.1eed7p+1 +0x1.b14428p+0 +0x1.004f94p+0 +0x1.31c2acp-1 +0x1p+0 +0x1p+0 +0x1p+0 +0x1.b47948p+0 +0x1.78d5eap+51 +0x1.01316ep+0 +0x1.4a937cp+0 +0x1.1ba54ap+1 +0x1.6ba304p+0 +0x1.3591c6p-1 +0x1p+0 +0x1.08a91ap+8 +0x1.19ade8p+0 +0x1.01535ap+0 +0x1.317184p-1 +0x1.36f9a4p+2 +0x1.7f08a8p+0 +0x1p+0 +0x1.00013p+0 +0x1.ff478p-1 +0x1.27e0d2p+0 +0x1.0ecbacp+7 +0x1.8dd6acp+0 +0x1.100ecep+0 +0x1.25edd8p+8 +0x1.198a9p+0 +0x1p+0 +0x1.5c6cc2p+1 +0x1.016276p+0 +0x1.329f88p-1 +0x1.9e35ap+0 +0x1.004612p+0 +0x1.fb9b82p-1 +0x1.000d84p+0 +0x1.43e8a8p+0 +0x1.57e548p+1 +0x1.057f18p+0 +0x1.a6dfbep+7 +0x1p+0 +0x1.341ce2p-1 +0x1p+0 +0x1p+0 +0x1.fcbce2p+56 +0x1.004454p+0 +0x1.909ec2p-6 +0x1p+0 +0x1.58649p+9 +0x1.4b96e6p+49 +0x1.3ca38cp+0 +0x1.00033ep+0 +0x1.0099f4p+0 +0x1p+0 +0x1.21869p+8 +0x1p+0 +0x1.65b514p+16 +0x1p+0 +0x1.740878p+3 +0x1.a4cea2p+43 +0x1.b143fep+0 +0x1.25ed36p+4 +0x1.003d7ap+0 +0x1.0d82d4p+1 +0x1.3389ap-1 +0x1p+0 +0x1.11a222p+3 +0x1.983f38p+3 +0x1.000162p+0 +0x1.46b986p+0 +0x1.3e3e9cp+8 +0x1.58747p+0 +0x1.45632cp+0 +0x1.3f738cp+3 +0x1.00d0bp+0 +0x1.5dca1p+0 +0x1p+0 +0x1.43257p+0 +0x1.0b38fap+0 +0x1.1ca4aep+8 +0x1p+0 +0x1p+0 +0x1.319a2p-1 +0x1.2d4fd4p+5 +0x1.02f006p+0 +0x1.e0c05ap+4 +0x1.98f464p+0 +0x1.05db3ap+8 +0x1.a2bd9ep+2 +0x1.a05a58p+0 +0x1.8bf254p+5 +0x1.3eb04cp+4 +0x1.3140a6p-1 +0x1.011d98p+0 +0x1p+0 +0x1.000ac8p+0 +0x1.3b2774p+10 +0x1.44d29p+0 +0x1p+0 +0x1.009f9ep+0 +0x1.0a8702p+2 +0x1.1349bep+1 +0x1.a585b4p+7 +0x1.00f23cp+0 +0x1.338168p+0 +0x1p+0 +0x1.3e7816p+14 +0x1.0e9d14p+0 +0x1.8f53ccp+1 +0x1.28c922p+0 +0x1.6bb30ep+15 +0x1.b58932p+14 +0x1.1c682p+0 +0x1.00846p+0 +0x1.00240cp+0 +0x1.000674p+0 +0x1.2c71ep+3 +0x1.750298p+67 +0x1.364684p+0 +0x1.134676p+16 +0x1.47a244p+0 +0x1p+0 +0x1.dee22ep-1 +0x1.3e8204p+9 +0x1.00007p+0 +0x1.31f1e6p-1 +0x1p+0 +0x1.a187f8p+7 +0x1.0097e4p+0 +0x1.08e1b2p+0 +0x1.0e3e7ap+0 +0x1.0006fap+0 +0x1p+0 +0x1.358ca6p+7 +0x1.83bcacp+3 +0x1.4603f4p+0 +0x1.3093c8p+0 +0x1.5c6cap+1 +0x1.1f5efcp+0 +0x1.6ba3e8p+0 +0x1.cba7b2p+7 +0x1.015e1ep+0 +0x1.b85f58p+6 +0x1.dc835ep+1 +0x1.000598p+0 +0x1.f9551ap-1 +0x1p+0 +0x1p+0 +0x1.0a67fp+0 +0x1.1bdf58p+0 +0x1.f75026p-1 +0x1.5e3b5p+1 +0x1.3f9b72p+0 +0x1.8ff798p-51 +0x1.0115bap+0 +0x1.4e13fcp+0 +0x1.6d6c54p+5 +0x1.0e7538p+0 +0x1.dcf5d8p-12 +0x1.134aa6p+1 +0x1.b7cc8p+12 +0x1.3e46dap+12 +0x1p+0 +0x1.3fb2fep+0 +0x1p+0 +0x1p+0 +0x1.0f8834p+0 +0x1p+0 +0x1.2f8fc8p-1 +0x1.0032aap+0 +0x1.0134d4p+0 +0x1.0006ecp+0 +0x1.36f9b8p+2 +0x1.d32d7p+43 +0x1.65f516p+1 +0x1.a71662p+5 +0x1.02731cp+2 +0x1.00002cp+0 +0x1.090ap+0 +0x1.8ce46ep+6 +0x1.0001bp+0 +0x1.003c82p+0 +0x1.a2cb78p+5 +0x1.1b3cc6p+0 +0x1p+0 +0x1.000698p+0 +0x1p+0 +0x1p+0 +0x1.0a01d2p+50 +0x1.000b52p+0 +0x1.63092ep+0 +0x1.0011fcp+0 +0x1.684b74p+2 +0x1.782834p+49 +0x1.213286p+0 +0x1.2b13b6p+9 +0x1.383ep+0 +0x1.f91f5cp+2 +0x1.bf1f3cp+7 +0x1.3e44f4p+7 +0x1p+0 +0x1.4637a4p+0 +0x1.3e8c48p+12 +0x1.192a3cp+8 +0x1.0008c2p+0 +0x1p+0 +0x1.01a4b6p+8 +0x1.0002d8p+0 +0x1.001054p-6 +0x1p+0 +0x1.275d2cp+0 +0x1.320582p-1 +0x1.02643ep+0 +0x1.aa4074p+5 +0x1.02528cp+0 +0x1.0adc1p+7 +0x1.e25f42p-1 +0x1p+0 +0x1.0076ap+0 +0x1.0008acp+0 +0x1.783ba4p+3 +0x1.01af66p+0 +0x1.192eep+0 +0x1.132ea6p+7 +0x1.a93964p+2 +0x1.9bc85p+14 +0x1.1e3f46p+8 +0x1.1d8db6p+13 +0x1.0007cap+0 +0x1.2fa568p-1 +0x1.3e8fd4p+12 +0x1.2f5bf6p-1 +0x1.a0994cp+14 +0x1.7ed6b2p+0 +0x1.0f2b1ap+0 +0x1.4ab6e6p+1 +0x1.04c838p+8 +0x1.000034p+0 +0x1p+0 +0x1.eadcd6p-1 +0x1.00008p+0 +0x1.12103cp-1 +0x1p+0 +0x1p+0 +0x1.2f93bp-1 +0x1.7b4b16p+5 +0x1.38fe8cp+6 +0x1p+0 +0x1.36f96cp+2 +0x1.716462p+39 +0x1.000048p+0 +0x1.7c680ep+4 +0x1p+0 +0x1.28cbfap+0 +0x1.a416eap+41 +0x1p+0 +0x1.57e51p+1 +0x1.0004f4p+0 +0x1p+0 +0x1.3167b6p-1 +0x1.984032p+3 +0x1.04f21ep+0 +0x1p+0 +0x1.73ed4p+2 +0x1.0f4eb8p+8 +0x1p+0 +0x1.2df9p+5 +0x1.54bbf8p+2 +0x1.0bf9a4p+0 +0x1.a91d34p+63 +0x1.130ed8p+0 +0x1p+0 +0x1.00036ap+0 +0x1.3ae7aep+8 +0x1.16524ap+8 +0x1.9f774ap+0 +0x1.ba601cp+2 +0x1.bb2f0cp+12 +0x1.a93bd4p+2 +0x1.32e318p+0 +0x1.0ab44ap+0 +0x1p+0 +0x1.2f871ep-1 +0x1p+0 +0x1.a78356p+7 +0x1.001e8cp+0 +0x1.4a08dap+5 +0x1.069e1cp+0 +0x1.e3e184p+1 +0x1.f60012p+18 +0x1p+0 +0x1.b8600ep+6 +0x1.300bc6p-1 +0x1.76f83cp+6 +0x1.16f978p+0 +0x1.0003a4p+0 +0x1.0b4f22p+7 +0x1.37409cp+0 +0x1p+0 +0x1.3e95dp+12 +0x1.00098p+0 +0x1.004038p+0 +0x1.301bfep-1 +0x1p+0 +0x1.9c872ep+0 +0x1.378344p+16 +0x1.18c55cp+0 +0x1.274a0ep-20 +0x1.2811b2p+0 +0x1p+0 +0x1.ba668cp+12 +0x1.7f2c8ap+13 +0x1.0f72fcp+8 +0x1.6308a6p+0 +0x1.b0cac6p+13 +0x1.4837p+0 +0x1p+0 +0x1.40bd6cp+0 +0x1p+0 +0x1.39133p+12 +0x1.c62f4cp+46 +0x1.0004bcp+0 +0x1.12257ap+8 +0x1p+0 +0x1.85645cp+9 +0x1.4cb85ep+0 +0x1p+0 +0x1.a234a8p-1 +0x1p+0 +0x1p+0 +0x1.3cf408p-27 +0x1.0e263ep+1 +0x1.00026p+0 +0x1p+0 +0x1p+0 +0x1.332f2cp-1 +0x1.04bb28p+0 +0x1.4a67cap+0 +0x1.0003dcp+0 +0x1p+0 +0x1.3482d4p-1 +0x1.134a04p+1 +0x1p+0 +0x1.9000ecp+4 +0x1p+0 +0x1.2f4e26p-1 +0x1.0395dp+9 +0x1.38dbb4p+11 +0x1p+0 +0x1.049432p+0 +0x1.1a9a96p+8 +0x1.54bcd2p+2 +0x1.14487cp+0 +0x1.020458p+0 +0x1.000b9p+0 +0x1.32254cp-1 +0x1.73ed2ep+2 +0x1p+0 +0x1.3d8be4p+0 +0x1.3e96d4p+15 +0x1.ffa44cp-1 +0x1.11a334p+3 +0x1.08317p+0 +0x1.000238p+0 +0x1.3e498p+9 +0x1.3389eap-1 +0x1.36f9ccp+2 +0x1.0bbe0ap+0 +0x1.0b53f4p+8 +0x1p+0 +0x1.0e42d2p+0 +0x1.d22332p+18 +0x1p+0 +0x1.05197ep+0 +0x1.205a74p+1 +0x1p+0 +0x1.0086dp+0 +0x1p+0 +0x1.296a6cp+0 +0x1.7ced1p+2 +0x1p+0 +0x1p+0 +0x1.0053eep+0 +0x1.09c5dcp+0 +0x1p+0 +0x1.a07194p+9 +0x1.0a151ap+0 +0x1.01e6ccp+0 +0x1.ef2d1p-84 +0x1.8eb89cp+3 +0x1.15dbb6p+0 +0x1.00307ap+0 +0x1.03571ep+0 +0x1.f5292ep-1 +0x1.59f064p+0 +0x1.0e26a8p+1 +0x1.6d6ab4p+5 +0x1.7ad0fcp+6 +0x1.40fc28p+0 +0x1.c6b9p+14 +0x1.071bfcp+0 +0x1.b0cb28p+7 +0x1.1614b2p+1 +0x1.4bdc7ep+0 +0x1.358db8p+7 +0x1.405dp+3 +0x1.0461d4p+0 +0x1p+0 +0x1.a8b5b2p+7 +0x1.130dbap+7 +0x1.259792p+3 +0x1.2fcf92p-1 +0x1.0092d2p+0 +0x1.0fea96p+0 +0x1.000024p+0 +0x1.a0abccp+5 +0x1.3b1076p+0 +0x1.192914p+5 +0x1.85f5dap-9 +0x1.0b2ae8p+0 +0x1.dc84ap+1 +0x1.2121acp+8 +0x1.b144fep+0 +0x1.131a68p+1 +0x1.28131p+0 +0x1.35dc48p+5 +0x1.b81b5p-51 +0x1.0a1caep+0 +0x1.f9ef34p+0 +0x1.95da52p+0 +0x1p+0 +0x1.3032a2p-1 +0x1.1cc56ep+0 +0x1.c77bfcp+0 +0x1.05370ep+0 +0x1.d6d0c6p+2 +0x1.2fbfap-1 +0x1p+0 +0x1.0000b8p+2 +0x1.b8c316p+1 +0x1.00010cp+0 +0x1.028104p+0 +0x1p+0 +0x1.13f12cp+0 +0x1p+0 +0x1p+0 +0x1.fb7e4ep+53 +0x1p+0 +0x1.780d04p+9 +0x1.1973c4p+6 +0x1.b09184p+0 +0x1.b4ed32p+51 +0x1p+0 +0x1.00b82p+0 +0x1.198ba4p+0 +0x1.57b63cp+7 +0x1.0016d4p+0 +0x1p+0 +0x1.01a3e4p+0 +0x1.e8d11ep+44 +0x1.b7e5d4p+13 +0x1.00667cp+0 +0x1.06ed08p+0 +0x1.05f47ap+0 +0x1.4aa86ap+0 +0x1.04aeap+0 +0x1p+0 +0x1p+0 +0x1.3b13a8p+11 +0x1.596846p+47 +0x1.0d8c64p+0 +0x1.0012aap+0 +0x1p+0 diff --git a/benchtests/tgammaf-inputs b/benchtests/tgammaf-inputs new file mode 100644 index 0000000000..b2baf5c020 --- /dev/null +++ b/benchtests/tgammaf-inputs @@ -0,0 +1,1006 @@ +## includes: math.h +## args: float +## ret: float + +# Random inputs in [-a,a=0x1.18522ep+5) +# where a is the smallest number such that tgammaf rounds to +Inf (to nearest) +0x1.714acp+2 +0x1.0f4884p+4 +-0x1.16b54p+1 +0x1.238ef4p+4 +0x1.4896ap+4 +-0x1.714e7p+2 +0x1.c254cp+4 +0x1.c76928p+3 +0x1.0b82acp+5 +-0x1.a4d6dp+2 +0x1.16f3ap+2 +0x1.43a5bp+2 +-0x1.da2ef8p+4 +0x1.f7c01p+2 +0x1.f5b698p+4 +-0x1.3dcbccp+3 +0x1.34238p+3 +-0x1.0b6364p+5 +-0x1.1c820cp+4 +-0x1.bcdeccp+4 +0x1.481cdp+3 +0x1.83fbf8p+4 +0x1.18504cp+5 +-0x1.b65098p+4 +0x1.5aa868p+4 +-0x1.8f06ap+3 +-0x1.a8d468p+2 +0x1.11a554p+5 +0x1.b47368p+4 +0x1.df0d08p+4 +-0x1.f80fcap+4 +0x1.c9cda4p+4 +0x1.785454p+4 +-0x1.af1b08p+2 +-0x1.0f6e86p+5 +0x1.869148p+3 +0x1.054cp+1 +0x1.f545dp+4 +-0x1.20e18p+1 +0x1.ec8cd8p+4 +-0x1.047434p+5 +-0x1.059518p+5 +0x1.6c32bp+2 +0x1.e72af8p+4 +-0x1.8e6d38p+4 +-0x1.5173ep+2 +0x1.0df39p+5 +-0x1.98be5p+4 +0x1.d16e8p-1 +-0x1.8d11ap+2 +-0x1.10bc48p+5 +0x1.99a9bp+3 +0x1.ea951p+2 +-0x1.38a44p+3 +-0x1.e303f2p+4 +0x1.3efc18p+3 +-0x1.d4510cp+3 +0x1.10a078p+3 +0x1.75f644p+4 +-0x1.b0b2c2p+4 +-0x1.dc58ep+1 +0x1.be8c2p+2 +-0x1.ad4244p+4 +0x1.4bdd88p+3 +0x1.7e3b98p+3 +-0x1.47af9p+2 +-0x1.26b82p+2 +-0x1.d8bd38p+4 +0x1.348244p+4 +0x1.5b6f4p+0 +-0x1.0f1764p+5 +-0x1.eea53p+2 +0x1.17cdbp+4 +-0x1.c0d6fp+1 +0x1.5d8fbcp+4 +-0x1.46e70cp+4 +0x1.a7379p+2 +-0x1.c537b8p+2 +0x1.65fdfp+2 +-0x1.573a14p+4 +-0x1.f6d328p+2 +0x1.3fa52p+3 +-0x1.9e64d4p+3 +-0x1.d1f208p+4 +0x1.daff8p+1 +-0x1.f85f48p+3 +-0x1.aa2b78p+4 +-0x1.1d6d14p+3 +0x1.06be64p+5 +-0x1.00671cp+4 +0x1.eeb7p-2 +0x1.10efdp+2 +0x1.de3fc8p+4 +-0x1.1da752p+4 +0x1.76392p+4 +-0x1.acd59p+4 +0x1.3db448p+3 +-0x1.2ef648p+4 +-0x1.30f1e8p+4 +-0x1.d3de8ep+4 +-0x1.e9566p+3 +-0x1.9ea03cp+3 +-0x1.f0158p-1 +-0x1.ff9bbp+1 +-0x1.3a3454p+3 +-0x1.87b4e4p+3 +0x1.3ea26p+1 +0x1.638248p+4 +-0x1.125e42p+4 +0x1.cc892cp+4 +0x1.b01cap+4 +0x1.d24a08p+3 +0x1.a2a1e8p+4 +0x1.15e17p+5 +0x1.10825p+5 +0x1.daad88p+4 +-0x1.21f976p+4 +-0x1.031fbcp+4 +-0x1.17fd7ep+5 +0x1.126018p+4 +-0x1.e621bp+4 +0x1.c4cf78p+3 +0x1.53dcd4p+4 +-0x1.8b519cp+4 +-0x1.69dacp+0 +0x1.4172ep+2 +0x1.160e68p+4 +0x1.a7da7p+4 +-0x1.decd6cp+4 +0x1.4b2bap+3 +0x1.806868p+3 +0x1.427174p+4 +-0x1.f04p-2 +0x1.0c93d8p+4 +0x1.093c6p+2 +-0x1.082e6ep+5 +-0x1.181a92p+5 +-0x1.19dfbp+2 +-0x1.98fef8p+2 +0x1.a77e94p+4 +0x1.1ad3cp+0 +-0x1.39c9bcp+3 +-0x1.ea251cp+4 +0x1.dec54p+2 +0x1.cc7e1cp+4 +0x1.6d9f1p+2 +-0x1.fe9198p+2 +-0x1.026232p+4 +0x1.08ad5p+5 +-0x1.43db28p+4 +-0x1.c4139ap+4 +0x1.bd6538p+4 +-0x1.a1ca9p+3 +-0x1.100adap+4 +0x1.1642p+5 +0x1.5a583p+3 +-0x1.902c5ap+4 +0x1.12f3ap+3 +0x1.0762a4p+5 +0x1.dea9e8p+4 +0x1.73af2p+4 +-0x1.51b6p+2 +0x1.e5fdf8p+3 +-0x1.2cdf44p+3 +-0x1.15518ep+5 +0x1.8481cp+1 +0x1.14c8ap+5 +-0x1.e34466p+4 +-0x1.2e8a6ep+4 +-0x1.edbcap+2 +-0x1.a34a2p+3 +0x1.62ba48p+4 +-0x1.48a09cp+3 +0x1.365f9p+2 +-0x1.e31778p+3 +0x1.373324p+4 +0x1.2a03p+2 +-0x1.4304dcp+4 +0x1.abb9dcp+4 +0x1.0dc9ap+5 +-0x1.b292f4p+4 +0x1.c72028p+3 +-0x1.78e0a4p+4 +-0x1.25c21cp+4 +0x1.155e5p+2 +-0x1.edba2p+3 +-0x1.dc87a6p+4 +0x1.44f16p+3 +-0x1.35781p+3 +0x1.b1acfp+4 +-0x1.c4c57p+3 +-0x1.c6ca42p+4 +-0x1.619604p+3 +-0x1.1f1f2p+2 +0x1.1ed8p+0 +0x1.76619cp+4 +-0x1.382454p+3 +-0x1.5270ep+1 +-0x1.16be2p+1 +0x1.4062fp+2 +-0x1.9fd7a8p+2 +-0x1.e1d9d8p+4 +0x1.ad37d8p+3 +-0x1.c78fecp+4 +-0x1.fbc6bp+2 +-0x1.e4c7dcp+3 +0x1.e5efp+2 +-0x1.28d7c8p+4 +0x1.72d978p+3 +0x1.37137cp+4 +-0x1.53ec9cp+3 +0x1.66a2bp+3 +0x1.9a4ep-3 +0x1.1140e4p+4 +0x1.16ed74p+5 +0x1.a82d78p+3 +0x1.975b0cp+4 +0x1.ca4ebp+3 +-0x1.589c6ap+4 +0x1.8ef3cp+2 +0x1.e2b6p+2 +-0x1.6b87f8p+2 +0x1.24f1e8p+4 +0x1.3a7a8p+4 +-0x1.f984f2p+4 +-0x1.a401p-1 +0x1.956ec8p+4 +-0x1.db5688p+4 +0x1.36f2ap+3 +-0x1.d1107p+3 +-0x1.b25828p+2 +-0x1.ffd308p+4 +0x1.3ec6c4p+4 +-0x1.721c04p+4 +0x1.d9e568p+4 +0x1.a293a8p+3 +0x1.10c4d8p+5 +0x1.cbe78p+0 +0x1.1052c8p+3 +0x1.32e02p+1 +0x1.be4b2p+4 +0x1.b1e164p+4 +-0x1.4dedb8p+4 +-0x1.52518cp+3 +-0x1.ddb38p-1 +-0x1.42cd08p+4 +0x1.2154d4p+4 +-0x1.067cc8p+4 +-0x1.767908p+4 +-0x1.3a2d44p+4 +-0x1.705b12p+4 +-0x1.de6e8p+0 +0x1.626488p+4 +-0x1.69fe64p+4 +-0x1.9f53eep+4 +-0x1.d6668p+0 +0x1.40e7c8p+4 +0x1.0f18bp+2 +0x1.7d9204p+4 +-0x1.40e0c2p+4 +0x1.3ca2p-1 +0x1.d0cf4p+4 +-0x1.9af13p+1 +0x1.49159p+3 +0x1.0e886cp+4 +-0x1.387932p+4 +-0x1.76d0b2p+4 +0x1.e3a888p+4 +0x1.95945p+3 +-0x1.f11fccp+3 +-0x1.f94b88p+3 +-0x1.5c3164p+4 +0x1.7042fp+4 +0x1.7b4304p+4 +0x1.193fcp+0 +-0x1.a69a94p+3 +0x1.fca03p+2 +0x1.a8b48p+1 +-0x1.4b058cp+3 +0x1.f889cp+4 +0x1.216c5cp+4 +0x1.4abf8p+3 +-0x1.903e98p+3 +0x1.002418p+5 +-0x1.81bd24p+4 +0x1.bcd70cp+4 +-0x1.27c00ap+4 +0x1.82ff1p+2 +0x1.a61df8p+3 +0x1.cc60d8p+3 +-0x1.36d58p+4 +0x1.35c0e4p+4 +-0x1.0cca7ap+5 +-0x1.f7191p+1 +0x1.064398p+5 +0x1.326608p+3 +0x1.6e83ep+3 +0x1.f9d508p+4 +0x1.aef608p+4 +-0x1.78885cp+4 +0x1.2a9f6p+4 +-0x1.3852c4p+4 +0x1.f53fe8p+4 +0x1.54b6cp+0 +-0x1.07f15cp+5 +-0x1.6d6c6cp+4 +0x1.836434p+4 +-0x1.f2d5b8p+2 +0x1.28f9c8p+3 +0x1.7e7d6cp+4 +-0x1.dcc444p+4 +0x1.aba548p+4 +0x1.c8b9f4p+4 +0x1.3b2d8p+3 +0x1.f0f87p+4 +0x1.526da8p+4 +-0x1.387fb8p+4 +-0x1.4167fp+4 +-0x1.570d18p+3 +0x1.aaedb8p+3 +-0x1.b53824p+3 +0x1.4a0e1cp+4 +0x1.021604p+4 +-0x1.21900cp+4 +-0x1.84c488p+3 +-0x1.03b874p+3 +0x1.5bcc5cp+4 +-0x1.9fb5c8p+3 +-0x1.842c52p+4 +-0x1.3deae4p+3 +-0x1.9ae034p+4 +-0x1.10fa9cp+5 +-0x1.b95bdcp+4 +-0x1.62e5bap+4 +0x1.e0e8fp+4 +-0x1.96a54cp+4 +0x1.c61774p+4 +-0x1.90c15p+4 +-0x1.5de06ap+4 +-0x1.08898ep+5 +0x1.644f1p+4 +0x1.caf23p+2 +0x1.3b8f6p+3 +-0x1.c806aap+4 +0x1.c6ebe4p+4 +-0x1.49fcd4p+3 +-0x1.787318p+4 +0x1.164038p+3 +-0x1.05b048p+2 +-0x1.dbe2f8p+2 +-0x1.7f48bp+2 +0x1.70e1ecp+4 +0x1.330974p+4 +-0x1.dd4fdp+3 +0x1.460e1p+3 +-0x1.2d880cp+3 +-0x1.9575f2p+4 +-0x1.0acce4p+5 +0x1.048768p+4 +-0x1.03fd18p+3 +0x1.05b15p+5 +0x1.54f76p+1 +0x1.f6f6e8p+4 +0x1.b3677p+4 +0x1.c01f3p+2 +-0x1.e32a14p+4 +-0x1.c72a8p+0 +-0x1.ebac5ap+4 +0x1.d83bp-1 +-0x1.4926e8p+4 +-0x1.797964p+4 +-0x1.49e964p+3 +-0x1.841d6cp+4 +-0x1.25273cp+3 +-0x1.07b102p+4 +-0x1.14b7acp+5 +-0x1.b5e63ap+4 +0x1.b52cacp+4 +0x1.f47f3p+2 +-0x1.6f3afcp+4 +-0x1.13717cp+3 +-0x1.1b037cp+4 +0x1.5da03p+4 +0x1.ec788p+4 +0x1.139c4cp+4 +-0x1.7418a6p+4 +0x1.03917cp+5 +-0x1.95383p+4 +0x1.03f114p+5 +-0x1.57e28ep+4 +0x1.caf3a4p+4 +-0x1.2cbb8p-1 +0x1.245f6p+3 +-0x1.2f17dp+3 +-0x1.86afacp+4 +0x1.2aaac8p+4 +-0x1.0a568p+0 +0x1.a7e7b4p+4 +0x1.c330b8p+3 +0x1.0faeap+1 +-0x1.2d39p+2 +-0x1.4ddb52p+4 +-0x1.f0c194p+4 +-0x1.3381cp+2 +0x1.12218p+5 +0x1.4804bp+2 +-0x1.df3382p+4 +-0x1.163aap+1 +0x1.8d269cp+4 +0x1.b46b3p+4 +-0x1.476e0cp+3 +-0x1.449c18p+3 +0x1.1a06p-1 +-0x1.2dba34p+4 +-0x1.2bc334p+4 +0x1.bba7b4p+4 +-0x1.c0eb2ep+4 +0x1.c2fa38p+4 +0x1.0f8538p+5 +0x1.fc3df8p+4 +0x1.537f8cp+4 +-0x1.a8d7ccp+4 +0x1.96023p+2 +0x1.3b2d2p+1 +-0x1.7b62c6p+4 +-0x1.5185ap+1 +-0x1.f7a8p-1 +-0x1.0c922p+3 +-0x1.df916p+4 +0x1.f3911p+3 +-0x1.5d9218p+3 +0x1.e0c878p+4 +-0x1.bd25bp+1 +0x1.66c448p+3 +-0x1.811accp+3 +-0x1.010c9cp+4 +0x1.f2a9f8p+4 +-0x1.1002dcp+4 +-0x1.274c8ep+4 +-0x1.2a902p+4 +0x1.74b20cp+4 +0x1.ff9988p+4 +-0x1.08647p+4 +-0x1.6557ecp+3 +0x1.cc62p+0 +-0x1.01b0c6p+5 +-0x1.75cep+4 +0x1.56d63cp+4 +-0x1.f86a7p+2 +0x1.4c874p+4 +0x1.37df0cp+4 +-0x1.265c3cp+3 +-0x1.0c48cp+5 +-0x1.e459d8p+3 +-0x1.8bca4p+3 +0x1.14706p+3 +-0x1.c99d3p+2 +-0x1.0fb52ap+4 +-0x1.071aecp+5 +-0x1.8975d8p+2 +-0x1.128304p+3 +-0x1.e3ff3p+1 +-0x1.152db8p+2 +-0x1.16b954p+5 +-0x1.15e6cep+5 +0x1.21b8d8p+4 +-0x1.1a98a8p+2 +0x1.059a88p+5 +0x1.2e2f4cp+4 +0x1.9f7c4p+3 +0x1.67382p+1 +0x1.2551dp+4 +0x1.b0fd4p+2 +0x1.583a68p+3 +0x1.30a698p+3 +-0x1.f8fe88p+2 +0x1.96d6f4p+4 +-0x1.0d8a96p+5 +-0x1.74878p-1 +0x1.10f1ep+1 +0x1.300af8p+4 +0x1.26de1cp+4 +0x1.ac842p+2 +0x1.74276p+4 +-0x1.d4723ep+4 +0x1.7222f8p+4 +-0x1.12400cp+5 +-0x1.6626e8p+3 +-0x1.a6c344p+3 +-0x1.3f75ep+2 +0x1.968ac4p+4 +-0x1.e132ecp+3 +0x1.308c5cp+4 +0x1.32232p+1 +-0x1.101cap+5 +-0x1.0adf06p+5 +-0x1.9d61p+3 +0x1.0937dp+5 +0x1.b44f3cp+4 +-0x1.c78ap+0 +-0x1.829a6p+4 +0x1.7ecb88p+3 +0x1.44aa6p+4 +-0x1.f017dap+4 +-0x1.a4603p+3 +-0x1.6fc0c8p+3 +0x1.ec29cp+4 +-0x1.ff5bdcp+4 +0x1.d5782p+4 +-0x1.2f712ap+4 +-0x1.552f48p+2 +0x1.a127bp+4 +-0x1.3a8cdcp+3 +-0x1.7a1228p+3 +0x1.8b913p+2 +0x1.db95fp+3 +0x1.7a43p+3 +-0x1.539778p+4 +-0x1.a4d114p+4 +-0x1.c4127p+4 +0x1.75c1p+4 +-0x1.f3b83p+2 +-0x1.2d3ffep+4 +0x1.73c72p+2 +0x1.b9044p+0 +0x1.e7383p+4 +-0x1.f12826p+4 +-0x1.ace2ap+1 +0x1.fb643p+4 +-0x1.d6d9a8p+2 +0x1.5da19p+4 +-0x1.1f967p+3 +-0x1.9ac65ep+4 +-0x1.03408cp+3 +-0x1.014488p+5 +-0x1.3ce4d8p+4 +-0x1.99e4a8p+4 +0x1.e51898p+4 +0x1.8df99p+2 +0x1.9240dp+4 +0x1.94107p+3 +-0x1.e7551p+3 +0x1.f8568p+4 +-0x1.57339cp+4 +0x1.d9ef98p+4 +0x1.ea652p+4 +-0x1.185138p+4 +-0x1.37b20cp+3 +0x1.6e3ea8p+4 +-0x1.08b312p+4 +-0x1.f85fep+4 +-0x1.50c0dcp+4 +-0x1.daf28p+0 +0x1.1dd7b8p+4 +0x1.7179e8p+4 +-0x1.489db4p+4 +-0x1.5b705cp+3 +0x1.c989d4p+4 +-0x1.d0da4p+0 +0x1.67d708p+3 +-0x1.a4d0f8p+3 +-0x1.22519cp+4 +0x1.0e6b54p+4 +0x1.17e9bp+5 +0x1.68d95cp+4 +-0x1.ec6d2cp+4 +-0x1.38ffccp+4 +-0x1.23bf1ep+4 +0x1.a0e2p+2 +0x1.24094p+3 +-0x1.90f946p+4 +-0x1.4f2b2p+4 +0x1.93398p+0 +0x1.3d7fdp+4 +0x1.3741fp+4 +-0x1.a88074p+3 +-0x1.103f16p+5 +0x1.53c554p+4 +0x1.e8e9p+1 +-0x1.0e4e4cp+4 +-0x1.e2389ep+4 +-0x1.ad61p+3 +-0x1.c30eecp+3 +-0x1.67abb8p+2 +-0x1.c4fffcp+3 +-0x1.5dd3ap+1 +-0x1.6eb4a8p+2 +0x1.63f0bp+3 +-0x1.073cd8p+5 +0x1.bb22e8p+4 +-0x1.a8ce5p+2 +-0x1.51153cp+3 +-0x1.56371p+3 +0x1.f1fb4p+0 +0x1.498f8p+3 +0x1.332da8p+3 +0x1.080834p+5 +-0x1.32da04p+3 +0x1.650174p+4 +-0x1.59f60cp+4 +-0x1.4e8858p+2 +0x1.84688p+0 +0x1.3629fp+2 +0x1.0ba29p+5 +-0x1.0ae52p+2 +-0x1.4f44ap+1 +0x1.9ae28p+0 +0x1.2baf1p+2 +0x1.0c802p+2 +-0x1.c67dd8p+2 +-0x1.de957p+1 +0x1.48b72p+1 +-0x1.4c0c68p+4 +0x1.46a744p+4 +-0x1.39d01cp+3 +0x1.53d76p+3 +0x1.1668a4p+5 +0x1.f4433p+4 +0x1.e4b0fp+2 +-0x1.7c4cf8p+4 +0x1.0d5e8p+4 +-0x1.880078p+4 +0x1.53c5ep+4 +0x1.904728p+3 +0x1.0d36f8p+5 +0x1.f6183p+4 +0x1.08f43cp+4 +0x1.77e2c8p+4 +-0x1.cb5924p+4 +0x1.486de8p+4 +0x1.060a78p+3 +0x1.0c8e4cp+5 +0x1.fb2dcp+3 +0x1.39f22p+4 +-0x1.0111a6p+5 +0x1.8b0198p+3 +-0x1.c08372p+4 +-0x1.e9686p+4 +-0x1.2f4aa4p+3 +0x1.ad5be4p+4 +-0x1.518fccp+3 +-0x1.c858d4p+3 +-0x1.5f7f7cp+3 +-0x1.556ffep+4 +-0x1.2215a4p+3 +-0x1.50b018p+4 +0x1.f249ap+2 +0x1.12e38p+5 +-0x1.b1dc0cp+4 +-0x1.a102dcp+3 +0x1.80dbc4p+4 +-0x1.684cbcp+3 +0x1.ed581p+2 +-0x1.dca674p+3 +0x1.973504p+4 +-0x1.f820f8p+4 +-0x1.81a7p+1 +-0x1.0c8b6p+5 +0x1.d1e7b8p+4 +0x1.3709dcp+4 +-0x1.48f4ap+3 +-0x1.07881p+5 +0x1.45905p+2 +-0x1.0c0d02p+5 +-0x1.067a0cp+3 +0x1.9dd588p+4 +0x1.ba0ed8p+4 +0x1.f44628p+4 +0x1.cabed4p+4 +-0x1.e23812p+4 +-0x1.0a744ep+5 +0x1.db644p+0 +0x1.51211p+4 +0x1.a63694p+4 +0x1.246b2cp+4 +-0x1.756b7p+4 +-0x1.ff7878p+4 +-0x1.f10044p+4 +-0x1.cda77p+1 +-0x1.1961a2p+4 +0x1.d4abbp+2 +-0x1.03ed76p+4 +0x1.079cfcp+4 +-0x1.7365f4p+3 +-0x1.2dd44p+0 +-0x1.b47a6p+1 +0x1.9784d4p+4 +-0x1.f35baep+4 +-0x1.bb35acp+4 +0x1.b9d88p+1 +0x1.14f6a4p+5 +-0x1.7c5ecp+0 +0x1.05bd1cp+5 +-0x1.a19a52p+4 +-0x1.148c8p+3 +-0x1.771ce2p+4 +-0x1.072ffap+5 +0x1.c4178cp+4 +0x1.8bad68p+4 +0x1.b47704p+4 +0x1.0e2438p+4 +-0x1.fc9778p+4 +0x1.5ec7ap+2 +0x1.43912p+2 +0x1.46345p+3 +0x1.6cd29p+4 +0x1.0144cp+2 +-0x1.1e9854p+3 +-0x1.3756bap+4 +-0x1.0b664ap+4 +-0x1.9aep-3 +0x1.68f64p+3 +0x1.3aa67p+3 +-0x1.07615ap+5 +-0x1.f0c314p+4 +0x1.b0bdf4p+4 +-0x1.54f9aep+4 +0x1.9c367p+4 +-0x1.14b3ecp+4 +0x1.791af8p+4 +0x1.a81588p+3 +0x1.3b838p+4 +0x1.e13758p+4 +0x1.56c47p+2 +0x1.8f7e7cp+4 +0x1.5262e8p+4 +-0x1.896a58p+2 +0x1.f37f48p+4 +0x1.fbaadp+4 +0x1.4d2cfp+2 +0x1.6c67ap+2 +0x1.9b882p+3 +0x1.5b66fp+2 +-0x1.9d42dp+1 +-0x1.05346cp+4 +0x1.0ab82p+1 +0x1.9e15b8p+3 +-0x1.d98274p+3 +0x1.0a78b8p+3 +-0x1.2f3774p+4 +0x1.a9b88p+0 +-0x1.f47fecp+4 +-0x1.558a24p+4 +0x1.46c308p+3 +-0x1.bf564cp+4 +0x1.b638c8p+4 +0x1.42b98p+0 +-0x1.97a6a4p+4 +-0x1.4220ecp+4 +0x1.6845ap+3 +-0x1.fb5ddp+4 +0x1.eb47fp+2 +-0x1.067b58p+3 +0x1.167014p+5 +0x1.e7924p+4 +-0x1.5f6cp-3 +0x1.30a098p+3 +0x1.05834cp+5 +-0x1.da437cp+3 +0x1.3e04b8p+4 +-0x1.9ef4ecp+3 +0x1.51ce1p+3 +-0x1.112634p+5 +0x1.77c6ep+4 +-0x1.d37be8p+3 +-0x1.7e568p+0 +-0x1.c5a644p+4 +-0x1.6e036p+1 +-0x1.1786d4p+3 +-0x1.8580e8p+2 +0x1.c466cp+0 +0x1.0ba94p+3 +0x1.86773p+2 +0x1.803bep+4 +-0x1.ae82f8p+2 +-0x1.862498p+2 +0x1.3da6p+0 +0x1.a865d8p+3 +-0x1.ce0fb8p+2 +-0x1.846eep+4 +-0x1.d932p+3 +-0x1.547b34p+4 +0x1.7a1cbp+3 +0x1.248f58p+3 +-0x1.352bcp+4 +-0x1.8b421cp+4 +0x1.fd815p+2 +0x1.22a41p+3 +-0x1.0ac0eap+4 +-0x1.45f61p+4 +0x1.36d9bp+4 +-0x1.9cd784p+3 +-0x1.5fb918p+2 +-0x1.810298p+3 +0x1.e7b198p+3 +-0x1.ff5fc4p+4 +0x1.92637p+3 +0x1.82252p+2 +-0x1.aa8ebap+4 +-0x1.dc9b4ep+4 +0x1.ae464p+4 +0x1.d58b9p+3 +0x1.879fep+4 +0x1.afb52cp+4 +-0x1.9eda98p+4 +0x1.f3939p+4 +-0x1.e927e8p+3 +-0x1.582306p+4 +0x1.10753cp+5 +-0x1.80fd7cp+4 +0x1.9b3cbp+2 +0x1.67267p+4 +-0x1.51e6e8p+4 +-0x1.6250c8p+2 +-0x1.1550c4p+4 +0x1.2d6838p+3 +0x1.099948p+4 +-0x1.2eaf5p+4 +0x1.dca0cp+0 +-0x1.7374p-4 +-0x1.c2053ep+4 +0x1.9e5f04p+4 +-0x1.07dbf6p+5 +-0x1.23ba88p+4 +0x1.0956a4p+4 +-0x1.b798ap+1 +0x1.f7143p+2 +0x1.b56028p+3 +-0x1.151df6p+5 +-0x1.301754p+4 +-0x1.05d158p+5 +0x1.08eb28p+5 +-0x1.5c5d5p+4 +-0x1.9cffd2p+4 +-0x1.285654p+4 +0x1.e001e8p+3 +0x1.04076p+2 +0x1.0c6a04p+4 +0x1.7bb8p-2 +-0x1.0f0518p+5 +-0x1.3567a8p+2 +-0x1.1ebdp-1 +-0x1.8ef22p+3 +-0x1.0a1d5ap+5 +0x1.8a9edp+3 +0x1.00c0e4p+5 +-0x1.32c98p-1 +-0x1.e081c8p+3 +-0x1.226ea4p+4 +0x1.bf0b7p+4 +0x1.c4d04p+0 +0x1.f48ddp+2 +-0x1.f9f398p+2 +-0x1.24d42p+2 +0x1.0c776p+4 +0x1.8a98ep+3 +-0x1.86d128p+4 +-0x1.dda632p+4 +0x1.b3ad38p+4 +0x1.0dac4p+3 +0x1.9fc00cp+4 +-0x1.93bfccp+4 +-0x1.6e659p+2 +-0x1.60dap-1 +-0x1.50fd46p+4 +0x1.1d5078p+4 +0x1.b69efp+3 +0x1.e31d3p+3 +-0x1.0541cp+5 +0x1.3a1648p+3 +0x1.a0c63p+3 +0x1.ea3ff8p+4 +0x1.58ea1cp+4 +0x1.a5509cp+4 +-0x1.30dc1p+3 +-0x1.6a0c2ep+4 +0x1.017178p+3 +0x1.3f598p+0 +0x1.33b4e8p+4 +-0x1.74f184p+4 +0x1.05baep+2 +0x1.b8792p+1 +0x1.638c68p+4 +0x1.94a15cp+4 +-0x1.43fc96p+4 +-0x1.21606cp+3 +0x1.9b3a58p+3 +0x1.e4a05p+4 +0x1.bfa8d8p+4 +-0x1.9076acp+4 +-0x1.967568p+4 +0x1.ac7a58p+3 +0x1.51c12p+2 +0x1.769c4p+1 +-0x1.a53708p+4 +-0x1.fcd6dp+1 +0x1.9b57p+2 +-0x1.f69b8p+0 +-0x1.b953p+2 +0x1.0ec4fcp+5 +-0x1.cf1dcp+0 +0x1.8084b8p+4 +0x1.62db78p+3 +-0x1.485c98p+2 +-0x1.576414p+4 +-0x1.fcc948p+3 +0x1.9d863p+3 +-0x1.08b39ep+5 +0x1.795ep-3 +0x1.99e26p+2 +0x1.fb6d6p+4 +-0x1.55d16p+1 +0x1.41071p+3 +0x1.549abcp+4 +0x1.4e88p-3 +0x1.10bfcp+2 +0x1.97b3cp+3 +-0x1.4580cp+3 +-0x1.df2fp+0 +-0x1.09a2dcp+5 +-0x1.7e1124p+3 +-0x1.14f35ep+5 +0x1.2956cp+4 +0x1.c7b8e8p+4 +-0x1.ebba08p+3 +-0x1.fdfd3p+3 +0x1.46906p+1 +0x1.c1318p+0 +0x1.79f444p+4 +0x1.6012bcp+4 +0x1.fd49ap+2 +-0x1.11612cp+4 +0x1.ea3cdp+4 +-0x1.a053ccp+4 +-0x1.995764p+3 +0x1.bec2e8p+4 +-0x1.7aa898p+2 +0x1.6b6edp+2 +0x1.9b6774p+4 +0x1.e85738p+3 +0x1.974ad4p+4 +-0x1.554564p+4 +-0x1.383ap+3 +-0x1.7576dcp+4 +-0x1.7e8308p+4 +-0x1.786086p+4 +-0x1.31641p+2 +-0x1.591184p+4 +0x1.1ef65p+4 +-0x1.39bc08p+2 +-0x1.1672b4p+4 +-0x1.4aa7f4p+4 +0x1.201d4p+1 +-0x1.afecp-3 +-0x1.163698p+3 +-0x1.7660cp+2 +-0x1.c7fb44p+4 +-0x1.8e0cbp+3 +-0x1.d2a9p-2 +0x1.d0d51p+4 +0x1.d1ea38p+4 +0x1.9741bp+3 +0x1.d90b08p+3 +0x1.6608f8p+4 +-0x1.019936p+5 +-0x1.bd980ep+4 +0x1.c8ad9p+2 +-0x1.a33178p+2 +-0x1.957c74p+4 +0x1.1adc7p+4 +-0x1.329bcp+2 +0x1.4df538p+3 +0x1.ce0544p+4 +0x1.09ab3p+5 +-0x1.937bp+4 +0x1.029744p+5 +0x1.f899f8p+4 +0x1.8140e8p+4 +0x1.e035p+2 +0x1.1418a4p+5 +0x1.183664p+5 +0x1.9ac948p+4 +0x1.7be72p+3 +0x1.3145d8p+4 +0x1.a88598p+3 +-0x1.15d71p+5 +-0x1.cfe5dp+3 +-0x1.3259b4p+3 +0x1.eb17fp+4 +-0x1.c4d158p+3 +-0x1.a0004cp+4 +0x1.b62a1p+3 +-0x1.320a1cp+4 +0x1.99bd1cp+4 +0x1.36e0ap+4 +-0x1.da762p+1 +0x1.91eep+2 +0x1.18d928p+3 +0x1.956c5cp+4 +0x1.4226e8p+4 diff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h index 08a41c46ad..5019e8e25c 100644 --- a/bits/libm-simd-decl-stubs.h +++ b/bits/libm-simd-decl-stubs.h @@ -253,6 +253,17 @@ #define __DECL_SIMD_log1pf64x #define __DECL_SIMD_log1pf128x +#define __DECL_SIMD_logp1 +#define __DECL_SIMD_logp1f +#define __DECL_SIMD_logp1l +#define __DECL_SIMD_logp1f16 +#define __DECL_SIMD_logp1f32 +#define __DECL_SIMD_logp1f64 +#define __DECL_SIMD_logp1f128 +#define __DECL_SIMD_logp1f32x +#define __DECL_SIMD_logp1f64x +#define __DECL_SIMD_logp1f128x + #define __DECL_SIMD_atanh #define __DECL_SIMD_atanhf #define __DECL_SIMD_atanhl diff --git a/config.h.in b/config.h.in index f495f11244..6c25c923fa 100644 --- a/config.h.in +++ b/config.h.in @@ -117,9 +117,6 @@ required version of GNU 'binutils' to 2.28 or later. */ #define HAVE_AARCH64_SVE_ASM 0 -/* ARC big endian ABI */ -#undef HAVE_ARC_BE - /* C-SKY ABI version. */ #undef CSKYABI diff --git a/configure b/configure index ec0b62db36..9c0c0dce03 100755 --- a/configure +++ b/configure @@ -635,6 +635,8 @@ libc_cv_gcc_unwind_find_fde libc_extra_cppflags libc_extra_cflags libc_cv_cxx_thread_local +no_time_bits_source +no_file_offset_bits_source fortify_source no_fortify_source libc_cv_fortify_source @@ -7718,7 +7720,7 @@ printf "%s\n" "#define HAVE_LIBCAP 1" >>confdefs.h fi -no_fortify_source="-Wp,-U_FORTIFY_SOURCE" +no_fortify_source="-U_FORTIFY_SOURCE" fortify_source="${no_fortify_source}" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for maximum supported _FORTIFY_SOURCE level" >&5 @@ -7773,7 +7775,7 @@ esac if test "$libc_cv_fortify_source" = yes then : - fortify_source="${fortify_source},-D_FORTIFY_SOURCE=${enable_fortify_source}" + fortify_source="${fortify_source} -D_FORTIFY_SOURCE=${enable_fortify_source}" fi @@ -7784,6 +7786,66 @@ fi config_vars="$config_vars supported-fortify = $libc_cv_supported_fortify_source" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#ifndef _FILE_OFFSET_BITS +# error _FILE_OFFSET_BITS not defined +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + libc_cv_compiler_default_file_offset_bits=yes +else case e in #( + e) libc_cv_compiler_default_file_offset_bits=no ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext +if test "$libc_cv_compiler_default_file_offset_bits" = yes +then : + no_file_offset_bits_source="-U_FILE_OFFSET_BITS" +fi + +config_vars="$config_vars +no-file-offset-bits-source = $no_file_offset_bits_source" + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#ifndef _TIME_BITS +# error _TIME_BITS not defined +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + libc_cv_compiler_default_time_bits=yes +else case e in #( + e) libc_cv_compiler_default_time_bits=no ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext +if test "$libc_cv_compiler_default_time_bits" = yes +then : + no_time_bits_source="-U_TIME_BITS" +fi + +config_vars="$config_vars +no-time-bits-source = $no_time_bits_source" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the assembler requires one version per symbol" >&5 printf %s "checking whether the assembler requires one version per symbol... " >&6; } if test ${libc_cv_symver_needs_alias+y} diff --git a/configure.ac b/configure.ac index 7c9b57789e..d5a00461ff 100644 --- a/configure.ac +++ b/configure.ac @@ -1536,7 +1536,7 @@ dnl If not, then don't use it. dnl Note that _FORTIFY_SOURCE may have been set through FLAGS too. dnl _FORTIFY_SOURCE value will be selectively disabled for function that can't dnl support it -no_fortify_source="-Wp,-U_FORTIFY_SOURCE" +no_fortify_source="-U_FORTIFY_SOURCE" fortify_source="${no_fortify_source}" AC_CACHE_CHECK([for maximum supported _FORTIFY_SOURCE level], @@ -1555,7 +1555,7 @@ AS_CASE([$enable_fortify_source], [libc_cv_fortify_source=no]) AS_IF([test "$libc_cv_fortify_source" = yes], - [fortify_source="${fortify_source},-D_FORTIFY_SOURCE=${enable_fortify_source}"] + [fortify_source="${fortify_source} -D_FORTIFY_SOURCE=${enable_fortify_source}"] ) AC_SUBST(enable_fortify_source) @@ -1564,6 +1564,30 @@ AC_SUBST(no_fortify_source) AC_SUBST(fortify_source) LIBC_CONFIG_VAR([supported-fortify], [$libc_cv_supported_fortify_source]) +dnl Check if compiler define _FILE_OFFSET_BITS by default +AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[ +#ifndef _FILE_OFFSET_BITS +# error _FILE_OFFSET_BITS not defined +#endif]])], + [libc_cv_compiler_default_file_offset_bits=yes], + [libc_cv_compiler_default_file_offset_bits=no]) +AS_IF([test "$libc_cv_compiler_default_file_offset_bits" = yes], + [no_file_offset_bits_source="-U_FILE_OFFSET_BITS"]) +AC_SUBST(no_file_offset_bits_source) +LIBC_CONFIG_VAR([no-file-offset-bits-source], [$no_file_offset_bits_source]) + +dnl Check if compiler define _TIME_BITS by default +AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[ +#ifndef _TIME_BITS +# error _TIME_BITS not defined +#endif]])], + [libc_cv_compiler_default_time_bits=yes], + [libc_cv_compiler_default_time_bits=no]) +AS_IF([test "$libc_cv_compiler_default_time_bits" = yes], + [no_time_bits_source="-U_TIME_BITS"]) +AC_SUBST(no_time_bits_source) +LIBC_CONFIG_VAR([no-time-bits-source], [$no_time_bits_source]) + dnl Starting with binutils 2.35, GAS can attach multiple symbol versions dnl to one symbol (PR 23840). AC_CACHE_CHECK(whether the assembler requires one version per symbol, diff --git a/conform/Makefile b/conform/Makefile index 73a3cb6da2..57a1f5b546 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -372,7 +372,7 @@ test-xfail-UNIX98/ndbm.h/conform = yes test-xfail-XOPEN2K/ndbm.h/conform = yes test-xfail-XOPEN2K8/ndbm.h/conform = yes -conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. +conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. $(no-file-offset-bits-source) $(no-time-bits-source) # conformtest-xfail-conds may be set by a sysdeps Makefile fragment to # a list of conditions that are considered to be true when encountered # in xfail[cond]- lines in test expectations. diff --git a/debug/Makefile b/debug/Makefile index 3903cc97a3..89ee80bf4d 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -171,16 +171,16 @@ CFLAGS-recvfrom_chk.c += -fexceptions -fasynchronous-unwind-tables # set up for us, so keep the CFLAGS/CPPFLAGS split logical as the order is: # <user CFLAGS> <test CFLAGS> <user CPPFLAGS> <test CPPFLAGS> CFLAGS-tst-longjmp_chk.c += -fexceptions -fasynchronous-unwind-tables -CPPFLAGS-tst-longjmp_chk.c += $(no-fortify-source),-D_FORTIFY_SOURCE=1 +CPPFLAGS-tst-longjmp_chk.c += $(no-fortify-source) -D_FORTIFY_SOURCE=1 CFLAGS-tst-longjmp_chk2.c += -fexceptions -fasynchronous-unwind-tables -CPPFLAGS-tst-longjmp_chk2.c += $(no-fortify-source),-D_FORTIFY_SOURCE=1 +CPPFLAGS-tst-longjmp_chk2.c += $(no-fortify-source) -D_FORTIFY_SOURCE=1 CFLAGS-tst-longjmp_chk3.c += -fexceptions -fasynchronous-unwind-tables -CPPFLAGS-tst-longjmp_chk3.c += $(no-fortify-source),-D_FORTIFY_SOURCE=1 -CPPFLAGS-tst-realpath-chk.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 -CPPFLAGS-tst-chk-cancel.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 -CFLAGS-tst-sprintf-fortify-rdonly.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 -CFLAGS-tst-fortify-syslog.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 -CFLAGS-tst-fortify-wide.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 +CPPFLAGS-tst-longjmp_chk3.c += $(no-fortify-source) -D_FORTIFY_SOURCE=1 +CPPFLAGS-tst-realpath-chk.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 +CPPFLAGS-tst-chk-cancel.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 +CFLAGS-tst-sprintf-fortify-rdonly.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 +CFLAGS-tst-fortify-syslog.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 +CFLAGS-tst-fortify-wide.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 # _FORTIFY_SOURCE tests. # Auto-generate tests for _FORTIFY_SOURCE for different levels, compilers and @@ -218,7 +218,8 @@ src-chk-nongnu = \#undef _GNU_SOURCE # cannot be disabled via pragmas, so require -Wno-error to be used. define gen-chk-test tests-$(1)-$(4)-chk += tst-fortify-$(1)-$(2)-$(3)-$(4) -CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += $(no-fortify-source),-D_FORTIFY_SOURCE=$(3) -Wno-format \ +CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += $(no-fortify-source) -D_FORTIFY_SOURCE=$(3) \ + -Wno-format \ -Wno-deprecated-declarations \ -Wno-error $(eval $(call cflags-$(2),$(1),$(3),$(4))) diff --git a/debug/pcprofiledump.c b/debug/pcprofiledump.c index 049a9c2744..94530f0cf9 100644 --- a/debug/pcprofiledump.c +++ b/debug/pcprofiledump.c @@ -75,6 +75,44 @@ static struct argp argp = options, parse_opt, args_doc, doc, NULL, more_help }; +/* Try to read SIZE bytes from FD and store them on BUF. Terminate + the process upon read error. Also terminate the process if less + than SIZE bytes are remaining in the file. If !IN_HEADER, do not + terminate the process if the end of the file is encountered + immediately, before any bytes are read. + + Returns true if SIZE bytes have been read, and false if no bytes + have been read due to an end-of-file condition. */ +static bool +read_exactly (int fd, void *buffer, size_t size, bool in_header) +{ + char *p = buffer; + char *end = p + size; + while (p < end) + { + ssize_t ret = TEMP_FAILURE_RETRY (read (fd, p, end - p)); + if (ret < 0) + { + if (in_header) + error (EXIT_FAILURE, errno, _("cannot read header")); + else + error (EXIT_FAILURE, errno, _("cannot read pointer pair")); + } + if (ret == 0) + { + if (p == buffer && !in_header) + /* Nothing has been read. */ + return false; + if (in_header) + error (EXIT_FAILURE, 0, _("unexpected end of file in header")); + else + error (EXIT_FAILURE, 0, + _("unexpected end of file in pointer pair")); + } + p += ret; + } + return true; +} int main (int argc, char *argv[]) @@ -110,8 +148,7 @@ main (int argc, char *argv[]) /* Read the first 4-byte word. It contains the information about the word size and the endianness. */ uint32_t word; - if (TEMP_FAILURE_RETRY (read (fd, &word, 4)) != 4) - error (EXIT_FAILURE, errno, _("cannot read header")); + read_exactly (fd, &word, sizeof (word), true); /* Check whether we have to swap the byte order. */ int must_swap = (word & 0x0fffffff) == bswap_32 (0xdeb00000); @@ -121,56 +158,30 @@ main (int argc, char *argv[]) /* We have two loops, one for 32 bit pointers, one for 64 bit pointers. */ if (word == 0xdeb00004) { - union - { - uint32_t ptrs[2]; - char bytes[8]; - } pair; + uint32_t ptrs[2]; while (1) { - size_t len = sizeof (pair); - size_t n; - - while (len > 0 - && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len], - len))) != 0) - len -= n; - - if (len != 0) - /* Nothing to read. */ + if (!read_exactly (fd, ptrs, sizeof (ptrs), false)) break; printf ("this = %#010" PRIx32 ", caller = %#010" PRIx32 "\n", - must_swap ? bswap_32 (pair.ptrs[0]) : pair.ptrs[0], - must_swap ? bswap_32 (pair.ptrs[1]) : pair.ptrs[1]); + must_swap ? bswap_32 (ptrs[0]) : ptrs[0], + must_swap ? bswap_32 (ptrs[1]) : ptrs[1]); } } else if (word == 0xdeb00008) { - union - { - uint64_t ptrs[2]; - char bytes[16]; - } pair; + uint64_t ptrs[2]; while (1) { - size_t len = sizeof (pair); - size_t n; - - while (len > 0 - && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len], - len))) != 0) - len -= n; - - if (len != 0) - /* Nothing to read. */ + if (!read_exactly (fd, ptrs, sizeof (ptrs), false)) break; printf ("this = %#018" PRIx64 ", caller = %#018" PRIx64 "\n", - must_swap ? bswap_64 (pair.ptrs[0]) : pair.ptrs[0], - must_swap ? bswap_64 (pair.ptrs[1]) : pair.ptrs[1]); + must_swap ? bswap_64 (ptrs[0]) : ptrs[0], + must_swap ? bswap_64 (ptrs[1]) : ptrs[1]); } } else diff --git a/debug/test-strcpy_chk.c b/debug/test-strcpy_chk.c index 14b11ea62a..55f2cc8768 100644 --- a/debug/test-strcpy_chk.c +++ b/debug/test-strcpy_chk.c @@ -59,7 +59,7 @@ static int test_main (void); #include <support/support.h> volatile int chk_fail_ok; -jmp_buf chk_fail_buf; +sigjmp_buf chk_fail_buf; static void handler (int sig) @@ -86,7 +86,7 @@ do_one_test (impl_t *impl, char *dst, const char *src, return; chk_fail_ok = 1; - if (setjmp (chk_fail_buf) == 0) + if (sigsetjmp (chk_fail_buf, 1) == 0) { res = CALL (impl, dst, src, dlen); printf ("*** Function %s (%zd; %zd) did not __chk_fail\n", @@ -214,7 +214,7 @@ do_random_tests (void) if (impl->test != 1) { chk_fail_ok = 1; - if (setjmp (chk_fail_buf) == 0) + if (sigsetjmp (chk_fail_buf, 1) == 0) { res = (unsigned char *) CALL (impl, (char *) p2 + align2, diff --git a/debug/tst-fortify-wide.c b/debug/tst-fortify-wide.c index 9c6f3af855..0f38e55e9c 100644 --- a/debug/tst-fortify-wide.c +++ b/debug/tst-fortify-wide.c @@ -26,7 +26,7 @@ static volatile int chk_fail_ok; static volatile int ret; -static jmp_buf chk_fail_buf; +static sigjmp_buf chk_fail_buf; static void handler (int sig) @@ -49,7 +49,7 @@ static wchar_t wbuf2[20] = L"%ls"; do { wprintf (L"Failure on line %d\n", __LINE__); ret = 1; } while (0) #define CHK_FAIL_START \ chk_fail_ok = 1; \ - if (! setjmp (chk_fail_buf)) \ + if (! sigsetjmp (chk_fail_buf, 1)) \ { #define CHK_FAIL_END \ chk_fail_ok = 0; \ diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c index ae738ff10a..e12d538458 100644 --- a/debug/tst-fortify.c +++ b/debug/tst-fortify.c @@ -90,7 +90,7 @@ do_prepare (int argc, char *argv[]) static volatile int chk_fail_ok; static volatile int ret; -static jmp_buf chk_fail_buf; +static sigjmp_buf chk_fail_buf; static void handler (int sig) @@ -133,7 +133,7 @@ static int num2 = 987654; do { printf ("Failure on line %d\n", __LINE__); ret = 1; } while (0) #define CHK_FAIL_START \ chk_fail_ok = 1; \ - if (! setjmp (chk_fail_buf)) \ + if (! sigsetjmp (chk_fail_buf, 1)) \ { #define CHK_FAIL_END \ chk_fail_ok = 0; \ diff --git a/dirent/Makefile b/dirent/Makefile index 556f759f65..11b772e3ab 100644 --- a/dirent/Makefile +++ b/dirent/Makefile @@ -58,13 +58,29 @@ tests := \ bug-readdir1 \ list \ opendir-tst1 \ + tst-closedir-leaks \ tst-fdopendir \ tst-fdopendir2 \ + tst-readdir-long \ + tst-readdir-zero-inode \ + tst-rewinddir \ tst-scandir \ tst-scandir64 \ tst-seekdir \ # tests +ifeq ($(run-built-tests),yes) +ifneq ($(PERL),no) +generated += \ + $(objpfx)tst-closedir-leaks-mem.out \ + # generated + +tests-special += \ + $(objpfx)tst-closedir-leaks-mem.out \ + # tests-special +endif # $(PERL) ! no +endif # $(run-built-tests) == yes + CFLAGS-scandir.c += $(uses-callbacks) CFLAGS-scandir64.c += $(uses-callbacks) CFLAGS-scandir-tail.c += $(uses-callbacks) @@ -74,3 +90,10 @@ CFLAGS-dirfd.c += $(config-cflags-wno-ignored-attributes) include ../Rules opendir-tst1-ARGS = --test-dir=${common-objpfx}dirent + +tst-closedir-leaks-ENV += MALLOC_TRACE=$(objpfx)tst-closedir-leaks.mtrace \ + LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so + +$(objpfx)tst-closedir-leaks-mem.out: $(objpfx)tst-closedir-leaks.out + $(common-objpfx)malloc/mtrace $(objpfx)tst-closedir-leaks.mtrace > $@; \ + $(evaluate-test) diff --git a/dirent/tst-closedir-leaks.c b/dirent/tst-closedir-leaks.c new file mode 100644 index 0000000000..d9de119b63 --- /dev/null +++ b/dirent/tst-closedir-leaks.c @@ -0,0 +1,77 @@ +/* Test for resource leaks in closedir. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <fcntl.h> +#include <limits.h> +#include <mcheck.h> +#include <stdbool.h> +#include <stdlib.h> +#include <support/check.h> +#include <support/descriptors.h> +#include <support/readdir.h> +#include <support/xdirent.h> +#include <support/xunistd.h> + +static void +one_test (enum support_readdir_op op, unsigned int read_limit, + bool use_fdopendir) +{ + struct support_descriptors *fds = support_descriptors_list (); + struct support_dirent e = { 0, }; + + DIR *stream; + if (use_fdopendir) + { + int fd = xopen (".", O_RDONLY | O_DIRECTORY, 0); + stream = xfdopendir (fd); + /* The descriptor fd will be closed by closedir below. */ + } + else + stream = xopendir ("."); + for (unsigned int i = 0; i < read_limit; ++i) + if (!support_readdir (stream, op, &e)) + break; + TEST_COMPARE (closedir (stream), 0); + + free (e.d_name); + support_descriptors_check (fds); + support_descriptors_free (fds); +} + +static int +do_test (void) +{ + mtrace (); + + for (int use_fdopendir = 0; use_fdopendir < 2; ++use_fdopendir) + { + /* No reads, operation does not matter. */ + one_test (SUPPORT_READDIR, 0, use_fdopendir); + + for (enum support_readdir_op op = 0; op <= support_readdir_op_last(); + ++op) + { + one_test (op, 1, use_fdopendir); + one_test (op, UINT_MAX, use_fdopendir); /* Unlimited reads. */ + } + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/dirent/tst-readdir-long.c b/dirent/tst-readdir-long.c new file mode 100644 index 0000000000..409318fa52 --- /dev/null +++ b/dirent/tst-readdir-long.c @@ -0,0 +1,231 @@ +/* Test readdir (+variants) behavior with file names of varying length. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <dirent.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/support.h> +#include <support/xdirent.h> +#include <support/readdir.h> + +/* If positive, at this length an EMSGSIZE error is injected. */ +static _Atomic int inject_error_at_length; + +/* Return a file name, LENGTH bytes long. */ +static char * +name_of_length (size_t length) +{ + char *result = xmalloc (length + 1); + unsigned int prefix = snprintf (result, length + 1, "%zu-", length); + for (size_t i = prefix; i < length; ++i) + result[i] = 'A' + ((length + i) % 26); + result[length] = '\0'; + return result; +} + +/* Add the directory entry at OFFSET to the stream D. */ +static uint64_t +add_directory_entry (struct support_fuse_dirstream *d, uint64_t offset) +{ + unsigned int length = offset + 1; + if (length > 1000) + /* Longer than what is possible to produce with 256 + UTF-8-encoded Unicode code points. */ + return 0; + + char *to_free = NULL; + const char *name; + uint64_t ino = 1000 + length; /* Arbitrary value, distinct from 1. */ + uint32_t type = DT_REG; + if (offset <= 1) + { + type = DT_DIR; + name = ".." + !offset; /* "." or "..". */ + ino = 1; + } + else if (length == 1000) + name = "short"; + else + { + to_free = name_of_length (length); + name = to_free; + } + + ++offset; + bool added = support_fuse_dirstream_add (d, ino, offset, type, name); + free (to_free); + if (added) + return offset; + else + return 0; +} + +/* Set to true if getdents64 should produce only one entry. */ +static _Atomic bool one_entry_per_getdents64; + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + switch (inh->opcode) + { + case FUSE_READDIR: + if (inh->nodeid == 1) + { + uint64_t offset = support_fuse_cast (READ, inh)->offset; + if (inject_error_at_length == offset + 1) + support_fuse_reply_error (f, EMSGSIZE); + else + { + struct support_fuse_dirstream *d + = support_fuse_prepare_readdir (f); + while (true) + { + offset = add_directory_entry (d, offset); + if (offset == 0 || one_entry_per_getdents64 + /* Error will be reported at next READDIR. */ + || offset + 1 == inject_error_at_length) + break; + } + support_fuse_reply_prepared (f); + } + } + else + support_fuse_reply_error (f, EIO); + break; + default: + FAIL ("unexpected event %s", support_fuse_opcode (inh->opcode)); + support_fuse_reply_error (f, EIO); + } + } +} + +/* Run the tests for the specified readdir variant OP. */ +static void +run_readdir_tests (struct support_fuse *f, enum support_readdir_op op) +{ + printf ("info: testing %s (inject_error=%d unbuffered=%d)\n", + support_readdir_function (op), inject_error_at_length, + (int) one_entry_per_getdents64); + + bool testing_r = support_readdir_r_variant (op); + + DIR *dir = xopendir (support_fuse_mountpoint (f)); + struct support_dirent e = { 0, }; + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE (e.d_ino, 1); + TEST_COMPARE_STRING (e.d_name, "."); + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE (e.d_ino, 1); + TEST_COMPARE_STRING (e.d_name, ".."); + + for (unsigned int i = 3; i < 1000; ++i) + { + if (i == inject_error_at_length) + /* Error expected below. */ + break; + + if (i >= sizeof ((struct dirent) { 0, }.d_name) && testing_r) + /* This is a readir_r test. The longer names are not + available because they do not fit into struct dirent. */ + break; + + char *expected_name = name_of_length (i); + TEST_COMPARE (strlen (expected_name), i); + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE (e.d_ino, 1000 + i); + TEST_COMPARE_STRING (e.d_name, expected_name); + free (expected_name); + } + + if (inject_error_at_length == 0) + { + /* Check that the ENAMETOOLONG error does not prevent reading a + later short name. */ + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE (e.d_ino, 2000); + TEST_COMPARE_STRING (e.d_name, "short"); + + if (testing_r) + /* An earlier name was too long. */ + support_readdir_expect_error (dir, op, ENAMETOOLONG); + else + /* Entire directory read without error. */ + TEST_VERIFY (!support_readdir (dir, op, &e)); + } + else + support_readdir_expect_error (dir, op, EMSGSIZE); + + free (e.d_name); + xclosedir (dir); +} + +/* Run all readdir variants for both fully-buffered an unbuffered + (one-at-a-time) directory streams. */ +static void +run_fully_buffered_and_singleton_buffers (struct support_fuse *f) +{ + for (int do_one_entry = 0; do_one_entry < 2; ++do_one_entry) + { + one_entry_per_getdents64 = do_one_entry; + for (enum support_readdir_op op = 0; op <= support_readdir_op_last(); + ++op) + run_readdir_tests (f, op); + } +} + +static int +do_test (void) +{ + /* Smoke test for name_of_length. */ + { + char *name = name_of_length (5); + TEST_COMPARE_STRING (name, "5-HIJ"); + free (name); + + name = name_of_length (6); + TEST_COMPARE_STRING (name, "6-IJKL"); + free (name); + } + + support_fuse_init (); + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + + run_fully_buffered_and_singleton_buffers (f); + + inject_error_at_length = 100; + run_fully_buffered_and_singleton_buffers (f); + + inject_error_at_length = 300; + run_fully_buffered_and_singleton_buffers (f); + + support_fuse_unmount (f); + return 0; +} + +#include <support/test-driver.c> diff --git a/dirent/tst-readdir-zero-inode.c b/dirent/tst-readdir-zero-inode.c new file mode 100644 index 0000000000..af9fb946ab --- /dev/null +++ b/dirent/tst-readdir-zero-inode.c @@ -0,0 +1,134 @@ +/* Test that readdir does not skip entries with d_ino == 0 (bug 12165). + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/readdir.h> +#include <support/xdirent.h> + +/* Add the directory entry at OFFSET to the stream D. */ +static uint64_t +add_directory_entry (struct support_fuse_dirstream *d, uint64_t offset) +{ + bool added = false; + ++offset; + switch (offset - 1) + { + case 0: + added = support_fuse_dirstream_add (d, 1, offset, DT_DIR, "."); + break; + case 1: + added = support_fuse_dirstream_add (d, 1, offset, DT_DIR, ".."); + break; + case 2: + added = support_fuse_dirstream_add (d, 2, offset, DT_REG, "before"); + break; + case 3: + added = support_fuse_dirstream_add (d, 0, offset, DT_REG, "zero"); + break; + case 4: + added = support_fuse_dirstream_add (d, 3, offset, DT_REG, "after"); + break; + } + if (added) + return offset; + else + return 0; +} + +/* Set to true if getdents64 should produce only one entry. */ +static bool one_entry_per_getdents64; + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + switch (inh->opcode) + { + case FUSE_READDIR: + if (inh->nodeid == 1) + { + uint64_t offset = support_fuse_cast (READ, inh)->offset; + struct support_fuse_dirstream *d + = support_fuse_prepare_readdir (f); + while (true) + { + offset = add_directory_entry (d, offset); + if (offset == 0 || one_entry_per_getdents64) + break; + } + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + break; + default: + FAIL ("unexpected event %s", support_fuse_opcode (inh->opcode)); + support_fuse_reply_error (f, EIO); + } + } +} + +static int +do_test (void) +{ + support_fuse_init (); + + for (enum support_readdir_op op = 0; op <= support_readdir_op_last (); ++op) + { + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + DIR *dir = xopendir (support_fuse_mountpoint (f)); + struct support_dirent e = { 0, }; + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "."); + TEST_COMPARE (e.d_ino, 1); + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, ".."); + TEST_COMPARE (e.d_ino, 1); + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "before"); + TEST_COMPARE (e.d_ino, 2); + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "zero"); + TEST_COMPARE (e.d_ino, 0); + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "after"); + TEST_COMPARE (e.d_ino, 3); + + TEST_VERIFY (!support_readdir (dir, op, &e)); + + free (e.d_name); + xclosedir (dir); + support_fuse_unmount (f); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/dirent/tst-rewinddir.c b/dirent/tst-rewinddir.c new file mode 100644 index 0000000000..1479766ebe --- /dev/null +++ b/dirent/tst-rewinddir.c @@ -0,0 +1,207 @@ +/* Test for rewinddir, using FUSE. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <dirent.h> +#include <stdio.h> +#include <stdlib.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/readdir.h> +#include <support/support.h> +#include <support/xdirent.h> + +/* Return the file name at the indicated directory offset. */ +static char * +name_at_offset (unsigned int offset) +{ + if (offset <= 1) + return xstrdup (".." + !offset); /* "." or "..". */ + else + /* Pad the name with a lot of zeros, so that the dirent buffer gets + filled more quickly. */ + return xasprintf ("file%0240u", offset); +} + +/* This many directory entries, including "." and "..". */ +enum { directory_entries = 200 }; + +/* Add the directory entry at OFFSET to the stream D. */ +static uint64_t +add_directory_entry (struct support_fuse_dirstream *d, uint64_t offset) +{ + if (offset >= directory_entries) + return 0; + + char *name = name_at_offset (offset); + uint64_t ino = 1000 + offset; /* Arbitrary value, distinct from 1. */ + uint32_t type = DT_REG; + if (offset <= 1) + { + type = DT_DIR; + ino = 1; + } + + ++offset; + bool added = support_fuse_dirstream_add (d, ino, offset, type, name); + free (name); + if (added) + return offset; + else + return 0; +} + +/* Set to true if getdents64 should produce only one entry. */ +static bool one_entry_per_getdents64; + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + switch (inh->opcode) + { + case FUSE_READDIR: + if (inh->nodeid == 1) + { + uint64_t offset = support_fuse_cast (READ, inh)->offset; + struct support_fuse_dirstream *d + = support_fuse_prepare_readdir (f); + while (true) + { + offset = add_directory_entry (d, offset); + if (offset == 0 || one_entry_per_getdents64) + break; + } + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + break; + default: + FAIL ("unexpected event %s", support_fuse_opcode (inh->opcode)); + support_fuse_reply_error (f, EIO); + } + } +} + +/* Lists the entire directory from start to end. */ +static void +verify_directory (DIR *dir, enum support_readdir_op op) +{ + struct support_dirent e = { 0, }; + + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "."); + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, ".."); + for (int i = 2; i < directory_entries; ++i) + { + char *expected = name_at_offset (i); + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, expected); + free (expected); + } + TEST_VERIFY (!support_readdir (dir, op, &e)); + free (e.d_name); +} + +/* Run tests with rewinding after ENTRIES readdir calls. */ +static void +rewind_after (unsigned int rewind_at) +{ + for (enum support_readdir_op op = 0; op <= support_readdir_op_last (); ++op) + { + printf ("info: testing %s (rewind_at=%u)\n", + support_readdir_function (op), rewind_at); + + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + DIR *dir = xopendir (support_fuse_mountpoint (f)); + struct support_dirent e = { 0, }; + + switch (rewind_at) + { + case 0: + break; + case 1: + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "."); + break; + default: + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, "."); + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, ".."); + for (int i = 2; i < directory_entries; ++i) + { + if (i == rewind_at) + break; + char *expected = name_at_offset (i); + TEST_VERIFY (support_readdir (dir, op, &e)); + TEST_COMPARE_STRING (e.d_name, expected); + free (expected); + } + break; + } + + errno = 0; + rewinddir (dir); + TEST_COMPARE (errno, 0); + verify_directory (dir, op); + + free (e.d_name); + xclosedir (dir); + support_fuse_unmount (f); + } +} + +static int +do_test (void) +{ + support_fuse_init (); + + /* One pass without rewinding to verify that the generated directory + content matches expectations. */ + { + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + DIR *dir = xopendir (support_fuse_mountpoint (f)); + verify_directory (dir, SUPPORT_READDIR64); + xclosedir (dir); + support_fuse_unmount (f); + } + + for (int do_unbuffered = 0; do_unbuffered < 2; ++do_unbuffered) + { + one_entry_per_getdents64 = do_unbuffered; + + for (int i = 0; i < 20; ++i) + rewind_after (i); + rewind_after (50); + rewind_after (100); + rewind_after (150); + rewind_after (180); + rewind_after (199); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/elf/Makefile b/elf/Makefile index 00622ace9d..3a1cb72955 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -414,6 +414,7 @@ tests += \ tst-dlmopen1 \ tst-dlmopen3 \ tst-dlmopen4 \ + tst-dlopen-auditdup \ tst-dlopen-self \ tst-dlopen-tlsmodid \ tst-dlopen-tlsreinit1 \ @@ -452,11 +453,15 @@ tests += \ tst-recursive-tls \ tst-relsort1 \ tst-ro-dynamic \ + tst-rtld-no-malloc \ + tst-rtld-no-malloc-audit \ + tst-rtld-no-malloc-preload \ tst-rtld-run-static \ tst-single_threaded \ tst-single_threaded-pthread \ tst-sonamemove-dlopen \ tst-sonamemove-link \ + tst-startup-errno \ tst-thrlock \ tst-tls-dlinfo \ tst-tls-ie \ @@ -864,6 +869,8 @@ modules-names += \ tst-dlmopen-twice-mod1 \ tst-dlmopen-twice-mod2 \ tst-dlmopen1mod \ + tst-dlopen-auditdup-auditmod \ + tst-dlopen-auditdupmod \ tst-dlopen-tlsreinitmod1 \ tst-dlopen-tlsreinitmod2 \ tst-dlopen-tlsreinitmod3 \ @@ -3145,10 +3152,20 @@ $(objpfx)tst-dlopen-tlsreinit4: \ # tst-dlopen-tlsreinitmod3.so. The dependency is provided via # $(objpfx)tst-dlopen-tlsreinitmod1.so. tst-dlopen-tlsreinitmod2.so-no-z-defs = yes -$(objpfx)tst-dlopen-tlsreinit.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \ +$(objpfx)tst-dlopen-tlsreinit1.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \ $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so # Reuse an audit module which provides ample debug logging. $(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so $(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so + +tst-dlopen-auditdup-ENV = LD_AUDIT=$(objpfx)tst-dlopen-auditdup-auditmod.so +$(objpfx)tst-dlopen-auditdup.out: \ + $(objpfx)tst-dlopen-auditdupmod.so $(objpfx)tst-dlopen-auditdup-auditmod.so + +# Reuse an audit module which provides ample debug logging. +tst-rtld-no-malloc-audit-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so + +# Any shared object should do. +tst-rtld-no-malloc-preload-ENV = LD_PRELOAD=$(objpfx)tst-auditmod1.so diff --git a/elf/cache.c b/elf/cache.c index 8a618e11fa..62d681df42 100644 --- a/elf/cache.c +++ b/elf/cache.c @@ -820,7 +820,7 @@ struct aux_cache_entry struct aux_cache_entry *next; }; -#define AUX_CACHEMAGIC "glibc-ld.so.auxcache-1.0" +#define AUX_CACHEMAGIC "glibc-ld.so.auxcache-2.0" struct aux_cache_file_entry { diff --git a/elf/dl-close.c b/elf/dl-close.c index 88226245eb..b6f4daac79 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -723,6 +723,11 @@ _dl_close_worker (struct link_map *map, bool force) /* TLS is cleaned up for the unloaded modules. */ __rtld_lock_unlock_recursive (GL(dl_load_tls_lock)); + /* Notify the debugger those objects are finalized and gone. */ + r->r_state = RT_CONSISTENT; + _dl_debug_state (); + LIBC_PROBE (unmap_complete, 2, nsid, r); + #ifdef SHARED /* Auditing checkpoint: we have deleted all objects. Also, do not notify auditors of the cleanup of a failed audit module loading attempt. */ @@ -735,11 +740,6 @@ _dl_close_worker (struct link_map *map, bool force) --GL(dl_nns); while (GL(dl_ns)[GL(dl_nns) - 1]._ns_loaded == NULL); - /* Notify the debugger those objects are finalized and gone. */ - r->r_state = RT_CONSISTENT; - _dl_debug_state (); - LIBC_PROBE (unmap_complete, 2, nsid, r); - /* Recheck if we need to retry, release the lock. */ out: if (dl_close_state == rerun) diff --git a/elf/dl-load.c b/elf/dl-load.c index 8a89b71016..ac8e217a7f 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -429,23 +429,7 @@ add_name_to_object (struct link_map *l, const char *name) newname->name = memcpy (newname + 1, name, name_len); newname->next = NULL; newname->dont_free = 0; - /* CONCURRENCY NOTES: - - Make sure the initialization of newname happens before its address is - read from the lastp->next store below. - - GL(dl_load_lock) is held here (and by other writers, e.g. dlclose), so - readers of libname_list->next (e.g. _dl_check_caller or the reads above) - can use that for synchronization, however the read in _dl_name_match_p - may be executed without holding the lock during _dl_runtime_resolve - (i.e. lazy symbol resolution when a function of library l is called). - - The release MO store below synchronizes with the acquire MO load in - _dl_name_match_p. Other writes need to synchronize with that load too, - however those happen either early when the process is single threaded - (dl_main) or when the library is unloaded (dlclose) and the user has to - synchronize library calls with unloading. */ - atomic_store_release (&lastp->next, newname); + lastp->next = newname; } /* Standard search directories. */ @@ -1608,15 +1592,13 @@ open_verify (const char *name, int fd, errval = errno; errstring = (errval == 0 ? N_("file too short") : N_("cannot read file data")); - lose: + lose:; + struct dl_exception exception; + _dl_exception_create (&exception, name, errstring); if (free_name) - { - char *realname = (char *) name; - name = strdupa (realname); - free (realname); - } + free ((char *) name); __close_nocancel (fd); - _dl_signal_error (errval, name, NULL, errstring); + _dl_signal_exception (errval, &exception, NULL); } /* See whether the ELF header is what we expect. */ diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 19ad2a25c5..6d74332c0f 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -93,22 +93,9 @@ check_match (const char *const undef_name, const ElfW(Half) *verstab = map->l_versyms; if (version != NULL) { - if (__glibc_unlikely (verstab == NULL)) - { - /* We need a versioned symbol but haven't found any. If - this is the object which is referenced in the verneed - entry it is a bug in the library since a symbol must - not simply disappear. - - It would also be a bug in the object since it means that - the list of required versions is incomplete and so the - tests in dl-version.c haven't found a problem.*/ - assert (version->filename == NULL - || ! _dl_name_match_p (version->filename, map)); - - /* Otherwise we accept the symbol. */ - } - else + /* If there is no version information, accept the symbol. This + can happen during symbol interposition. */ + if (__glibc_likely (verstab != NULL)) { /* We can match the version information or use the default one if it is not hidden. */ diff --git a/elf/dl-misc.c b/elf/dl-misc.c index 848cef8771..e30be5b0a0 100644 --- a/elf/dl-misc.c +++ b/elf/dl-misc.c @@ -75,9 +75,7 @@ _dl_name_match_p (const char *name, const struct link_map *map) if (strcmp (name, runp->name) == 0) return 1; else - /* Synchronize with the release MO store in add_name_to_object. - See CONCURRENCY NOTES in add_name_to_object in dl-load.c. */ - runp = atomic_load_acquire (&runp->next); + runp = runp->next; return 0; } diff --git a/elf/dl-open.c b/elf/dl-open.c index 8b4704c09d..ba3c266e6a 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -565,6 +565,14 @@ dl_open_worker_begin (void *a) _dl_debug_printf ("opening file=%s [%lu]; direct_opencount=%u\n\n", new->l_name, new->l_ns, new->l_direct_opencount); +#ifdef SHARED + /* No relocation processing on this execution path. But + relocation has not been performed for static + position-dependent executables, so disable the assert for + static linking. */ + assert (new->l_relocated); +#endif + /* If the user requested the object to be in the global namespace but it is not so far, prepare to add it now. This can raise an exception to do a malloc failure. */ @@ -586,10 +594,6 @@ dl_open_worker_begin (void *a) if ((mode & RTLD_GLOBAL) && new->l_global == 0) add_to_global_update (new); - const int r_state __attribute__ ((unused)) - = _dl_debug_update (args->nsid)->r_state; - assert (r_state == RT_CONSISTENT); - return; } @@ -620,17 +624,6 @@ dl_open_worker_begin (void *a) #endif } -#ifdef SHARED - /* Auditing checkpoint: we have added all objects. */ - _dl_audit_activity_nsid (new->l_ns, LA_ACT_CONSISTENT); -#endif - - /* Notify the debugger all new objects are now ready to go. */ - struct r_debug *r = _dl_debug_update (args->nsid); - r->r_state = RT_CONSISTENT; - _dl_debug_state (); - LIBC_PROBE (map_complete, 3, args->nsid, r, new); - _dl_open_check (new); /* Print scope information. */ @@ -677,6 +670,7 @@ dl_open_worker_begin (void *a) created dlmopen namespaces. Do not do this for static dlopen because libc has relocations against ld.so, which may not have been relocated at this point. */ + struct r_debug *r = _dl_debug_update (args->nsid); #ifdef SHARED if (GL(dl_ns)[args->nsid].libc_map != NULL) _dl_open_relocate_one_object (args, r, GL(dl_ns)[args->nsid].libc_map, @@ -768,6 +762,26 @@ dl_open_worker (void *a) __rtld_lock_unlock_recursive (GL(dl_load_tls_lock)); + /* Auditing checkpoint and debugger signalling. Do this even on + error, so that dlopen exists with consistent state. */ + if (args->nsid >= 0 || args->map != NULL) + { + Lmid_t nsid = args->map != NULL ? args->map->l_ns : args->nsid; + struct r_debug *r = _dl_debug_update (nsid); +#ifdef SHARED + bool was_not_consistent = r->r_state != RT_CONSISTENT; +#endif + r->r_state = RT_CONSISTENT; + _dl_debug_state (); + LIBC_PROBE (map_complete, 3, nsid, r, args->map); + +#ifdef SHARED + if (was_not_consistent) + /* Avoid redudant/recursive signalling. */ + _dl_audit_activity_nsid (nsid, LA_ACT_CONSISTENT); +#endif + } + if (__glibc_unlikely (ex.errstring != NULL)) /* Reraise the error. */ _dl_signal_exception (err, &ex, NULL); diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 4bf7aec88b..76d14830dd 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -202,12 +202,9 @@ resolve_map (lookup_t l, struct r_scope_elem *scope[], const ElfW(Sym) **ref, #include "dynamic-link.h" void -_dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], - int reloc_mode, int consider_profiling) +_dl_relocate_object_no_relro (struct link_map *l, struct r_scope_elem *scope[], + int reloc_mode, int consider_profiling) { - if (l->l_relocated) - return; - struct textrels { caddr_t start; @@ -220,8 +217,8 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], int lazy = reloc_mode & RTLD_LAZY; int skip_ifunc = reloc_mode & __RTLD_NOIFUNC; -#ifdef SHARED bool consider_symbind = false; +#ifdef SHARED /* If we are auditing, install the same handlers we need for profiling. */ if ((reloc_mode & __RTLD_AUDIT) == 0) { @@ -240,9 +237,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], } #elif defined PROF /* Never use dynamic linker profiling for gprof profiling code. */ -# define consider_profiling 0 -#else -# define consider_symbind 0 + consider_profiling = 0; #endif /* If DT_BIND_NOW is set relocate all references in this object. We @@ -300,7 +295,6 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], ELF_DYNAMIC_RELOCATE (l, scope, lazy, consider_profiling, skip_ifunc); -#ifndef PROF if ((consider_profiling || consider_symbind) && l->l_info[DT_PLTRELSZ] != NULL) { @@ -321,7 +315,6 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], _dl_fatal_printf (errstring, RTLD_PROGNAME, l->l_name); } } -#endif } /* Mark the object so we know this work has been done. */ @@ -342,17 +335,24 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], textrels = textrels->next; } - - /* In case we can protect the data now that the relocations are - done, do it. */ - if (l->l_relro_size != 0) - _dl_protect_relro (l); } +void +_dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], + int reloc_mode, int consider_profiling) +{ + if (l->l_relocated) + return; + _dl_relocate_object_no_relro (l, scope, reloc_mode, consider_profiling); + _dl_protect_relro (l); +} void _dl_protect_relro (struct link_map *l) { + if (l->l_relro_size == 0) + return; + ElfW(Addr) start = ALIGN_DOWN((l->l_addr + l->l_relro_addr), GLRO(dl_pagesize)); diff --git a/elf/dl-support.c b/elf/dl-support.c index 451932dd03..ee590edf93 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -338,8 +338,7 @@ _dl_non_dynamic_init (void) call_function_static_weak (_dl_find_object_init); /* Setup relro on the binary itself. */ - if (_dl_main_map.l_relro_size != 0) - _dl_protect_relro (&_dl_main_map); + _dl_protect_relro (&_dl_main_map); } #ifdef DL_SYSINFO_IMPLEMENTATION diff --git a/elf/rtld.c b/elf/rtld.c index 1e2e9ad5a8..b8cc3f605f 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -386,7 +386,6 @@ static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum, /* These two variables cannot be moved into .data.rel.ro. */ static struct libname_list _dl_rtld_libname; -static struct libname_list _dl_rtld_libname2; /* Variable for statistics. */ RLTD_TIMING_DECLARE (relocate_time, static); @@ -453,6 +452,8 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) { ElfW(Addr) start_addr; + __rtld_malloc_init_stubs (); + /* Do not use an initializer for these members because it would interfere with __rtld_static_init. */ GLRO (dl_find_object) = &_dl_find_object; @@ -575,8 +576,6 @@ _dl_start (void *arg) function, that way the compiler cannot put accesses to the GOT before ELF_DYNAMIC_RELOCATE. */ - __rtld_malloc_init_stubs (); - #ifdef DONT_USE_BOOTSTRAP_MAP return _dl_start_final (arg); #else @@ -1167,29 +1166,6 @@ rtld_setup_main_map (struct link_map *main_map) /* _dl_rtld_libname.next = NULL; Already zero. */ GL(dl_rtld_map).l_libname = &_dl_rtld_libname; - /* Ordinarily, we would get additional names for the loader from - our DT_SONAME. This can't happen if we were actually linked as - a static executable (detect this case when we have no DYNAMIC). - If so, assume the filename component of the interpreter path to - be our SONAME, and add it to our name list. */ - if (GL(dl_rtld_map).l_ld == NULL) - { - const char *p = NULL; - const char *cp = _dl_rtld_libname.name; - - /* Find the filename part of the path. */ - while (*cp != '\0') - if (*cp++ == '/') - p = cp; - - if (p != NULL) - { - _dl_rtld_libname2.name = p; - /* _dl_rtld_libname2.next = NULL; Already zero. */ - _dl_rtld_libname.next = &_dl_rtld_libname2; - } - } - has_interp = true; break; case PT_LOAD: @@ -1987,43 +1963,37 @@ dl_main (const ElfW(Phdr) *phdr, if (main_map->l_searchlist.r_list[i] == &GL(dl_rtld_map)) break; - bool rtld_multiple_ref = false; - if (__glibc_likely (i < main_map->l_searchlist.r_nlist)) - { - /* Some DT_NEEDED entry referred to the interpreter object itself, so - put it back in the list of visible objects. We insert it into the - chain in symbol search order because gdb uses the chain's order as - its symbol search order. */ - rtld_multiple_ref = true; + /* Insert the link map for the dynamic loader into the chain in + symbol search order because gdb uses the chain's order as its + symbol search order. */ - GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1]; - if (__glibc_likely (state.mode == rtld_mode_normal)) - { - GL(dl_rtld_map).l_next = (i + 1 < main_map->l_searchlist.r_nlist - ? main_map->l_searchlist.r_list[i + 1] - : NULL); + GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1]; + if (__glibc_likely (state.mode == rtld_mode_normal)) + { + GL(dl_rtld_map).l_next = (i + 1 < main_map->l_searchlist.r_nlist + ? main_map->l_searchlist.r_list[i + 1] + : NULL); #ifdef NEED_DL_SYSINFO_DSO - if (GLRO(dl_sysinfo_map) != NULL - && GL(dl_rtld_map).l_prev->l_next == GLRO(dl_sysinfo_map) - && GL(dl_rtld_map).l_next != GLRO(dl_sysinfo_map)) - GL(dl_rtld_map).l_prev = GLRO(dl_sysinfo_map); + if (GLRO(dl_sysinfo_map) != NULL + && GL(dl_rtld_map).l_prev->l_next == GLRO(dl_sysinfo_map) + && GL(dl_rtld_map).l_next != GLRO(dl_sysinfo_map)) + GL(dl_rtld_map).l_prev = GLRO(dl_sysinfo_map); #endif - } - else - /* In trace mode there might be an invisible object (which we - could not find) after the previous one in the search list. - In this case it doesn't matter much where we put the - interpreter object, so we just initialize the list pointer so - that the assertion below holds. */ - GL(dl_rtld_map).l_next = GL(dl_rtld_map).l_prev->l_next; - - assert (GL(dl_rtld_map).l_prev->l_next == GL(dl_rtld_map).l_next); - GL(dl_rtld_map).l_prev->l_next = &GL(dl_rtld_map); - if (GL(dl_rtld_map).l_next != NULL) - { - assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev); - GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map); - } + } + else + /* In trace mode there might be an invisible object (which we + could not find) after the previous one in the search list. + In this case it doesn't matter much where we put the + interpreter object, so we just initialize the list pointer so + that the assertion below holds. */ + GL(dl_rtld_map).l_next = GL(dl_rtld_map).l_prev->l_next; + + assert (GL(dl_rtld_map).l_prev->l_next == GL(dl_rtld_map).l_next); + GL(dl_rtld_map).l_prev->l_next = &GL(dl_rtld_map); + if (GL(dl_rtld_map).l_next != NULL) + { + assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev); + GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map); } /* Now let us see whether all libraries are available in the @@ -2351,35 +2321,30 @@ dl_main (const ElfW(Phdr) *phdr, /* Make sure no new search directories have been added. */ assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs)); - if (rtld_multiple_ref) - { - /* There was an explicit ref to the dynamic linker as a shared lib. - Re-relocate ourselves with user-controlled symbol definitions. + /* Set up the object lookup structures. */ + _dl_find_object_init (); - We must do this after TLS initialization in case after this - re-relocation, we might call a user-supplied function - (e.g. calloc from _dl_relocate_object) that uses TLS data. */ + /* Likewise for the locking implementation. */ + __rtld_mutex_init (); - /* Set up the object lookup structures. */ - _dl_find_object_init (); + /* Re-relocate ourselves with user-controlled symbol definitions. */ - /* The malloc implementation has been relocated, so resolving - its symbols (and potentially calling IFUNC resolvers) is safe - at this point. */ - __rtld_malloc_init_real (main_map); + { + RTLD_TIMING_VAR (start); + rtld_timer_start (&start); - /* Likewise for the locking implementation. */ - __rtld_mutex_init (); + _dl_relocate_object_no_relro (&GL(dl_rtld_map), main_map->l_scope, 0, 0); - RTLD_TIMING_VAR (start); - rtld_timer_start (&start); + /* The malloc implementation has been relocated, so resolving + its symbols (and potentially calling IFUNC resolvers) is safe + at this point. */ + __rtld_malloc_init_real (main_map); - /* Mark the link map as not yet relocated again. */ - GL(dl_rtld_map).l_relocated = 0; - _dl_relocate_object (&GL(dl_rtld_map), main_map->l_scope, 0, 0); + if (GL(dl_rtld_map).l_relro_size != 0) + _dl_protect_relro (&GL(dl_rtld_map)); - rtld_timer_accum (&relocate_time, start); - } + rtld_timer_accum (&relocate_time, start); + } /* Relocation is complete. Perform early libc initialization. This is the initial libc, even if audit modules have been loaded with @@ -2393,9 +2358,6 @@ dl_main (const ElfW(Phdr) *phdr, _dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */ _dl_sysdep_start_cleanup (); - /* Auditing checkpoint: we have added all objects. */ - _dl_audit_activity_nsid (LM_ID_BASE, LA_ACT_CONSISTENT); - /* Notify the debugger all new objects are now ready to go. We must re-get the address since by now the variable might be in another object. */ r = _dl_debug_update (LM_ID_BASE); @@ -2403,6 +2365,9 @@ dl_main (const ElfW(Phdr) *phdr, _dl_debug_state (); LIBC_PROBE (init_complete, 2, LM_ID_BASE, r); + /* Auditing checkpoint: we have added all objects. */ + _dl_audit_activity_nsid (LM_ID_BASE, LA_ACT_CONSISTENT); + #if defined USE_LDCONFIG && !defined MAP_COPY /* We must munmap() the cache file. */ _dl_unload_cache (); diff --git a/elf/tst-dlopen-auditdup-auditmod.c b/elf/tst-dlopen-auditdup-auditmod.c new file mode 100644 index 0000000000..270a595ec4 --- /dev/null +++ b/elf/tst-dlopen-auditdup-auditmod.c @@ -0,0 +1,104 @@ +/* Auditor that opens again an object that just has been opened. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <dlfcn.h> +#include <link.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +unsigned int +la_version (unsigned int v) +{ + return LAV_CURRENT; +} + +static bool trigger_on_la_activity; + +unsigned int +la_objopen (struct link_map *map, Lmid_t lmid, uintptr_t *cookie) +{ + printf ("info: la_objopen: \"%s\"\n", map->l_name); + if (strstr (map->l_name, "/tst-dlopen-auditdupmod.so") != NULL) + trigger_on_la_activity = true; + return 0; +} + +void +la_activity (uintptr_t *cookie, unsigned int flag) +{ + static unsigned int calls; + ++calls; + printf ("info: la_activity: call %u (flag %u)\n", calls, flag); + fflush (stdout); + if (trigger_on_la_activity) + { + /* Avoid triggering on the dlmopen call below. */ + static bool recursion; + if (recursion) + return; + recursion = true; + + puts ("info: about to dlmopen tst-dlopen-auditdupmod.so"); + fflush (stdout); + void *handle = dlmopen (LM_ID_BASE, "tst-dlopen-auditdupmod.so", + RTLD_NOW); + if (handle == NULL) + { + printf ("error: dlmopen: %s\n", dlerror ()); + fflush (stdout); + _exit (1); + } + + /* Check that the constructor has not run. Running the + constructor would require constructing its dependencies, but + the constructor call that triggered this auditing activity + has not completed, and constructors among the dependencies + may not be able to deal with that. */ + int *status = dlsym (handle, "auditdupmod_status"); + if (status == NULL) + { + printf ("error: dlsym: %s\n", dlerror ()); + fflush (stdout); + _exit (1); + } + printf ("info: auditdupmod_status == %d\n", *status); + if (*status != 0) + { + puts ("error: auditdupmod_status == 0 expected"); + fflush (stdout); + _exit (1); + } + /* Checked in the destructor and the main program. */ + ++*status; + printf ("info: auditdupmod_status == %d\n", *status); + + /* Check that the module has been relocated. */ + int **status_address = dlsym (handle, "auditdupmod_status_address"); + if (status_address == NULL || *status_address != status) + { + puts ("error: invalid auditdupmod_status address in" + " tst-dlopen-auditdupmod.so"); + fflush (stdout); + _exit (1); + } + + fflush (stdout); + } +} diff --git a/elf/tst-dlopen-auditdup.c b/elf/tst-dlopen-auditdup.c new file mode 100644 index 0000000000..d022c58ae3 --- /dev/null +++ b/elf/tst-dlopen-auditdup.c @@ -0,0 +1,36 @@ +/* Test that recursive dlopen from auditor works (bug 31986). + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <support/check.h> +#include <support/xdlfcn.h> + +static int +do_test (void) +{ + puts ("info: about to dlopen tst-dlopen-auditdupmod.so"); + fflush (stdout); + void *handle = xdlopen ("tst-dlopen-auditdupmod.so", RTLD_NOW); + int *status = xdlsym (handle, "auditdupmod_status"); + printf ("info: auditdupmod_status == %d (from main)\n", *status); + TEST_COMPARE (*status, 2); + xdlclose (handle); + return 0; +} + +#include <support/test-driver.c> diff --git a/elf/tst-dlopen-auditdupmod.c b/elf/tst-dlopen-auditdupmod.c new file mode 100644 index 0000000000..59b7e21daa --- /dev/null +++ b/elf/tst-dlopen-auditdupmod.c @@ -0,0 +1,48 @@ +/* Directly opened test module that gets reopened from the auditor. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <support/xdlfcn.h> + +int auditdupmod_status; + +/* Used to check for successful relocation processing. */ +int *auditdupmod_status_address = &auditdupmod_status; + +static void __attribute__ ((constructor)) +init (void) +{ + ++auditdupmod_status; + printf ("info: tst-dlopen-auditdupmod.so constructor called (status %d)\n", + auditdupmod_status); +} + +static void __attribute__ ((destructor)) +fini (void) +{ + /* The tst-dlopen-auditdup-auditmod.so auditor incremented + auditdupmod_status. */ + printf ("info: tst-dlopen-auditdupmod.so destructor called (status %d)\n", + auditdupmod_status); + if (auditdupmod_status != 2) + { + puts ("error: auditdupmod_status == 2 expected"); + exit (1); + } +} diff --git a/elf/tst-rtld-no-malloc-audit.c b/elf/tst-rtld-no-malloc-audit.c new file mode 100644 index 0000000000..a028377ad1 --- /dev/null +++ b/elf/tst-rtld-no-malloc-audit.c @@ -0,0 +1 @@ +#include "tst-rtld-no-malloc.c" diff --git a/elf/tst-rtld-no-malloc-preload.c b/elf/tst-rtld-no-malloc-preload.c new file mode 100644 index 0000000000..a028377ad1 --- /dev/null +++ b/elf/tst-rtld-no-malloc-preload.c @@ -0,0 +1 @@ +#include "tst-rtld-no-malloc.c" diff --git a/elf/tst-rtld-no-malloc.c b/elf/tst-rtld-no-malloc.c new file mode 100644 index 0000000000..5f24d4bd72 --- /dev/null +++ b/elf/tst-rtld-no-malloc.c @@ -0,0 +1,76 @@ +/* Test that program loading does not call malloc. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + + +#include <string.h> +#include <unistd.h> + +static void +print (const char *s) +{ + const char *end = s + strlen (s); + while (s < end) + { + ssize_t ret = write (STDOUT_FILENO, s, end - s); + if (ret <= 0) + _exit (2); + s += ret; + } +} + +static void __attribute__ ((noreturn)) +unexpected_call (const char *function) +{ + print ("error: unexpected call to "); + print (function); + print ("\n"); + _exit (1); +} + +/* These are the malloc functions implement in elf/dl-minimal.c. */ + +void +free (void *ignored) +{ + unexpected_call ("free"); +} + +void * +calloc (size_t ignored1, size_t ignored2) +{ + unexpected_call ("calloc"); +} + +void * +malloc (size_t ignored) +{ + unexpected_call ("malloc"); +} + +void * +realloc (void *ignored1, size_t ignored2) +{ + unexpected_call ("realloc"); +} + +int +main (void) +{ + /* Do not use the test wrapper, to avoid spurious malloc calls from it. */ + return 0; +} diff --git a/elf/tst-startup-errno.c b/elf/tst-startup-errno.c new file mode 100644 index 0000000000..59a1005fb6 --- /dev/null +++ b/elf/tst-startup-errno.c @@ -0,0 +1,58 @@ +/* Test the value of errno at program startup. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> + +/* Verify that errno is 0 at first ELF constructor execution and at + the start of main. */ + +static void set_ctor_errno (void) __attribute__((constructor)); +static int ctor_errno = -1; + +static void +set_ctor_errno (void) +{ + ctor_errno = errno; +} + +static int +get_ctor_errno (void) +{ + return ctor_errno; +} + +int +main (void) +{ + if (errno != 0) + { + printf ("At start of main errno set to %d != 0\n", errno); + exit (1); + } + + if (get_ctor_errno () != 0) + { + printf ("At ctor exec errno set to %d != 0\n", get_ctor_errno ()); + exit (1); + } + + return 0; +} + diff --git a/iconv/Makefile b/iconv/Makefile index 65b4a44ab8..de9d964ed3 100644 --- a/iconv/Makefile +++ b/iconv/Makefile @@ -61,6 +61,10 @@ test-srcs := \ tst-translit-mchar \ # test-srcs +tests-internal = \ + tst-iconv-sticky-input-error \ + # tests-internal + others = iconv_prog iconvconfig install-others-programs = $(inst_bindir)/iconv install-sbin = iconvconfig @@ -76,8 +80,13 @@ include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left)) ifeq ($(run-built-tests),yes) xtests-special += $(objpfx)test-iconvconfig.out -tests-special += $(objpfx)tst-iconv_prog.out -tests-special += $(objpfx)tst-translit-mchar.out +tests-special += \ + $(objpfx)tst-iconv_prog-buffer-large.out \ + $(objpfx)tst-iconv_prog-buffer-tiny.out \ + $(objpfx)tst-iconv_prog-buffer.out \ + $(objpfx)tst-iconv_prog.out \ + $(objpfx)tst-translit-mchar.out \ + # tests-special endif # Make a copy of the file because gconv module names are constructed @@ -141,3 +150,17 @@ $(objpfx)tst-translit-mchar.out: tst-translit-mchar.sh \ '$(run-program-env)' '$(run-program-prefix-after-env)' \ $< > $@; \ $(evaluate-test) + +$(objpfx)tst-iconv_prog-buffer.out: \ + tst-iconv_prog-buffer.sh $(objpfx)iconv_prog + $(BASH) $< $(common-objdir) '$(run-program-prefix)' > $@; \ + $(evaluate-test) +$(objpfx)tst-iconv_prog-buffer-tiny.out: \ + tst-iconv_prog-buffer.sh $(objpfx)iconv_prog + $(BASH) $< $(common-objdir) '$(run-program-prefix)' \ + '--buffer-size=1' > $@; \ + $(evaluate-test) +$(objpfx)tst-iconv_prog-buffer-large.out: \ + tst-iconv_prog-buffer.sh $(objpfx)iconv_prog + $(BASH) $< $(common-objdir) '$(run-program-prefix)' '' '22' > $@; \ + $(evaluate-test) diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h index 9fece3ea14..cd452d94cc 100644 --- a/iconv/gconv_int.h +++ b/iconv/gconv_int.h @@ -331,4 +331,34 @@ extern wint_t __gconv_btwoc_ascii (struct __gconv_step *step, unsigned char c); __END_DECLS +/* Internal extensions for <gconv.h>. */ + +/* Internal flags for __flags in struct __gconv_step_data. Overlaps + with flags for __gconv_open. */ +enum + { + /* The conversion encountered an illegal input character at one + point. */ + __GCONV_ENCOUNTERED_ILLEGAL_INPUT = 1U << 30, + }; + +/* Mark *STEP_DATA as having seen illegal input, and return + __GCONV_ILLEGAL_INPUT. */ +static inline int +__gconv_mark_illegal_input (struct __gconv_step_data *step_data) +{ + step_data->__flags |= __GCONV_ENCOUNTERED_ILLEGAL_INPUT; + return __GCONV_ILLEGAL_INPUT; +} + +/* Returns true if any of the conversion steps encountered illegal input. */ +static _Bool __attribute__ ((unused)) +__gconv_has_illegal_input (__gconv_t cd) +{ + for (size_t i = 0; i < cd->__nsteps; ++i) + if (cd->__data[i].__flags & __GCONV_ENCOUNTERED_ILLEGAL_INPUT) + return true; + return false; +} + #endif /* gconv_int.h */ diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c index 257be2f8ff..f22002cf81 100644 --- a/iconv/gconv_simple.c +++ b/iconv/gconv_simple.c @@ -207,7 +207,7 @@ ucs4_internal_loop (struct __gconv_step *step, UCS4 does not allow such values. */ if (irreversible == NULL) /* We are transliterating, don't try to correct anything. */ - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); if (flags & __GCONV_IGNORE_ERRORS) { @@ -218,7 +218,7 @@ ucs4_internal_loop (struct __gconv_step *step, *inptrp = inptr; *outptrp = outptr; - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); } put32 (outptr, inval); @@ -276,7 +276,7 @@ ucs4_internal_loop_single (struct __gconv_step *step, if (!(flags & __GCONV_IGNORE_ERRORS)) { *inptrp -= cnt - (state->__count & 7); - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); } } else @@ -453,7 +453,7 @@ ucs4le_internal_loop (struct __gconv_step *step, UCS4 does not allow such values. */ if (irreversible == NULL) /* We are transliterating, don't try to correct anything. */ - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); if (flags & __GCONV_IGNORE_ERRORS) { @@ -464,7 +464,7 @@ ucs4le_internal_loop (struct __gconv_step *step, *inptrp = inptr; *outptrp = outptr; - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); } put32 (outptr, inval); @@ -523,7 +523,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, represent the result. This is a genuine bug in the input since UCS4 does not allow such values. */ if (!(flags & __GCONV_IGNORE_ERRORS)) - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); } else { @@ -969,7 +969,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, surrogates pass through, attackers could make a security \ hole exploit by synthesizing any desired plane 1-16 \ character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ inptr += 4; \ @@ -1012,7 +1012,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, them. (Catching this here is not security relevant.) */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ inptr += 2; \ @@ -1061,7 +1061,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, character. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ inptr += 4; \ diff --git a/iconv/gconv_trans.c b/iconv/gconv_trans.c index 44f0fd849a..54c4f3a100 100644 --- a/iconv/gconv_trans.c +++ b/iconv/gconv_trans.c @@ -232,6 +232,6 @@ __gconv_transliterate (struct __gconv_step *step, } /* Haven't found a match. */ - return __GCONV_ILLEGAL_INPUT; + return __gconv_mark_illegal_input (step_data); } libc_hidden_def (__gconv_transliterate) diff --git a/iconv/iconv_prog.c b/iconv/iconv_prog.c index a765b1af21..a2f1d34e45 100644 --- a/iconv/iconv_prog.c +++ b/iconv/iconv_prog.c @@ -31,9 +31,6 @@ #include <string.h> #include <unistd.h> #include <libintl.h> -#ifdef _POSIX_MAPPED_FILES -# include <sys/mman.h> -#endif #include <charmap.h> #include <gconv_int.h> #include "iconv_prog.h" @@ -50,7 +47,11 @@ static void print_version (FILE *stream, struct argp_state *state); void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; -#define OPT_VERBOSE 1000 +enum + { + OPT_VERBOSE = 1000, + OPT_BUFFER_SIZE, + }; #define OPT_LIST 'l' /* Definitions of arguments for argp functions. */ @@ -66,6 +67,10 @@ static const struct argp_option options[] = { "output", 'o', N_("FILE"), 0, N_("output file") }, { "silent", 's', NULL, 0, N_("suppress warnings") }, { "verbose", OPT_VERBOSE, NULL, 0, N_("print progress information") }, + /* This is an internal option intended for testing only. Very small + buffers do not work with all character sets. */ + { "buffer-size", OPT_BUFFER_SIZE, N_("BYTE-COUNT"), OPTION_HIDDEN, + N_("size of in-memory scratch buffer") }, { NULL, 0, NULL, 0, NULL } }; @@ -103,13 +108,21 @@ static int list; /* If nonzero omit invalid character from output. */ int omit_invalid; +/* Current index in argv (after command line processing) with the + input file name. */ +static int current_input_file_index; + +/* Size of the temporary, in-memory buffer. Exceeding it needs + spooling to disk in a temporary file. Controlled by --buffer_size. */ +static size_t output_buffer_size = 1024 * 1024; + /* Prototypes for the functions doing the actual work. */ -static int process_block (iconv_t cd, char *addr, size_t len, FILE **output, - const char *output_file); -static int process_fd (iconv_t cd, int fd, FILE **output, - const char *output_file); -static int process_file (iconv_t cd, FILE *input, FILE **output, - const char *output_file); +static void prepare_output_file (char **argv); +static void close_output_file (__gconv_t cd, int status); +static int process_block (iconv_t cd, char **addr, size_t *len, + off64_t file_offset, bool *incomplete); +static int process_fd (iconv_t cd, int fd); +static int process_file (iconv_t cd, FILE *input); static void print_known_names (void); @@ -117,7 +130,6 @@ int main (int argc, char *argv[]) { int status = EXIT_SUCCESS; - int remaining; __gconv_t cd; struct charmap_t *from_charmap = NULL; struct charmap_t *to_charmap = NULL; @@ -129,7 +141,7 @@ main (int argc, char *argv[]) textdomain (_libc_intl_domainname); /* Parse and process arguments. */ - argp_parse (&argp, argc, argv, 0, &remaining, NULL); + argp_parse (&argp, argc, argv, 0, ¤t_input_file_index, NULL); /* List all coded character sets if wanted. */ if (list) @@ -164,7 +176,8 @@ main (int argc, char *argv[]) if (from_charmap != NULL || to_charmap != NULL) /* Construct the conversion table and do the conversion. */ status = charmap_conversion (from_code, from_charmap, to_code, to_charmap, - argc, remaining, argv, output_file); + argc, current_input_file_index, argv, + output_file); else { struct gconv_spec conv_spec; @@ -238,83 +251,45 @@ conversions from `%s' and to `%s' are not supported"), _("failed to start conversion processing")); } - /* The output file. Will be opened when we are ready to produce - output. */ - FILE *output = NULL; + prepare_output_file (argv); /* Now process the remaining files. Write them to stdout or the file specified with the `-o' parameter. If we have no file given as the parameter process all from stdin. */ - if (remaining == argc) + if (current_input_file_index == argc) { - if (process_file (cd, stdin, &output, output_file) != 0) + if (process_file (cd, stdin) != 0) status = EXIT_FAILURE; } else do { -#ifdef _POSIX_MAPPED_FILES - struct stat64 st; - char *addr; -#endif int fd, ret; if (verbose) - fprintf (stderr, "%s:\n", argv[remaining]); - if (strcmp (argv[remaining], "-") == 0) - fd = 0; + fprintf (stderr, "%s:\n", argv[current_input_file_index]); + if (strcmp (argv[current_input_file_index], "-") == 0) + fd = STDIN_FILENO; else { - fd = open (argv[remaining], O_RDONLY); + fd = open (argv[current_input_file_index], O_RDONLY); if (fd == -1) { error (0, errno, _("cannot open input file `%s'"), - argv[remaining]); + argv[current_input_file_index]); status = EXIT_FAILURE; continue; } } -#ifdef _POSIX_MAPPED_FILES - /* We have possibilities for reading the input file. First try - to mmap() it since this will provide the fastest solution. */ - if (fstat64 (fd, &st) == 0 - && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, - fd, 0)) != MAP_FAILED)) - { - /* Yes, we can use mmap(). The descriptor is not needed - anymore. */ - if (close (fd) != 0) - error (EXIT_FAILURE, errno, - _("error while closing input `%s'"), - argv[remaining]); - - ret = process_block (cd, addr, st.st_size, &output, - output_file); - - /* We don't need the input data anymore. */ - munmap ((void *) addr, st.st_size); - - if (ret != 0) - { - status = EXIT_FAILURE; - - if (ret < 0) - /* We cannot go on with producing output since it might - lead to problem because the last output might leave - the output stream in an undefined state. */ - break; - } - } - else -#endif /* _POSIX_MAPPED_FILES */ { /* Read the file in pieces. */ - ret = process_fd (cd, fd, &output, output_file); + ret = process_fd (cd, fd); /* Now close the file. */ - close (fd); + if (fd != STDIN_FILENO) + close (fd); if (ret != 0) { @@ -329,11 +304,15 @@ conversions from `%s' and to `%s' are not supported"), } } } - while (++remaining < argc); + while (++current_input_file_index < argc); + + /* Ensure that iconv -c still exits with failure if iconv (the + function) has failed with E2BIG instead of EILSEQ. */ + if (__gconv_has_illegal_input (cd)) + status = EXIT_FAILURE; /* Close the output file now. */ - if (output != NULL && fclose (output)) - error (EXIT_FAILURE, errno, _("error while closing output file")); + close_output_file (cd, status); } return status; @@ -363,6 +342,14 @@ parse_opt (int key, char *arg, struct argp_state *state) /* Omit invalid characters from output. */ omit_invalid = 1; break; + case OPT_BUFFER_SIZE: + { + int i = atoi (arg); + if (i <= 0) + error (EXIT_FAILURE, 0, _("invalid buffer size: %s"), arg); + output_buffer_size = i; + } + break; case OPT_VERBOSE: verbose = 1; break; @@ -409,115 +396,299 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); } +/* Command line index of the last input file that overlaps with the + output file. Zero means no temporary file is ever required. */ +static int last_overlapping_file_index; -static int -write_output (const char *outbuf, const char *outptr, FILE **output, - const char *output_file) +/* This is set to true if the output is written to a temporary file. */ +static bool output_using_temporary_file; + +/* This is the file descriptor that will be used by write_output. */ +static int output_fd = -1; + +/* Pointers at the start and end of the fixed-size output buffer. */ +static char *output_buffer_start; + +/* Current write position in the output buffer. */ +static char *output_buffer_current; + +/* Remaining bytes after output_buffer_current in the output buffer. */ +static size_t output_buffer_remaining; + + +/* Reduce the buffer size when writing directly to the output file, to + reduce cache utilization. */ +static size_t copy_buffer_size = BUFSIZ; + +static void +output_error (void) { - /* We have something to write out. */ - int errno_save = errno; + error (EXIT_FAILURE, errno, _("cannot open output file")); +} - if (*output == NULL) +static void +input_error (const char *path) +{ + error (0, errno, _("cannot open input file `%s'"), path); +} + +/* Opens output_file for writing, truncating it. */ +static void +open_output_direct (void) +{ + output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0777); + if (output_fd < 0) + output_error (); +} + +static void +prepare_output_file (char **argv) +{ + if (copy_buffer_size > output_buffer_size) + copy_buffer_size = output_buffer_size; + + if (output_file == NULL || strcmp (output_file, "-") == 0) { - /* Determine output file. */ - if (output_file != NULL && strcmp (output_file, "-") != 0) + /* No buffering is required when writing to standard output + because input overlap is expected to be solved externally. */ + output_fd = STDOUT_FILENO; + output_buffer_size = copy_buffer_size; + } + else + { + /* If iconv creates the output file, no overlap is possible. */ + output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_EXCL, 0777); + if (output_fd >= 0) + output_buffer_size = copy_buffer_size; + else { - *output = fopen (output_file, "w"); - if (*output == NULL) - error (EXIT_FAILURE, errno, _("cannot open output file")); + /* Otherwise, check if any of the input files overlap with the + output file. */ + struct statx st; + if (statx (AT_FDCWD, output_file, 0, STATX_INO | STATX_MODE, &st) + != 0) + output_error (); + uint32_t out_dev_minor = st.stx_dev_minor; + uint32_t out_dev_major = st.stx_dev_major; + uint64_t out_ino = st.stx_ino; + + int idx = current_input_file_index; + while (true) + { + /* Special case: no input files means standard input. */ + if (argv[idx] == NULL && idx != current_input_file_index) + break; + + int ret; + if (argv[idx] == NULL || strcmp (argv[idx], "-") == 0) + ret = statx (STDIN_FILENO, "", AT_EMPTY_PATH, STATX_INO, &st); + else + ret = statx (AT_FDCWD, argv[idx], 0, STATX_INO, &st); + if (ret != 0) + { + input_error (argv[idx]); + exit (EXIT_FAILURE); + } + if (out_dev_minor == st.stx_dev_minor + && out_dev_major == st.stx_dev_major + && out_ino == st.stx_ino) + { + if (argv[idx] == NULL) + /* Corner case: index of NULL would be larger than + idx while converting, triggering a switch away + from the temporary file. */ + last_overlapping_file_index = INT_MAX; + else + last_overlapping_file_index = idx; + } + + if (argv[idx] == NULL) + break; + ++idx; + } + + /* If there is no overlap, avoid using a temporary file. */ + if (last_overlapping_file_index == 0) + { + open_output_direct (); + output_buffer_size = copy_buffer_size; + } } - else - *output = stdout; } - if (fwrite (outbuf, 1, outptr - outbuf, *output) < (size_t) (outptr - outbuf) - || ferror (*output)) + output_buffer_start = malloc (output_buffer_size); + if (output_buffer_start == NULL) + output_error (); + output_buffer_current = output_buffer_start; + output_buffer_remaining = output_buffer_size; +} + +/* Write out the range [first, last), terminating the process on write + error. */ +static void +write_fully (int fd, const char *first, const char *last) +{ + while (first < last) { - /* Error occurred while printing the result. */ - error (0, 0, _("\ + ssize_t ret = write (fd, first, last - first); + if (ret == 0) + { + errno = ENOSPC; + output_error (); + } + if (ret < 0) + error (EXIT_FAILURE, errno, _("\ conversion stopped due to problem in writing the output")); - return -1; + first += ret; + } +} + +static void +flush_output (void) +{ + bool temporary_file_not_needed + = current_input_file_index > last_overlapping_file_index; + if (output_fd < 0) + { + if (temporary_file_not_needed) + open_output_direct (); + else + { + /* Create an anonymous temporary file. */ + FILE *fp = tmpfile (); + if (fp == NULL) + output_error (); + output_fd = dup (fileno (fp)); + if (output_fd < 0) + output_error (); + fclose (fp); + output_using_temporary_file = true; + } + /* Either way, no longer use a memory-only staging buffer. */ + output_buffer_size = copy_buffer_size; } + else if (output_using_temporary_file && temporary_file_not_needed) + { + /* The temporary file is no longer needed. Switch to direct + output, replacing output_fd. */ + int temp_fd = output_fd; + open_output_direct (); + + /* Copy over the data spooled to the temporary file. */ + if (lseek (temp_fd, 0, SEEK_SET) < 0) + output_error (); + while (true) + { + char buf[BUFSIZ]; + ssize_t ret = read (temp_fd, buf, sizeof (buf)); + if (ret < 0) + output_error (); + if (ret == 0) + break; + write_fully (output_fd, buf, buf + ret); + } + close (temp_fd); - errno = errno_save; + /* No longer using a temporary file from now on. */ + output_using_temporary_file = false; + output_buffer_size = copy_buffer_size; + } - return 0; + write_fully (output_fd, output_buffer_start, output_buffer_current); + output_buffer_current = output_buffer_start; + output_buffer_remaining = output_buffer_size; } +static void +close_output_file (__gconv_t cd, int status) +{ + /* Do not perform a flush if a temporary file or the in-memory + buffer is in use and there was an error. It would clobber the + overlapping input file. */ + if (status != EXIT_SUCCESS && !omit_invalid && + (output_using_temporary_file || output_fd < 0)) + return; + + /* All the input text is processed. For state-dependent character + sets we have to flush the state now. + + The current_input_file_index variable is now larger than + last_overlapping_file_index, so the flush_output calls switch + away from the temporary file. */ + size_t n = iconv (cd, NULL, NULL, + &output_buffer_current, &output_buffer_remaining); + if (n == (size_t) -1 && errno == E2BIG) + { + /* Try again if the state flush exceeded the buffer space. */ + flush_output (); + n = iconv (cd, NULL, NULL, + &output_buffer_current, &output_buffer_remaining); + } + int saved_errno = errno; + flush_output (); + if (n == (size_t) -1 && !omit_invalid) + { + errno = saved_errno; + output_error (); + } + + if (output_fd == STDOUT_FILENO) + { + /* Close standard output in safe manner, to report certain + ENOSPC errors. */ + output_fd = dup (output_fd); + if (output_fd < 0) + output_error (); + } + if (close (output_fd) < 0) + output_error (); +} +/* CD is the iconv handle. Input processing starts at *ADDR, and + consumes upto *LEN bytes. *ADDR and *LEN are updated. FILE_OFFSET + is the file offset of the data initially at ADDR. *INCOMPLETE is + set to true if conversion stops due to an incomplete input + sequence. */ static int -process_block (iconv_t cd, char *addr, size_t len, FILE **output, - const char *output_file) +process_block (iconv_t cd, char **addr, size_t *len, off64_t file_offset, + bool *incomplete) { -#define OUTBUF_SIZE 32768 - const char *start = addr; - char outbuf[OUTBUF_SIZE]; - char *outptr; - size_t outlen; + const char *start = *addr; size_t n; int ret = 0; - while (len > 0) + while (*len > 0) { - outptr = outbuf; - outlen = OUTBUF_SIZE; - n = iconv (cd, &addr, &len, &outptr, &outlen); + n = iconv (cd, addr, len, + &output_buffer_current, &output_buffer_remaining); if (n == (size_t) -1 && omit_invalid && errno == EILSEQ) { ret = 1; - if (len == 0) + if (*len == 0) n = 0; else errno = E2BIG; } - if (outptr != outbuf) - { - ret = write_output (outbuf, outptr, output, output_file); - if (ret != 0) - break; - } - if (n != (size_t) -1) - { - /* All the input test is processed. For state-dependent - character sets we have to flush the state now. */ - outptr = outbuf; - outlen = OUTBUF_SIZE; - n = iconv (cd, NULL, NULL, &outptr, &outlen); - - if (outptr != outbuf) - { - ret = write_output (outbuf, outptr, output, output_file); - if (ret != 0) - break; - } - - if (n != (size_t) -1) - break; - - if (omit_invalid && errno == EILSEQ) - { - ret = 1; - break; - } - } + break; - if (errno != E2BIG) + if (errno == E2BIG) + flush_output (); + else { /* iconv() ran into a problem. */ switch (errno) { case EILSEQ: if (! omit_invalid) - error (0, 0, _("illegal input sequence at position %ld"), - (long int) (addr - start)); + error (0, 0, _("illegal input sequence at position %lld"), + (long long int) (file_offset + (*addr - start))); break; case EINVAL: - error (0, 0, _("\ -incomplete character or shift sequence at end of buffer")); - break; + *incomplete = true; + return ret; case EBADF: error (0, 0, _("internal error (illegal descriptor)")); break; @@ -535,90 +706,60 @@ incomplete character or shift sequence at end of buffer")); static int -process_fd (iconv_t cd, int fd, FILE **output, const char *output_file) +process_fd (iconv_t cd, int fd) { - /* we have a problem with reading from a descriptor since we must not - provide the iconv() function an incomplete character or shift - sequence at the end of the buffer. Since we have to deal with - arbitrary encodings we must read the whole text in a buffer and - process it in one step. */ - static char *inbuf = NULL; - static size_t maxlen = 0; - char *inptr = NULL; - size_t actlen = 0; - - while (actlen < maxlen) + char inbuf[BUFSIZ]; + char *inbuf_end = inbuf + sizeof (inbuf); + size_t inbuf_used = 0; + off64_t file_offset = 0; + int status = 0; + bool incomplete = false; + + while (true) { - ssize_t n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) + char *p = inbuf + inbuf_used; + ssize_t read_ret = read (fd, p, inbuf_end - p); + if (read_ret == 0) + { + /* On EOF, check if the previous iconv invocation saw an + incomplete sequence. */ + if (incomplete) + { + error (0, 0, _("\ +incomplete character or shift sequence at end of buffer")); + return 1; + } + return 0; + } + if (read_ret < 0) { - /* Error while reading. */ error (0, errno, _("error while reading the input")); return -1; } - - inptr += n; - actlen += n; + inbuf_used += read_ret; + incomplete = false; + p = inbuf; + int ret = process_block (cd, &p, &inbuf_used, file_offset, &incomplete); + if (ret != 0) + { + status = ret; + if (ret < 0) + break; + } + /* The next loop iteration consumes the leftover bytes. */ + memmove (inbuf, p, inbuf_used); + file_offset += read_ret - inbuf_used; } - - if (actlen == maxlen) - while (1) - { - ssize_t n; - char *new_inbuf; - - /* Increase the buffer. */ - new_inbuf = (char *) realloc (inbuf, maxlen + 32768); - if (new_inbuf == NULL) - { - error (0, errno, _("unable to allocate buffer for input")); - return -1; - } - inbuf = new_inbuf; - maxlen += 32768; - inptr = inbuf + actlen; - - do - { - n = read (fd, inptr, maxlen - actlen); - - if (n == 0) - /* No more text to read. */ - break; - - if (n == -1) - { - /* Error while reading. */ - error (0, errno, _("error while reading the input")); - return -1; - } - - inptr += n; - actlen += n; - } - while (actlen < maxlen); - - if (n == 0) - /* Break again so we leave both loops. */ - break; - } - - /* Now we have all the input in the buffer. Process it in one run. */ - return process_block (cd, inbuf, actlen, output, output_file); + return status; } static int -process_file (iconv_t cd, FILE *input, FILE **output, const char *output_file) +process_file (iconv_t cd, FILE *input) { /* This should be safe since we use this function only for `stdin' and we haven't read anything so far. */ - return process_fd (cd, fileno (input), output, output_file); + return process_fd (cd, fileno (input)); } diff --git a/iconv/loop.c b/iconv/loop.c index 5340dafc70..199fb28326 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -123,8 +123,7 @@ `continue' must reach certain points. */ #define STANDARD_FROM_LOOP_ERR_HANDLER(Incr) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ - \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ \ @@ -142,7 +141,7 @@ points. */ #define STANDARD_TO_LOOP_ERR_HANDLER(Incr) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ \ if (irreversible == NULL) \ /* This means we are in call from __gconv_transliterate. In this \ diff --git a/iconv/tst-iconv-sticky-input-error.c b/iconv/tst-iconv-sticky-input-error.c new file mode 100644 index 0000000000..34a245f185 --- /dev/null +++ b/iconv/tst-iconv-sticky-input-error.c @@ -0,0 +1,135 @@ +/* Test __GCONV_ENCOUNTERED_ILLEGAL_INPUT, as used by iconv -c (bug 32046). + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + + +#include <array_length.h> +#include <errno.h> +#include <gconv_int.h> +#include <iconv.h> +#include <stdbool.h> +#include <support/check.h> +#include <support/support.h> +#include <support/test-driver.h> +#include <stdio.h> + +/* FROM is the input character set, TO the output character set. If + IGNORE is true, the iconv descriptor is set up in the same way as + iconv -c would. INPUT is the input string, EXPECTED_OUTPUT the + output. OUTPUT_LIMIT is a byte count, specifying how many input + bytes are passed to the iconv function on each invocation. */ +static void +one_direction (const char *from, const char *to, bool ignore, + const char *input, const char *expected_output, + size_t output_limit) +{ + if (test_verbose) + { + char *quoted_input = support_quote_string (input); + char *quoted_output = support_quote_string (expected_output); + printf ("info: testing from=\"%s\" to=\"%s\" ignore=%d input=\"%s\"" + " expected_output=\"%s\" output_limit=%zu\n", + from, to, (int) ignore, quoted_input, + quoted_output, output_limit); + free (quoted_output); + free (quoted_input); + } + + __gconv_t cd; + if (ignore) + { + struct gconv_spec conv_spec; + TEST_VERIFY_EXIT (__gconv_create_spec (&conv_spec, from, to) + == &conv_spec); + conv_spec.ignore = true; + cd = (iconv_t) -1; + TEST_COMPARE (__gconv_open (&conv_spec, &cd, 0), __GCONV_OK); + __gconv_destroy_spec (&conv_spec); + } + else + cd = iconv_open (to, from); + TEST_VERIFY_EXIT (cd != (iconv_t) -1); + + char *input_ptr = (char *) input; + size_t input_len = strlen (input); + char output_buf[20]; + char *output_ptr = output_buf; + size_t output_len; + do + { + output_len = array_end (output_buf) - output_ptr; + if (output_len > output_limit) + /* Limit the buffer size as requested by the caller. */ + output_len = output_limit; + TEST_VERIFY_EXIT (output_len > 0); + if (input_len == 0) + /* Trigger final flush. */ + input_ptr = NULL; + char *old_input_ptr = input_ptr; + size_t ret = iconv (cd, &input_ptr, &input_len, + &output_ptr, &output_len); + if (ret == (size_t) -1) + { + if (errno != EILSEQ) + TEST_COMPARE (errno, E2BIG); + } + + if (input_ptr == old_input_ptr) + /* Avoid endless loop if stuck on an invalid input character. */ + break; + } + while (input_ptr != NULL); + + /* Test the sticky illegal input bit. */ + TEST_VERIFY (__gconv_has_illegal_input (cd)); + + TEST_COMPARE_BLOB (expected_output, strlen (expected_output), + output_buf, output_ptr - output_buf); + + TEST_COMPARE (iconv_close (cd), 0); +} + +static int +do_test (void) +{ + static const char charsets[][14] = + { + "ASCII", + "ASCII//IGNORE", + "UTF-8", + "UTF-8//IGNORE", + }; + + for (size_t from_idx = 0; from_idx < array_length (charsets); ++from_idx) + for (size_t to_idx = 0; to_idx < array_length (charsets); ++to_idx) + for (int do_ignore = 0; do_ignore < 2; ++do_ignore) + for (int limit = 1; limit < 5; ++limit) + for (int skip = 0; skip < 3; ++skip) + { + const char *expected_output; + if (do_ignore || strstr (charsets[to_idx], "//IGNORE") != NULL) + expected_output = "ABXY" + skip; + else + expected_output = "AB" + skip; + one_direction (charsets[from_idx], charsets[to_idx], do_ignore, + "AB\xffXY" + skip, expected_output, limit); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/iconv/tst-iconv_prog-buffer.sh b/iconv/tst-iconv_prog-buffer.sh new file mode 100644 index 0000000000..23098ac56a --- /dev/null +++ b/iconv/tst-iconv_prog-buffer.sh @@ -0,0 +1,306 @@ +#!/bin/bash +# Test for iconv (the program) buffer management. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +# Arguments: +# root of the build tree ($(objpfx-common)) +# test command wrapper (for running on the board/with new ld.so) +# extra flags to pass to iconv +# number of times to double the input files in size (default: 0) + +exec 2>&1 +set -e + +exec {logfd}>&1 + +codir=$1 +test_program_prefix="$2" + +# Use internal converters to avoid issues with module loading. +iconv_args="-f ASCII -t UTF-8 $3" + +file_size_doublings=${4-0} + +failure=false + +tmp=`mktemp -d` +trap 'rm -rf "$tmp"' 0 +echo ABC > "$tmp/abc" +echo DEF > "$tmp/def" +echo GGG > "$tmp/ggg" +echo HH > "$tmp/hh" +echo XY > "$tmp/xy" +echo ZT > "$tmp/zt" +echo OUT > "$tmp/out-template" +: > "$tmp/empty" +printf '\xff' > "$tmp/0xff" + +# Length should be a prime number, to help with buffer alignment testing. +printf '\xc3\xa4\xe2\x80\x94\xe2\x80\x94\xc3\xa4\n' > "$tmp/utf8-sequence" + +# Double all files to produce larger buffers. +for p in "$tmp"/* ; do + i=0 + while test $i -lt $file_size_doublings; do + cat "$p" "$p" > "$tmp/scratch" + mv "$tmp/scratch" "$p" + i=$(($i + 1)) + done +done + +cat "$tmp/xy" "$tmp/0xff" "$tmp/zt" > "$tmp/0xff-wrapped" + +run_iconv () { + local c=0 + if test "${FUNCNAME[2]}" = main; then + c=1 + fi + echo "${BASH_SOURCE[$c]}:${BASH_LINENO[$c]}: iconv $iconv_args $@" >&$logfd + $test_program_prefix $codir/iconv/iconv_prog $iconv_args "$@" +} + +check_out_expected () { + if ! cmp -s "$tmp/out" "$tmp/expected" ; then + echo "error: iconv output difference" >&$logfd + echo "*** expected ***" >&$logfd + cat "$tmp/expected" >&$logfd + echo "*** actual ***" >&$logfd + cat "$tmp/out" >&$logfd + failure=true + fi +} + +expect_files () { + local f + ! test -z "$1" + cp "$tmp/$1" "$tmp/expected" + shift + for f in "$@" ; do + cat "$tmp/$f" >> "$tmp/expected" + done + check_out_expected +} + +check_out () { + cat > "$tmp/expected" + check_out_expected +} + +expect_exit () { + local expected=$1 + shift + # Prevent failure for stopping the script. + if "$@" ; then + actual=$? + else + actual=$? + fi + if test "$actual" -ne "$expected"; then + echo "error: expected exit status $expected, not $actual" >&$logfd + exit 1 + fi +} + +ignore_failure () { + set +e + "$@" + status=$? + set -e +} + +# Concatentation test. +run_iconv -o "$tmp/out" "$tmp/abc" "$tmp/def" +expect_files abc def + +# Single-file in-place conversion. +run_iconv -o "$tmp/out" "$tmp/out" +expect_files abc def + +# Multiple input files with in-place conversion. + +run_iconv -o "$tmp/out" "$tmp/out" "$tmp/abc" +expect_files abc def abc + +run_iconv -o "$tmp/out" "$tmp/ggg" "$tmp/out" +expect_files ggg abc def abc + +run_iconv -o "$tmp/out" "$tmp/hh" "$tmp/out" "$tmp/hh" +expect_files hh ggg abc def abc hh + +cp "$tmp/out-template" "$tmp/out" +run_iconv -o "$tmp/out" "$tmp/ggg" "$tmp/out" "$tmp/out" "$tmp/ggg" +expect_files ggg out-template out-template ggg + +cp "$tmp/out-template" "$tmp/out" +run_iconv -o "$tmp/out" "$tmp/ggg" "$tmp/out" "$tmp/hh" "$tmp/out" "$tmp/ggg" +expect_files ggg out-template hh out-template ggg + +# Empty output should truncate the output file if exists. + +cp "$tmp/out-template" "$tmp/out" +run_iconv -o "$tmp/out" </dev/null +expect_files empty + +cp "$tmp/out-template" "$tmp/out" +run_iconv -o "$tmp/out" - </dev/null +expect_files empty + +cp "$tmp/out-template" "$tmp/out" +run_iconv -o "$tmp/out" /dev/null +expect_files empty + +cp "$tmp/out-template" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" "$tmp/0xff" +expect_files empty + +# But not if we are writing to standard output. + +cp "$tmp/out-template" "$tmp/out" +run_iconv </dev/null >>"$tmp/out" +expect_files out-template + +cp "$tmp/out-template" "$tmp/out" +run_iconv - </dev/null >>"$tmp/out" +expect_files out-template + +cp "$tmp/out-template" "$tmp/out" +run_iconv /dev/null >>"$tmp/out" +expect_files out-template + +# Conversion errors should avoid clobbering an existing file if +# it is also an input file. + +cp "$tmp/0xff" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/out" +expect_files 0xff + +cp "$tmp/0xff" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" < "$tmp/out" +expect_files 0xff + +cp "$tmp/0xff" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" - < "$tmp/out" +expect_files 0xff + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/out" +expect_files 0xff-wrapped + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" < "$tmp/out" +expect_files 0xff-wrapped + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" - < "$tmp/out" +expect_files 0xff-wrapped + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/abc" "$tmp/out" +expect_files 0xff-wrapped + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/abc" - < "$tmp/out" +expect_files 0xff-wrapped + +# If errors are ignored, the file should be overwritten. + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" "$tmp/out" +expect_files xy zt + +cp "$tmp/0xff" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" "$tmp/abc" "$tmp/out" "$tmp/def" +expect_files abc def + +cp "$tmp/out-template" "$tmp/out" +expect_exit 1 \ + run_iconv -c -o "$tmp/out" "$tmp/abc" "$tmp/0xff" "$tmp/def" 2>"$tmp/err" +! test -s "$tmp/err" +expect_files abc def + +cp "$tmp/out-template" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" \ + "$tmp/abc" "$tmp/0xff-wrapped" "$tmp/def" 2>"$tmp/err" +! test -s "$tmp/err" +expect_files abc xy zt def + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" "$tmp/out" "$tmp/abc" "$tmp/out" "$tmp/def" +expect_files xy zt abc xy zt def + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" \ + "$tmp/out" "$tmp/abc" "$tmp/out" "$tmp/def" +expect_files 0xff-wrapped + +cp "$tmp/0xff-wrapped" "$tmp/out" +expect_exit 1 run_iconv -c -o "$tmp/out" \ + "$tmp/abc" "$tmp/out" "$tmp/def" "$tmp/out" +expect_files abc xy zt def xy zt + +# If the file does not exist yet, it should not be created on error. + +rm "$tmp/out" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/0xff" +! test -e "$tmp/out" + +expect_exit 1 run_iconv -o "$tmp/out" < "$tmp/0xff" +! test -e "$tmp/out" + +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/abc" "$tmp/0xff" "$tmp/def" +! test -e "$tmp/out" + +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/abc" - < "$tmp/0xff" "$tmp/def" +! test -e "$tmp/out" + +# Listing standard input multiple times should not fail (bug 32050). + +run_iconv -o "$tmp/out" "$tmp/xy" - - "$tmp/zt" < "$tmp/abc" +expect_files xy abc zt + +# NB: Extra iconv args are ignored after this point. Actual +# multi-byte conversion does not work with tiny buffers. +iconv_args="-f UTF-8 -t ASCII" + +printf 'x\n\xc3' > "$tmp/incomplete" +expect_exit 1 run_iconv -o "$tmp/out" "$tmp/incomplete" +check_out <<EOF +x +EOF + +# Test buffering behavior if the buffer ends with an incomplete +# multi-byte sequence. +prefix="" +prefix_length=0 +while test $prefix_length -lt 12; do + echo "info: testing prefix length $prefix_length" 2>&$logfd + printf "%s" "$prefix" > "$tmp/prefix" + cat "$tmp/prefix" "$tmp/utf8-sequence" > "$tmp/tmp" + iconv_args="-f UTF-8 -t UCS-4" + run_iconv -o "$tmp/out1" "$tmp/tmp" + iconv_args="-f UCS-4 -t UTF-8" + run_iconv -o "$tmp/out" "$tmp/out1" + expect_files prefix utf8-sequence + + prefix="$prefix@" + prefix_length=$(($prefix_length + 1)) +done + +if $failure ; then + exit 1 +fi diff --git a/iconvdata/cp932.c b/iconvdata/cp932.c index bf7297b114..3def70a70b 100644 --- a/iconvdata/cp932.c +++ b/iconvdata/cp932.c @@ -4559,7 +4559,7 @@ static const char from_ucs4_extra[229][2] = if (! ignore_errors_p ()) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ @@ -4599,7 +4599,7 @@ static const char from_ucs4_extra[229][2] = if (! ignore_errors_p ()) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ @@ -4634,7 +4634,7 @@ static const char from_ucs4_extra[229][2] = if (! ignore_errors_p ()) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ diff --git a/iconvdata/euc-jp-ms.c b/iconvdata/euc-jp-ms.c index d03a0e05bb..96c5325e9d 100644 --- a/iconvdata/euc-jp-ms.c +++ b/iconvdata/euc-jp-ms.c @@ -4659,7 +4659,7 @@ static const unsigned char from_ucs4_extra[229][2] = /* This is illegal. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ @@ -4689,7 +4689,7 @@ static const unsigned char from_ucs4_extra[229][2] = /* This is an illegal character. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ @@ -4709,7 +4709,7 @@ static const unsigned char from_ucs4_extra[229][2] = if (! ignore_errors_p ()) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ } \ @@ -4820,7 +4820,7 @@ static const unsigned char from_ucs4_extra[229][2] = if (! ignore_errors_p ()) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ diff --git a/iconvdata/gbbig5.c b/iconvdata/gbbig5.c index f05deeeb1a..b15a2ef932 100644 --- a/iconvdata/gbbig5.c +++ b/iconvdata/gbbig5.c @@ -4831,7 +4831,7 @@ const char __from_big5_to_gb2312 [13973][2] = { \ /* We do not have a mapping for this character. \ If ignore errors, map it to 0xa1bc - big5 box character */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ \ @@ -4922,7 +4922,7 @@ const char __from_big5_to_gb2312 [13973][2] = { \ /* We do not have a mapping for this character. \ If ignore errors, map it to 0xa1f5 - gb box character */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ \ diff --git a/iconvdata/ibm1364.c b/iconvdata/ibm1364.c index 4c37f30e98..d6c8ce7f68 100644 --- a/iconvdata/ibm1364.c +++ b/iconvdata/ibm1364.c @@ -179,7 +179,7 @@ enum /* This is an illegal character. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ ++*irreversible; \ @@ -219,7 +219,7 @@ enum /* This is an illegal character. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ ++*irreversible; \ @@ -300,7 +300,7 @@ enum \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ ++*irreversible; \ @@ -332,7 +332,7 @@ enum /* This is an illegal character. */ \ if (! ignore_errors_p ()) \ { \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ break; \ } \ ++*irreversible; \ diff --git a/iconvdata/iso646.c b/iconvdata/iso646.c index d96e5f86b9..ba7e23f8ac 100644 --- a/iconvdata/iso646.c +++ b/iconvdata/iso646.c @@ -313,7 +313,7 @@ gconv_end (struct __gconv_step *data) ch = 0xf9; \ else if (var == JP_OCR_B) \ /* Illegal character. */ \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ else if (var == YU) \ ch = 0x17e; \ else if (var == HU) \ @@ -387,7 +387,7 @@ gconv_end (struct __gconv_step *data) ch = 0xec; \ else if (var == JP_OCR_B) \ /* Illegal character. */ \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ else if (var == YU) \ ch = 0x10d; \ else if (var == HU) \ @@ -403,7 +403,7 @@ gconv_end (struct __gconv_step *data) break; \ case 0x80 ... 0xff: \ /* Illegal character. */ \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ } \ \ @@ -440,17 +440,17 @@ gconv_end (struct __gconv_step *data) case 0x23: \ if (var == GB || var == ES || var == IT || var == FR || var == FR1 \ || var == NO2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x24: \ if (var == CN || var == HU || var == CU || var == SE || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x40: \ if (var == CA || var == CA2 || var == DE || var == ES || var == ES2 \ || var == IT || var == YU || var == HU || var == FR || var == FR1 \ || var == PT || var == PT2 || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x5b: \ if (var == CA || var == CA2 || var == DE || var == DK || var == ES \ @@ -458,7 +458,7 @@ gconv_end (struct __gconv_step *data) || var == HU || var == FR || var == FR1 || var == NO \ || var == NO2 || var == PT || var == PT2 || var == SE \ || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ else if (var == CU) \ ch = 0x7d; \ break; \ @@ -468,7 +468,7 @@ gconv_end (struct __gconv_step *data) || var == YU || var == KR || var == HU || var == CU || var == FR \ || var == FR1 || var == NO || var == NO2 || var == PT \ || var == PT2 || var == SE || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x5d: \ if (var == CA || var == CA2 || var == DE || var == DK || var == ES \ @@ -476,17 +476,17 @@ gconv_end (struct __gconv_step *data) || var == HU || var == FR || var == FR1 || var == NO \ || var == NO2 || var == PT || var == PT2 || var == SE \ || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x5e: \ if (var == CA || var == CA2 || var == ES2 || var == YU || var == CU \ || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x60: \ if (var == CA || var == CA2 || var == IT || var == JP_OCR_B \ || var == YU || var == HU || var == FR || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x7b: \ if (var == CA || var == CA2 || var == DE || var == DK || var == ES \ @@ -494,14 +494,14 @@ gconv_end (struct __gconv_step *data) || var == CU || var == FR || var == FR1 || var == NO \ || var == NO2 || var == PT || var == PT2 || var == SE \ || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x7c: \ if (var == CA || var == CA2 || var == DE || var == DK || var == ES \ || var == ES2 || var == IT || var == YU || var == HU || var == CU \ || var == FR || var == FR1 || var == NO || var == PT \ || var == PT2 || var == SE || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ else if (var == NO2) \ ch = 0x7e; \ break; \ @@ -510,7 +510,7 @@ gconv_end (struct __gconv_step *data) || var == ES2 || var == IT || var == YU || var == HU || var == CU \ || var == FR || var == FR1 || var == NO || var == NO2 \ || var == PT || var == PT2 || var == SE || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x7e: \ if (var == GB || var == CA || var == CA2 || var == DE || var == ES2 \ @@ -518,21 +518,21 @@ gconv_end (struct __gconv_step *data) || var == YU || var == HU || var == CU || var == FR || var == FR1 \ || var == NO || var == NO2 || var == PT || var == SE \ || var == SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xa1: \ if (var != ES && var != ES2 && var != CU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0xa3: \ if (var != GB && var != ES && var != IT && var != FR && var != FR1) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x23; \ break; \ case 0xa4: \ if (var != HU && var != CU && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x24; \ break; \ case 0xa5: \ @@ -541,7 +541,7 @@ gconv_end (struct __gconv_step *data) else if (var == JP || var == JP_OCR_B) \ ch = 0x5c; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xa7: \ if (var == DE || var == ES || var == IT || var == PT) \ @@ -551,11 +551,11 @@ gconv_end (struct __gconv_step *data) else if (var == NO2) \ ch = 0x23; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xa8: \ if (var != ES2 && var != CU && var != FR && var != FR1) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0xb0: \ @@ -566,7 +566,7 @@ gconv_end (struct __gconv_step *data) else if (var == PT) \ ch = 0x7e; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xb4: \ if (var == ES2 || var == CU) \ @@ -574,11 +574,11 @@ gconv_end (struct __gconv_step *data) else if (var == PT2) \ ch = 0x40; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xb5: \ if (var != FR) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x60; \ break; \ case 0xbf: \ @@ -587,31 +587,31 @@ gconv_end (struct __gconv_step *data) else if (var == ES2 || var == CU) \ ch = 0x5e; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xc1: \ if (var != HU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x40; \ break; \ case 0xc3: \ if (var != PT && var != PT2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0xc4: \ if (var != DE && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0xc5: \ if (var != DK && var != NO && var != NO2 && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5d; \ break; \ case 0xc6: \ if (var != DK && var != NO && var != NO2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0xc7: \ @@ -620,7 +620,7 @@ gconv_end (struct __gconv_step *data) else if (var == PT || var == PT2) \ ch = 0x5c; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xc9: \ if (var == CA2) \ @@ -630,26 +630,26 @@ gconv_end (struct __gconv_step *data) else if (var == SE2) \ ch = 0x40; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xd1: \ if (var != ES && var != ES2 && var != CU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5c; \ break; \ case 0xd5: \ if (var != PT && var != PT2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5d; \ break; \ case 0xd6: \ if (var != DE && var != HU && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5c; \ break; \ case 0xd8: \ if (var != DK && var != NO && var != NO2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5c; \ break; \ case 0xdc: \ @@ -658,11 +658,11 @@ gconv_end (struct __gconv_step *data) else if (var == SE2) \ ch = 0x5e; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xdf: \ if (var != DE) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0xe0: \ @@ -671,36 +671,36 @@ gconv_end (struct __gconv_step *data) else if (var == IT) \ ch = 0x7b; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xe1: \ if (var != HU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x60; \ break; \ case 0xe2: \ if (var != CA && var != CA2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0xe3: \ if (var != PT && var != PT2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7b; \ break; \ case 0xe4: \ if (var != DE && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7b; \ break; \ case 0xe5: \ if (var != DK && var != NO && var != NO2 && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7d; \ break; \ case 0xe6: \ if (var != DK && var != NO && var != NO2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7b; \ break; \ case 0xe7: \ @@ -711,11 +711,11 @@ gconv_end (struct __gconv_step *data) else if (var == PT || var == PT2) \ ch = 0x7c; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xe8: \ if (var != CA && var != CA2 && var != IT && var != FR && var != FR1) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7d; \ break; \ case 0xe9: \ @@ -726,51 +726,51 @@ gconv_end (struct __gconv_step *data) else if (var == SE2) \ ch = 0x60; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xea: \ if (var != CA && var != CA2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5d; \ break; \ case 0xec: \ if (var != IT) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0xee: \ if (var != CA) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5e; \ break; \ case 0xf1: \ if (var != ES && var != ES2 && var != CU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7c; \ break; \ case 0xf2: \ if (var != IT) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7c; \ break; \ case 0xf4: \ if (var != CA && var != CA2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x60; \ break; \ case 0xf5: \ if (var != PT && var != PT2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7d; \ break; \ case 0xf6: \ if (var != DE && var != HU && var != SE && var != SE2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7c; \ break; \ case 0xf8: \ if (var != DK && var != NO && var != NO2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7c; \ break; \ case 0xf9: \ @@ -779,11 +779,11 @@ gconv_end (struct __gconv_step *data) else if (var == IT) \ ch = 0x60; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0xfb: \ if (var != CA && var != CA2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0xfc: \ @@ -792,93 +792,93 @@ gconv_end (struct __gconv_step *data) else if (var == SE2) \ ch = 0x7e; \ else \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ break; \ case 0x160: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0x106: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5d; \ break; \ case 0x107: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7d; \ break; \ case 0x10c: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5e; \ break; \ case 0x10d: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0x110: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5c; \ break; \ case 0x111: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7c; \ break; \ case 0x161: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7b; \ break; \ case 0x17d: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x40; \ break; \ case 0x17e: \ if (var != YU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x60; \ break; \ case 0x2dd: \ if (var != HU) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0x2022: \ if (var != ES2) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x40; \ break; \ case 0x203e: \ if (var != GB && var != CN && var != JP && var != NO && var != SE) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x7e; \ break; \ case 0x20a9: \ if (var != KR) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5c; \ break; \ case 0x2329: \ if (var != JP_OCR_B) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5b; \ break; \ case 0x232a: \ if (var != JP_OCR_B) \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ ch = 0x5d; \ break; \ default: \ if (__glibc_unlikely (ch > 0x7f)) \ { \ UNICODE_TAG_HANDLER (ch, 4); \ - failure = __GCONV_ILLEGAL_INPUT; \ + failure = __gconv_mark_illegal_input (step_data); \ } \ break; \ } \ diff --git a/iconvdata/unicode.c b/iconvdata/unicode.c index d69c9887a1..79bb9886e5 100644 --- a/iconvdata/unicode.c +++ b/iconvdata/unicode.c @@ -163,7 +163,7 @@ gconv_end (struct __gconv_step *data) surrogates pass through, attackers could make a security \ hole exploit by synthesizing any desired plane 1-16 \ character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ inptr += 4; \ diff --git a/iconvdata/utf-16.c b/iconvdata/utf-16.c index a869353f20..9d9fd2a2a3 100644 --- a/iconvdata/utf-16.c +++ b/iconvdata/utf-16.c @@ -206,7 +206,7 @@ gconv_end (struct __gconv_step *data) We must catch this. If we let surrogates pass through, \ attackers could make a security hole exploit by \ synthesizing any desired plane 1-16 character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ inptr += 4; \ diff --git a/iconvdata/utf-32.c b/iconvdata/utf-32.c index 5693b48975..139eefb6d8 100644 --- a/iconvdata/utf-32.c +++ b/iconvdata/utf-32.c @@ -207,7 +207,7 @@ gconv_end (struct __gconv_step *data) We must catch this. If we let surrogates pass through, \ attackers could make a security hole exploit by \ generating "irregular UTF-32" sequences. */ \ - result = __GCONV_ILLEGAL_INPUT; \ + result = __gconv_mark_illegal_input (step_data); \ if (! ignore_errors_p ()) \ break; \ inptr += 4; \ diff --git a/include/bits/unistd_ext.h b/include/bits/unistd_ext.h index 277be05746..eeb07baf70 100644 --- a/include/bits/unistd_ext.h +++ b/include/bits/unistd_ext.h @@ -3,4 +3,7 @@ #ifndef _ISOMAC extern int __close_range (unsigned int lowfd, unsigned int highfd, int flags); libc_hidden_proto (__close_range); + +extern pid_t __gettid (void); +libc_hidden_proto (__gettid); #endif diff --git a/include/errno.h b/include/errno.h index c361a785c2..f0ccaa74dd 100644 --- a/include/errno.h +++ b/include/errno.h @@ -20,7 +20,7 @@ # define errno rtld_errno extern int rtld_errno attribute_hidden; -# elif IS_IN_LIB && !IS_IN (rtld) +# elif IS_IN_LIB && !IS_IN (rtld) && !defined LIBC_NONSHARED # undef errno # if IS_IN (libc) diff --git a/include/features.h b/include/features.h index 093de6f44c..0a8aa7c4f9 100644 --- a/include/features.h +++ b/include/features.h @@ -26,6 +26,7 @@ _ISOC11_SOURCE Extensions to ISO C99 from ISO C11. _ISOC23_SOURCE Extensions to ISO C99 from ISO C23. _ISOC2X_SOURCE Old name for _ISOC23_SOURCE. + _ISOC2Y_SOURCE Extensions to ISO C23 from ISO C2Y. __STDC_WANT_LIB_EXT2__ Extensions to ISO C99 from TR 27431-2:2010. __STDC_WANT_IEC_60559_BFP_EXT__ @@ -150,6 +151,7 @@ #undef __USE_FORTIFY_LEVEL #undef __KERNEL_STRICT_NAMES #undef __GLIBC_USE_ISOC23 +#undef __GLIBC_USE_ISOC2Y #undef __GLIBC_USE_DEPRECATED_GETS #undef __GLIBC_USE_DEPRECATED_SCANF #undef __GLIBC_USE_C23_STRTOL @@ -216,6 +218,8 @@ # define _ISOC11_SOURCE 1 # undef _ISOC23_SOURCE # define _ISOC23_SOURCE 1 +# undef _ISOC2Y_SOURCE +# define _ISOC2Y_SOURCE 1 # undef _POSIX_SOURCE # define _POSIX_SOURCE 1 # undef _POSIX_C_SOURCE @@ -239,15 +243,23 @@ #if (defined _DEFAULT_SOURCE \ || (!defined __STRICT_ANSI__ \ && !defined _ISOC99_SOURCE && !defined _ISOC11_SOURCE \ - && !defined _ISOC23_SOURCE \ + && !defined _ISOC23_SOURCE && !defined _ISOC2Y_SOURCE \ && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE \ && !defined _XOPEN_SOURCE)) # undef _DEFAULT_SOURCE # define _DEFAULT_SOURCE 1 #endif +/* This is to enable the ISO C2Y extension. */ +#if (defined _ISOC2Y_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ > 202311L)) +# define __GLIBC_USE_ISOC2Y 1 +#else +# define __GLIBC_USE_ISOC2Y 0 +#endif + /* This is to enable the ISO C23 extension. */ -#if (defined _ISOC23_SOURCE \ +#if (defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L)) # define __GLIBC_USE_ISOC23 1 #else @@ -255,21 +267,22 @@ #endif /* This is to enable the ISO C11 extension. */ -#if (defined _ISOC11_SOURCE || defined _ISOC23_SOURCE \ +#if (defined _ISOC11_SOURCE || defined _ISOC23_SOURCE \ + || defined _ISOC2Y_SOURCE \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L)) # define __USE_ISOC11 1 #endif /* This is to enable the ISO C99 extension. */ #if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \ - || defined _ISOC23_SOURCE \ + || defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) # define __USE_ISOC99 1 #endif /* This is to enable the ISO C90 Amendment 1:1995 extension. */ #if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \ - || defined _ISOC23_SOURCE \ + || defined _ISOC23_SOURCE || defined _ISOC2Y_SOURCE \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L)) # define __USE_ISOC95 1 #endif diff --git a/include/stdlib.h b/include/stdlib.h index 0cab3f5b56..57f4ab8545 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -20,6 +20,7 @@ # include <sys/stat.h> # include <rtld-malloc.h> +# include <internal-sigset.h> extern __typeof (strtol_l) __strtol_l; extern __typeof (strtoul_l) __strtoul_l; @@ -77,6 +78,12 @@ libc_hidden_proto (__isoc23_strtoull_l) # define strtoull_l __isoc23_strtoull_l #endif +extern void __abort_fork_reset_child (void) attribute_hidden; +extern void __abort_lock_rdlock (internal_sigset_t *set) attribute_hidden; +extern void __abort_lock_wrlock (internal_sigset_t *set) attribute_hidden; +extern void __abort_lock_unlock (const internal_sigset_t *set) + attribute_hidden; + libc_hidden_proto (exit) libc_hidden_proto (abort) libc_hidden_proto (getenv) diff --git a/inet/netinet/in.h b/inet/netinet/in.h index f684be5beb..29fdd9b85e 100644 --- a/inet/netinet/in.h +++ b/inet/netinet/in.h @@ -93,6 +93,8 @@ enum #define IPPROTO_ETHERNET IPPROTO_ETHERNET IPPROTO_RAW = 255, /* Raw IP packets. */ #define IPPROTO_RAW IPPROTO_RAW + IPPROTO_SMC = 256, /* Shared Memory Communications. */ +#define IPPROTO_SMC IPPROTO_SMC IPPROTO_MPTCP = 262, /* Multipath TCP connection. */ #define IPPROTO_MPTCP IPPROTO_MPTCP IPPROTO_MAX diff --git a/intl/dcigettext.c b/intl/dcigettext.c index a028518c2a..70ba4a547f 100644 --- a/intl/dcigettext.c +++ b/intl/dcigettext.c @@ -687,7 +687,7 @@ DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) - /* Ingore this entry. */ + /* Ignore this entry. */ continue; } diff --git a/io/Makefile b/io/Makefile index 47666a1deb..a8d575e9ce 100644 --- a/io/Makefile +++ b/io/Makefile @@ -189,6 +189,7 @@ tests := \ tst-copy_file_range \ tst-faccessat \ tst-fchmod-errors \ + tst-fchmod-fuse \ tst-fchmodat \ tst-fchownat \ tst-fcntl \ @@ -208,6 +209,7 @@ tests := \ tst-lchmod \ tst-linkat \ tst-lockf \ + tst-lstat-nofollow \ tst-lutimes \ tst-mkdirat \ tst-mkfifoat \ @@ -237,6 +239,7 @@ tests-time64 := \ tst-futimes-time64\ tst-futimesat-time64 \ tst-lchmod-time64 \ + tst-lstat-nofollow-time64 \ tst-lutimes-time64 \ tst-stat-time64 \ tst-utime-time64 \ @@ -292,7 +295,7 @@ CFLAGS-read.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-i CFLAGS-write.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes) CFLAGS-close.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-lseek64.c += $(config-cflags-wno-ignored-attributes) -CFLAGS-tst-read-zero.c += $(no-fortify-source),-D_FORTIFY_SOURCE=$(supported-fortify) +CFLAGS-tst-read-zero.c += $(no-fortify-source) -D_FORTIFY_SOURCE=$(supported-fortify) CFLAGS-test-stat.c += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE CFLAGS-test-lfs.c += -D_LARGEFILE64_SOURCE diff --git a/io/bits/statx-generic.h b/io/bits/statx-generic.h index 19c3565edc..da199ddaa1 100644 --- a/io/bits/statx-generic.h +++ b/io/bits/statx-generic.h @@ -44,6 +44,7 @@ # define STATX_DIOALIGN 0x2000U # define STATX_MNT_ID_UNIQUE 0x4000U # define STATX_SUBVOL 0x8000U +# define STATX_WRITE_ATOMIC 0x00010000U # define STATX__RESERVED 0x80000000U # define STATX_ATTR_COMPRESSED 0x0004 @@ -55,6 +56,7 @@ # define STATX_ATTR_MOUNT_ROOT 0x2000 # define STATX_ATTR_VERITY 0x100000 # define STATX_ATTR_DAX 0x200000 +# define STATX_ATTR_WRITE_ATOMIC 0x00400000 #endif /* !STATX_TYPE */ __BEGIN_DECLS diff --git a/io/tst-fchmod-fuse.c b/io/tst-fchmod-fuse.c new file mode 100644 index 0000000000..fbd3309963 --- /dev/null +++ b/io/tst-fchmod-fuse.c @@ -0,0 +1,114 @@ +/* FUSE-based test for fchmod. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/fuse.h> + +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xunistd.h> + +/* Set from do_test to indicate the expected incoming mode change request. */ +static _Atomic int expected_mode; + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + switch (inh->opcode) + { + case FUSE_LOOKUP: + { + char *name = support_fuse_cast (LOOKUP, inh); + TEST_COMPARE_STRING (name, "file"); + struct fuse_entry_out *out + = support_fuse_prepare_entry (f, 2); + out->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } + break; + case FUSE_OPEN: + { + TEST_COMPARE (inh->nodeid, 2); + struct fuse_open_in *p = support_fuse_cast (OPEN, inh); + TEST_COMPARE (p->flags & O_ACCMODE, O_RDWR); + struct fuse_open_out out = { 0, }; + support_fuse_reply (f, &out, sizeof (out)); + } + break; + case FUSE_SETATTR: + { + TEST_COMPARE (inh->nodeid, 2); + struct fuse_setattr_in *p = support_fuse_cast (SETATTR, inh); + TEST_COMPARE (p->valid , FATTR_MODE); + TEST_COMPARE (p->mode, S_IFREG | expected_mode); + struct fuse_attr_out *out = support_fuse_prepare_attr (f); + out->attr.mode = S_IFREG | p->mode; + support_fuse_reply_prepared (f); + } + break; + case FUSE_FLUSH: + support_fuse_reply_empty (f); + break; + default: + support_fuse_reply_error (f, EIO); + } + } +} + +/* Test all mode values with the specified extra bits. */ +static void +test_with_bits (int fd, unsigned int extra_bits) +{ + for (int do_mode = 0; do_mode <= 07777; ++do_mode) + { + expected_mode = do_mode; + TEST_COMPARE (fchmod (fd, extra_bits | do_mode), 0); + } +} + +static int +do_test (void) +{ + support_fuse_init (); + + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + char *path = xasprintf ("%s/file", support_fuse_mountpoint (f)); + int fd = xopen (path, O_RDWR, 0600); + free (path); + + test_with_bits (fd, 0); + /* POSIX requires that the extra bits are ignored. */ + test_with_bits (fd, S_IFREG); + test_with_bits (fd, S_IFDIR); + test_with_bits (fd, ~07777); + + xclose (fd); + support_fuse_unmount (f); + + return 0; +} + +#include <support/test-driver.c> diff --git a/io/tst-lstat-nofollow-time64.c b/io/tst-lstat-nofollow-time64.c new file mode 100644 index 0000000000..45feb3f130 --- /dev/null +++ b/io/tst-lstat-nofollow-time64.c @@ -0,0 +1 @@ +#include "tst-lstat-nofollow.c" diff --git a/io/tst-lstat-nofollow.c b/io/tst-lstat-nofollow.c new file mode 100644 index 0000000000..5bbb557c72 --- /dev/null +++ b/io/tst-lstat-nofollow.c @@ -0,0 +1,98 @@ +/* Test that lstat does not follow symbolic links. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <string.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/support.h> +#include <sys/stat.h> +#include <unistd.h> + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + switch (inh->opcode) + { + case FUSE_LOOKUP: + { + TEST_COMPARE (inh->nodeid, 1); + TEST_COMPARE_STRING (support_fuse_cast (LOOKUP, inh), "symlink"); + struct fuse_entry_out *out = support_fuse_prepare_entry (f, 2); + out->attr.mode = S_IFLNK | 0777; + out->attr.size = strlen ("target"); + support_fuse_reply_prepared (f); + } + break; + case FUSE_GETATTR: + { + TEST_COMPARE (inh->nodeid, 2); + struct fuse_attr_out *out = support_fuse_prepare_attr (f); + out->attr.mode = S_IFLNK | 0777; + out->attr.size = strlen ("target"); + support_fuse_reply_prepared (f); + } + break; + case FUSE_READLINK: + /* The lstat operation must not attempt to look at the + symbolic link target. */ + FAIL ("attempt to obtain target of symblic link for node %llu", + (unsigned long long int) inh->nodeid); + break; + default: + FAIL ("unexpected event %s", support_fuse_opcode (inh->opcode)); + } + } +} + +static int +do_test (void) +{ + support_fuse_init (); + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + char *symlink_path = xasprintf ("%s/symlink", support_fuse_mountpoint (f)); + + { + struct stat st = { 0, }; + TEST_COMPARE (lstat (symlink_path, &st), 0); + TEST_COMPARE (st.st_uid, getuid ()); + TEST_COMPARE (st.st_gid, getgid ()); + TEST_COMPARE (st.st_size, 6); + TEST_COMPARE (st.st_mode, S_IFLNK | 0777); + } + + { + struct stat64 st = { 0, }; + TEST_COMPARE (lstat64 (symlink_path, &st), 0); + TEST_COMPARE (st.st_uid, getuid ()); + TEST_COMPARE (st.st_gid, getgid ()); + TEST_COMPARE (st.st_size, 6); + TEST_COMPARE (st.st_mode, S_IFLNK | 0777); + } + + free (symlink_path); + support_fuse_unmount (f); + return 0; +} + +#include <support/test-driver.c> diff --git a/libio/Makefile b/libio/Makefile index 6a507b67ea..4370152964 100644 --- a/libio/Makefile +++ b/libio/Makefile @@ -86,6 +86,8 @@ tests = \ bug-wmemstream1 \ bug-wsetpos \ test-fmemopen \ + test-fputs-unbuffered-full \ + test-fputws-unbuffered-full \ tst-atime \ tst-bz22415 \ tst-bz24051 \ @@ -95,6 +97,8 @@ tests = \ tst-eof \ tst-ext \ tst-ext2 \ + tst-fclose-unopened \ + tst-fclose-unopened2 \ tst-fdopen-seek-failure \ tst-fgetc-after-eof \ tst-fgetwc \ @@ -117,6 +121,7 @@ tests = \ tst-mmap-offend \ tst-mmap-setvbuf \ tst-mmap2-eofsync \ + tst-popen-fork \ tst-popen1 \ tst-setvbuf1 \ tst-sprintf-chk-ub \ @@ -141,6 +146,8 @@ tests = \ tst_wscanf \ # tests +$(objpfx)tst-popen-fork: $(shared-thread-library) + tests-internal = tst-vtables tst-vtables-interposed ifeq (yes,$(build-shared)) @@ -250,6 +257,9 @@ LDFLAGS-tst-bz24228 = -Wl,--version-script=tst-bz24228.map tst_wprintf2-ARGS = "Some Text" +tst-fclose-unopened2-ENV = \ + MALLOC_TRACE=$(objpfx)tst-fclose-unopened2.mtrace \ + LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so test-fmemopen-ENV = MALLOC_TRACE=$(objpfx)test-fmemopen.mtrace \ LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so tst-fdopen-seek-failure-ENV = \ @@ -274,6 +284,8 @@ generated += \ tst-bz22415.mtrace \ tst-bz24228.check \ tst-bz24228.mtrace \ + tst-fclose-unopened2.check \ + tst-fclose-unopened2.mtrace \ tst-fdopen-seek-failure.check \ tst-fdopen-seek-failure.mtrace \ tst-fopenloc.check \ @@ -286,11 +298,18 @@ endif ifeq ($(build-shared),yes) aux += oldfileops oldstdfiles tests += \ + tst-fopen-compat \ tst-stderr-compat \ # tests tests-2.0 += \ + tst-fopen-compat \ tst-stderr-compat \ # tests-2.0 + +tst-fopen-compat-ARGS = tst-fopen-compat.c +# Disable PIE to trigger copy relocation. +CFLAGS-tst-fopen-compat.c += -fno-pie +tst-fopen-compat-no-pie = yes endif shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops \ @@ -312,6 +331,7 @@ tests-special += \ $(objpfx)test-fmemopen-mem.out \ $(objpfx)tst-bz22415-mem.out \ $(objpfx)tst-bz24228-mem.out \ + $(objpfx)tst-fclose-unopened2-mem.out \ $(objpfx)tst-fdopen-seek-failure-mem.out \ $(objpfx)tst-fopenloc-mem.out \ # tests-special @@ -399,6 +419,11 @@ $(objpfx)test-fmemopen-mem.out: $(objpfx)test-fmemopen.out $(common-objpfx)malloc/mtrace $(objpfx)test-fmemopen.mtrace > $@; \ $(evaluate-test) +$(objpfx)tst-fclose-unopened2-mem.out: $(objpfx)tst-fclose-unopened2.out + $(common-objpfx)malloc/mtrace \ + $(objpfx)tst-fclose-unopened2.mtrace > $@; \ + $(evaluate-test) + $(objpfx)tst-fdopen-seek-failure-mem.out: $(objpfx)tst-fdopen-seek-failure.out $(common-objpfx)malloc/mtrace \ $(objpfx)tst-fdopen-seek-failure.mtrace > $@; \ diff --git a/libio/freopen.c b/libio/freopen.c index c7e36db775..00f26ad578 100644 --- a/libio/freopen.c +++ b/libio/freopen.c @@ -63,6 +63,10 @@ freopen (const char *filename, const char *mode, FILE *fp) up here. */ _IO_old_file_close_it (fp); _IO_JUMPS_FUNC_UPDATE (fp, &_IO_old_file_jumps); + fp->_flags2 &= ~(_IO_FLAGS2_MMAP + | _IO_FLAGS2_NOTCANCEL + | _IO_FLAGS2_CLOEXEC); + fp->_mode = 0; result = _IO_old_file_fopen (fp, gfilename, mode); } else @@ -72,6 +76,10 @@ freopen (const char *filename, const char *mode, FILE *fp) _IO_JUMPS_FILE_plus (fp) = &_IO_file_jumps; if (_IO_vtable_offset (fp) == 0 && fp->_wide_data != NULL) fp->_wide_data->_wide_vtable = &_IO_wfile_jumps; + fp->_flags2 &= ~(_IO_FLAGS2_MMAP + | _IO_FLAGS2_NOTCANCEL + | _IO_FLAGS2_CLOEXEC); + fp->_mode = 0; result = _IO_file_fopen (fp, gfilename, mode, 1); if (result != NULL) result = __fopen_maybe_mmap (result); @@ -79,9 +87,6 @@ freopen (const char *filename, const char *mode, FILE *fp) fp->_flags2 &= ~_IO_FLAGS2_NOCLOSE; if (result != NULL) { - /* unbound stream orientation */ - result->_mode = 0; - if (fd != -1 && _IO_fileno (result) != fd) { /* At this point we have both file descriptors already allocated, @@ -108,5 +113,7 @@ freopen (const char *filename, const char *mode, FILE *fp) end: _IO_release_lock (fp); + if (result == NULL && (fp->_flags & _IO_IS_FILEBUF) != 0) + _IO_deallocate_file (fp); return result; } diff --git a/libio/freopen64.c b/libio/freopen64.c index 9a6d5ed801..77c0dd3fdf 100644 --- a/libio/freopen64.c +++ b/libio/freopen64.c @@ -56,15 +56,16 @@ freopen64 (const char *filename, const char *mode, FILE *fp) _IO_JUMPS_FILE_plus (fp) = &_IO_file_jumps; if (_IO_vtable_offset (fp) == 0 && fp->_wide_data != NULL) fp->_wide_data->_wide_vtable = &_IO_wfile_jumps; + fp->_flags2 &= ~(_IO_FLAGS2_MMAP + | _IO_FLAGS2_NOTCANCEL + | _IO_FLAGS2_CLOEXEC); + fp->_mode = 0; result = _IO_file_fopen (fp, gfilename, mode, 0); fp->_flags2 &= ~_IO_FLAGS2_NOCLOSE; if (result != NULL) result = __fopen_maybe_mmap (result); if (result != NULL) { - /* unbound stream orientation */ - result->_mode = 0; - if (fd != -1 && _IO_fileno (result) != fd) { /* At this point we have both file descriptors already allocated, @@ -91,5 +92,7 @@ freopen64 (const char *filename, const char *mode, FILE *fp) end: _IO_release_lock (fp); + if (result == NULL && (fp->_flags & _IO_IS_FILEBUF) != 0) + _IO_deallocate_file (fp); return result; } diff --git a/libio/genops.c b/libio/genops.c index 35d8b30710..6f20d49669 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -819,7 +819,7 @@ _IO_unbuffer_all (void) /* Free up the backup area if it was ever allocated. */ if (_IO_have_backup (fp)) _IO_free_backup_area (fp); - if (fp->_mode > 0 && _IO_have_wbackup (fp)) + if (!legacy && fp->_mode > 0 && _IO_have_wbackup (fp)) _IO_free_wbackup_area (fp); if (! (fp->_flags & _IO_UNBUFFERED) diff --git a/libio/iopopen.c b/libio/iopopen.c index d01cb0648e..352513a291 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -57,6 +57,26 @@ unlock (void *not_used) } #endif +/* These lock/unlock/resetlock functions are used during fork. */ + +void +_IO_proc_file_chain_lock (void) +{ + _IO_lock_lock (proc_file_chain_lock); +} + +void +_IO_proc_file_chain_unlock (void) +{ + _IO_lock_unlock (proc_file_chain_lock); +} + +void +_IO_proc_file_chain_resetlock (void) +{ + _IO_lock_init (proc_file_chain_lock); +} + /* POSIX states popen shall ensure that any streams from previous popen() calls that remain open in the parent process should be closed in the new child process. diff --git a/libio/libioP.h b/libio/libioP.h index 616253fcd0..a83a411fdf 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -429,6 +429,12 @@ libc_hidden_proto (_IO_list_resetlock) extern void _IO_enable_locks (void) __THROW; libc_hidden_proto (_IO_enable_locks) +/* Functions for operating popen's proc_file_chain_lock during fork. */ + +extern void _IO_proc_file_chain_lock (void) __THROW attribute_hidden; +extern void _IO_proc_file_chain_unlock (void) __THROW attribute_hidden; +extern void _IO_proc_file_chain_resetlock (void) __THROW attribute_hidden; + /* Default jumptable functions. */ extern int _IO_default_underflow (FILE *) __THROW; diff --git a/libio/oldfileops.c b/libio/oldfileops.c index 97148dba9b..8f775c9094 100644 --- a/libio/oldfileops.c +++ b/libio/oldfileops.c @@ -103,9 +103,11 @@ _IO_old_file_init_internal (struct _IO_FILE_plus *fp) fp->file._old_offset = _IO_pos_BAD; fp->file._flags |= CLOSED_FILEBUF_FLAGS; - _IO_link_in (fp); + /* NB: _vtable_offset must be set before calling _IO_link_in since + _IO_vtable_offset is used to detect the old binaries. */ fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE) - (int) sizeof (struct _IO_FILE_complete)); + _IO_link_in (fp); fp->file._fileno = -1; if (&_IO_stdin_used != NULL || !_IO_legacy_file ((FILE *) fp)) diff --git a/libio/test-fputs-unbuffered-full.c b/libio/test-fputs-unbuffered-full.c new file mode 100644 index 0000000000..145b4b6a57 --- /dev/null +++ b/libio/test-fputs-unbuffered-full.c @@ -0,0 +1,78 @@ +/* Regression test for 20632. + Copyright (C) 2024 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <support/check.h> +#include <support/xunistd.h> +#include <unistd.h> + +#ifndef WIDE +# define TEST_NAME "fputs-unbuffered-full" +# define CHAR char +# define FPUTS fputs +# define TEXT "0123456789ABCDEF" +#else +# include <wchar.h> +# define TEST_NAME "fputws-unbuffered-full" +# define CHAR wchar_t +# define FPUTS fputws +# define TEXT L"0123456789ABCDEF" +#endif /* WIDE */ + + +static int +do_test (void) +{ + /* Open an unbuffered stream to /dev/full. */ + FILE *fp = fopen ("/dev/full", "w"); + TEST_VERIFY_EXIT (fp != NULL); + int ret = setvbuf (fp, NULL, _IONBF, 0); + TEST_VERIFY_EXIT (ret == 0); + + /* Output a long string. */ + const int sz = 4096; + CHAR *buff = calloc (sz+1, sizeof *buff); + for (int i=0; i < sz; i++) + buff[i] = (CHAR) 'x'; + buff[sz] = (CHAR) '\0'; + errno = 0; + ret = FPUTS (buff, fp); + TEST_VERIFY (ret == EOF); + TEST_VERIFY (errno == ENOSPC); + free (buff); + + /* Output shorter strings. */ + for (int i=0; i < 1024; i++) + { + errno = 0; + ret = FPUTS (TEXT, fp); + TEST_VERIFY (ret == EOF); + TEST_VERIFY (errno == ENOSPC); + + /* Call malloc, triggering a crash if its + function pointers have been overwritten. */ + void *volatile ptr = malloc (1); + free (ptr); + } + return 0; +} + +#include <support/test-driver.c> diff --git a/libio/test-fputws-unbuffered-full.c b/libio/test-fputws-unbuffered-full.c new file mode 100644 index 0000000000..f3d79326e4 --- /dev/null +++ b/libio/test-fputws-unbuffered-full.c @@ -0,0 +1,21 @@ +/* Regression test for 20632. + Copyright (C) 2024 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define WIDE 1 +#include "./test-fputs-unbuffered-full.c" diff --git a/libio/tst-fclose-unopened.c b/libio/tst-fclose-unopened.c new file mode 100644 index 0000000000..4fed2ffdfe --- /dev/null +++ b/libio/tst-fclose-unopened.c @@ -0,0 +1,42 @@ +/* Test using fclose on an unopened file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <support/check.h> + +/* Verify that fclose on an unopened file returns EOF. This test uses + a file with an unallocated buffer. + + This is not part of the fclose external contract but there are + dependencies on this behaviour. */ + +static int +do_test (void) +{ + TEST_COMPARE (fclose (stdin), 0); + + /* Attempt to close the unopened file and verify that EOF is returned. + Calling fclose on a file twice normally causes a use-after-free bug, + however the standard streams are an exception since they are not + deallocated by fclose. */ + TEST_COMPARE (fclose (stdin), EOF); + + return 0; +} + +#include <support/test-driver.c> diff --git a/libio/tst-fclose-unopened2.c b/libio/tst-fclose-unopened2.c new file mode 100644 index 0000000000..1e99d9dc3d --- /dev/null +++ b/libio/tst-fclose-unopened2.c @@ -0,0 +1,51 @@ +/* Test using fclose on an unopened file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <mcheck.h> +#include <stdio.h> +#include <support/check.h> + +/* Verify that fclose on an unopened file returns EOF. This test uses + a file with an allocated buffer. + + This is not part of the fclose external contract but there are + dependencies on this behaviour. */ + +static int +do_test (void) +{ + mtrace (); + + /* Input file tst-fclose-unopened2.input has 6 bytes plus newline. */ + char buf[6]; + + /* Read from the file to ensure its internal buffer is allocated. */ + TEST_COMPARE (fread (buf, 1, sizeof (buf), stdin), sizeof (buf)); + + TEST_COMPARE (fclose (stdin), 0); + + /* Attempt to close the unopened file and verify that EOF is returned. + Calling fclose on a file twice normally causes a use-after-free bug, + however the standard streams are an exception since they are not + deallocated by fclose. */ + TEST_COMPARE (fclose (stdin), EOF); + + return 0; +} + +#include <support/test-driver.c> diff --git a/libio/tst-fclose-unopened2.input b/libio/tst-fclose-unopened2.input new file mode 100644 index 0000000000..399f9ba41a --- /dev/null +++ b/libio/tst-fclose-unopened2.input @@ -0,0 +1 @@ +fclose diff --git a/libio/tst-fopen-compat.c b/libio/tst-fopen-compat.c new file mode 100644 index 0000000000..f241b61043 --- /dev/null +++ b/libio/tst-fopen-compat.c @@ -0,0 +1,85 @@ +/* Verify that fopen works with copy relocation on _IO_stderr_ in binaries + linked with glibc 2.0. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <shlib-compat.h> + +#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +# define _LIBC +# define _IO_USE_OLD_IO_FILE +# include <stdio.h> +# include <string.h> +# include <unistd.h> +# include <limits.h> +# include <sys/stat.h> +# include <support/check.h> + +struct _IO_jump_t; + +struct _IO_FILE_plus +{ + FILE file; + const struct _IO_jump_t *vtable; +}; + +extern struct _IO_FILE_plus _IO_stderr_; +compat_symbol_reference (libc, _IO_stderr_, _IO_stderr_, GLIBC_2_0); +compat_symbol_reference (libc, fopen, fopen, GLIBC_2_0); +compat_symbol_reference (libc, fclose, fclose, GLIBC_2_0); + +static int +do_test (int argc, char *argv[]) +{ + static char filename[PATH_MAX + 1]; + struct stat st; + char *name = NULL; + int i; + + /* Try to trigger copy relocation. */ + TEST_VERIFY_EXIT (_IO_stderr_.file._fileno == STDERR_FILENO); + + for (i = 1; i < argc; i++) + { + name = argv[i]; + if (stat (name, &st) == 0) + { + TEST_VERIFY_EXIT (strlen (name) <= PATH_MAX); + break; + } + } + TEST_VERIFY_EXIT (name != NULL); + + strcpy (filename, name); + FILE *fp = fopen (filename, "r"); + TEST_VERIFY_EXIT (strcmp (filename, name) == 0); + TEST_VERIFY_EXIT (fp != NULL); + TEST_VERIFY_EXIT (fclose (fp) == 0); + return 0; +} +#else +# include <support/test-driver.h> + +static int +do_test (int argc, char *argv[]) +{ + return EXIT_UNSUPPORTED; +} +#endif + +#define TEST_FUNCTION_ARGV do_test +#include <support/test-driver.c> diff --git a/libio/tst-popen-fork.c b/libio/tst-popen-fork.c new file mode 100644 index 0000000000..1df30fc6c0 --- /dev/null +++ b/libio/tst-popen-fork.c @@ -0,0 +1,80 @@ +/* Test concurrent popen and fork. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdatomic.h> +#include <pthread.h> +#include <unistd.h> +#include <sys/wait.h> + +#include <support/check.h> +#include <support/xthread.h> +#include <support/xunistd.h> + +static void +popen_and_pclose (void) +{ + FILE *f = popen ("true", "r"); + TEST_VERIFY_EXIT (f != NULL); + pclose (f); + return; +} + +static atomic_bool done = ATOMIC_VAR_INIT (0); + +static void * +popen_and_pclose_forever (__attribute__ ((unused)) + void *arg) +{ + while (!atomic_load_explicit (&done, memory_order_acquire)) + popen_and_pclose (); + return NULL; +} + +static int +do_test (void) +{ + + /* Repeatedly call popen in a loop during the entire test. */ + pthread_t t = xpthread_create (NULL, popen_and_pclose_forever, NULL); + + /* Repeatedly fork off and reap child processes one-by-one. + Each child calls popen once, then exits, leading to the possibility + that a child forks *during* our own popen call, thus inheriting any + intermediate popen state, possibly including lock state(s). */ + for (int i = 0; i < 100; i++) + { + int cpid = xfork (); + + if (cpid == 0) + { + popen_and_pclose (); + _exit (0); + } + else + xwaitpid (cpid, NULL, 0); + } + + /* Stop calling popen. */ + atomic_store_explicit (&done, 1, memory_order_release); + xpthread_join (t); + + return 0; +} + +#include <support/test-driver.c> diff --git a/libio/wfileops.c b/libio/wfileops.c index 6de5968358..fdbe8692e8 100644 --- a/libio/wfileops.c +++ b/libio/wfileops.c @@ -420,14 +420,14 @@ _IO_wfile_overflow (FILE *f, wint_t wch) { _IO_wdoallocbuf (f); _IO_free_wbackup_area (f); - _IO_wsetg (f, f->_wide_data->_IO_buf_base, - f->_wide_data->_IO_buf_base, f->_wide_data->_IO_buf_base); if (f->_IO_write_base == NULL) { _IO_doallocbuf (f); _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base); } + _IO_wsetg (f, f->_wide_data->_IO_buf_base, + f->_wide_data->_IO_buf_base, f->_wide_data->_IO_buf_base); } else { @@ -958,7 +958,7 @@ _IO_wfile_xsputn (FILE *f, const void *data, size_t n) const wchar_t *s = (const wchar_t *) data; size_t to_do = n; int must_flush = 0; - size_t count; + size_t count = 0; if (n <= 0) return 0; @@ -967,7 +967,6 @@ _IO_wfile_xsputn (FILE *f, const void *data, size_t n) (or the filebuf is unbuffered), use sys_write directly. */ /* First figure out how much space is available in the buffer. */ - count = f->_wide_data->_IO_write_end - f->_wide_data->_IO_write_ptr; if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING)) { count = f->_wide_data->_IO_buf_end - f->_wide_data->_IO_write_ptr; @@ -985,6 +984,10 @@ _IO_wfile_xsputn (FILE *f, const void *data, size_t n) } } } + else if (f->_wide_data->_IO_write_end > f->_wide_data->_IO_write_ptr) + count = f->_wide_data->_IO_write_end + - f->_wide_data->_IO_write_ptr; /* Space available. */ + /* Then fill the buffer. */ if (count > 0) { diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 5048adbd9f..2cf9a4bc53 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -2678,7 +2678,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, NULL, verbose); diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index eb6e7e145c..2270960bd2 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -2164,7 +2164,7 @@ ctype_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, NULL, NULL, verbose); diff --git a/locale/programs/ld-measurement.c b/locale/programs/ld-measurement.c index c4061264ea..ba7f0c0bff 100644 --- a/locale/programs/ld-measurement.c +++ b/locale/programs/ld-measurement.c @@ -168,7 +168,7 @@ measurement_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, NULL, verbose); diff --git a/locale/programs/ld-numeric.c b/locale/programs/ld-numeric.c index 11fdac06fa..e20e322923 100644 --- a/locale/programs/ld-numeric.c +++ b/locale/programs/ld-numeric.c @@ -188,7 +188,7 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, NULL, verbose); diff --git a/locale/programs/ld-paper.c b/locale/programs/ld-paper.c index 95b3d1074a..a755140707 100644 --- a/locale/programs/ld-paper.c +++ b/locale/programs/ld-paper.c @@ -167,7 +167,7 @@ paper_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, NULL, verbose); diff --git a/locale/programs/ld-telephone.c b/locale/programs/ld-telephone.c index b45573974a..79aba6ef15 100644 --- a/locale/programs/ld-telephone.c +++ b/locale/programs/ld-telephone.c @@ -223,7 +223,7 @@ telephone_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, NULL, verbose); diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c index 1abff3cf53..349b31fff5 100644 --- a/locale/programs/ld-time.c +++ b/locale/programs/ld-time.c @@ -710,7 +710,7 @@ time_read (struct linereader *ldfile, struct localedef_t *result, if (nowtok == tok_eof) break; - /* Ingore empty lines. */ + /* Ignore empty lines. */ if (nowtok == tok_eol) { now = lr_token (ldfile, charmap, result, repertoire, verbose); diff --git a/localedata/charmaps/UTF-8 b/localedata/charmaps/UTF-8 index bc694ec4c8..cdc33eb997 100644 --- a/localedata/charmaps/UTF-8 +++ b/localedata/charmaps/UTF-8 @@ -2132,6 +2132,7 @@ CHARMAP <U088E> /xe0/xa2/x8e ARABIC VERTICAL TAIL <U0890> /xe0/xa2/x90 ARABIC POUND MARK ABOVE <U0891> /xe0/xa2/x91 ARABIC PIASTRE MARK ABOVE +<U0897> /xe0/xa2/x97 ARABIC PEPET <U0898> /xe0/xa2/x98 ARABIC SMALL HIGH WORD AL-JUZ <U0899> /xe0/xa2/x99 ARABIC SMALL LOW WORD ISHMAAM <U089A> /xe0/xa2/x9a ARABIC SMALL LOW WORD IMAALA @@ -6222,6 +6223,8 @@ CHARMAP <U1B4A> /xe1/xad/x8a BALINESE LETTER ZAL SASAK <U1B4B> /xe1/xad/x8b BALINESE LETTER ASYURA SASAK <U1B4C> /xe1/xad/x8c BALINESE LETTER ARCHAIC JNYA +<U1B4E> /xe1/xad/x8e BALINESE INVERTED CARIK SIKI +<U1B4F> /xe1/xad/x8f BALINESE INVERTED CARIK PAREREN <U1B50> /xe1/xad/x90 BALINESE DIGIT ZERO <U1B51> /xe1/xad/x91 BALINESE DIGIT ONE <U1B52> /xe1/xad/x92 BALINESE DIGIT TWO @@ -6269,6 +6272,7 @@ CHARMAP <U1B7C> /xe1/xad/xbc BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING <U1B7D> /xe1/xad/xbd BALINESE PANTI LANTANG <U1B7E> /xe1/xad/xbe BALINESE PAMADA LANTANG +<U1B7F> /xe1/xad/xbf BALINESE PANTI BAWAK <U1B80> /xe1/xae/x80 SUNDANESE SIGN PANYECEK <U1B81> /xe1/xae/x81 SUNDANESE SIGN PANGLAYAR <U1B82> /xe1/xae/x82 SUNDANESE SIGN PANGWISAD @@ -6520,6 +6524,8 @@ CHARMAP <U1C86> /xe1/xb2/x86 CYRILLIC SMALL LETTER TALL HARD SIGN <U1C87> /xe1/xb2/x87 CYRILLIC SMALL LETTER TALL YAT <U1C88> /xe1/xb2/x88 CYRILLIC SMALL LETTER UNBLENDED UK +<U1C89> /xe1/xb2/x89 CYRILLIC CAPITAL LETTER TJE +<U1C8A> /xe1/xb2/x8a CYRILLIC SMALL LETTER TJE <U1C90> /xe1/xb2/x90 GEORGIAN MTAVRULI CAPITAL LETTER AN <U1C91> /xe1/xb2/x91 GEORGIAN MTAVRULI CAPITAL LETTER BAN <U1C92> /xe1/xb2/x92 GEORGIAN MTAVRULI CAPITAL LETTER GAN @@ -8384,6 +8390,9 @@ CHARMAP <U2424> /xe2/x90/xa4 SYMBOL FOR NEWLINE <U2425> /xe2/x90/xa5 SYMBOL FOR DELETE FORM TWO <U2426> /xe2/x90/xa6 SYMBOL FOR SUBSTITUTE FORM TWO +<U2427> /xe2/x90/xa7 SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM +<U2428> /xe2/x90/xa8 SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM +<U2429> /xe2/x90/xa9 SYMBOL FOR DELETE MEDIUM SHADE FORM <U2440> /xe2/x91/x80 OCR HOOK <U2441> /xe2/x91/x81 OCR CHAIR <U2442> /xe2/x91/x82 OCR FORK @@ -11718,6 +11727,8 @@ CHARMAP <U31E1> /xe3/x87/xa1 CJK STROKE HZZZG <U31E2> /xe3/x87/xa2 CJK STROKE PG <U31E3> /xe3/x87/xa3 CJK STROKE Q +<U31E4> /xe3/x87/xa4 CJK STROKE HXG +<U31E5> /xe3/x87/xa5 CJK STROKE SZP <U31EF> /xe3/x87/xaf IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION <U31F0> /xe3/x87/xb0 KATAKANA LETTER SMALL KU <U31F1> /xe3/x87/xb1 KATAKANA LETTER SMALL SI @@ -14696,6 +14707,9 @@ CHARMAP <UA7C8> /xea/x9f/x88 LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY <UA7C9> /xea/x9f/x89 LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY <UA7CA> /xea/x9f/x8a LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +<UA7CB> /xea/x9f/x8b LATIN CAPITAL LETTER RAMS HORN +<UA7CC> /xea/x9f/x8c LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +<UA7CD> /xea/x9f/x8d LATIN SMALL LETTER S WITH DIAGONAL STROKE <UA7D0> /xea/x9f/x90 LATIN CAPITAL LETTER CLOSED INSULAR G <UA7D1> /xea/x9f/x91 LATIN SMALL LETTER CLOSED INSULAR G <UA7D3> /xea/x9f/x93 LATIN SMALL LETTER DOUBLE THORN @@ -14704,6 +14718,9 @@ CHARMAP <UA7D7> /xea/x9f/x97 LATIN SMALL LETTER MIDDLE SCOTS S <UA7D8> /xea/x9f/x98 LATIN CAPITAL LETTER SIGMOID S <UA7D9> /xea/x9f/x99 LATIN SMALL LETTER SIGMOID S +<UA7DA> /xea/x9f/x9a LATIN CAPITAL LETTER LAMBDA +<UA7DB> /xea/x9f/x9b LATIN SMALL LETTER LAMBDA +<UA7DC> /xea/x9f/x9c LATIN CAPITAL LETTER LAMBDA WITH STROKE <UA7F2> /xea/x9f/xb2 MODIFIER LETTER CAPITAL C <UA7F3> /xea/x9f/xb3 MODIFIER LETTER CAPITAL F <UA7F4> /xea/x9f/xb4 MODIFIER LETTER CAPITAL Q @@ -29705,6 +29722,58 @@ CHARMAP <U000105B9> /xf0/x90/x96/xb9 VITHKUQI SMALL LETTER XE <U000105BB> /xf0/x90/x96/xbb VITHKUQI SMALL LETTER Y <U000105BC> /xf0/x90/x96/xbc VITHKUQI SMALL LETTER ZE +<U000105C0> /xf0/x90/x97/x80 TODHRI LETTER A +<U000105C1> /xf0/x90/x97/x81 TODHRI LETTER AS +<U000105C2> /xf0/x90/x97/x82 TODHRI LETTER BA +<U000105C3> /xf0/x90/x97/x83 TODHRI LETTER MBA +<U000105C4> /xf0/x90/x97/x84 TODHRI LETTER CA +<U000105C5> /xf0/x90/x97/x85 TODHRI LETTER CHA +<U000105C6> /xf0/x90/x97/x86 TODHRI LETTER DA +<U000105C7> /xf0/x90/x97/x87 TODHRI LETTER NDA +<U000105C8> /xf0/x90/x97/x88 TODHRI LETTER DHA +<U000105C9> /xf0/x90/x97/x89 TODHRI LETTER EI +<U000105CA> /xf0/x90/x97/x8a TODHRI LETTER E +<U000105CB> /xf0/x90/x97/x8b TODHRI LETTER FA +<U000105CC> /xf0/x90/x97/x8c TODHRI LETTER GA +<U000105CD> /xf0/x90/x97/x8d TODHRI LETTER NGA +<U000105CE> /xf0/x90/x97/x8e TODHRI LETTER GJA +<U000105CF> /xf0/x90/x97/x8f TODHRI LETTER NGJA +<U000105D0> /xf0/x90/x97/x90 TODHRI LETTER HA +<U000105D1> /xf0/x90/x97/x91 TODHRI LETTER HJA +<U000105D2> /xf0/x90/x97/x92 TODHRI LETTER I +<U000105D3> /xf0/x90/x97/x93 TODHRI LETTER JA +<U000105D4> /xf0/x90/x97/x94 TODHRI LETTER KA +<U000105D5> /xf0/x90/x97/x95 TODHRI LETTER LA +<U000105D6> /xf0/x90/x97/x96 TODHRI LETTER LLA +<U000105D7> /xf0/x90/x97/x97 TODHRI LETTER MA +<U000105D8> /xf0/x90/x97/x98 TODHRI LETTER NA +<U000105D9> /xf0/x90/x97/x99 TODHRI LETTER NJAN +<U000105DA> /xf0/x90/x97/x9a TODHRI LETTER O +<U000105DB> /xf0/x90/x97/x9b TODHRI LETTER PA +<U000105DC> /xf0/x90/x97/x9c TODHRI LETTER QA +<U000105DD> /xf0/x90/x97/x9d TODHRI LETTER RA +<U000105DE> /xf0/x90/x97/x9e TODHRI LETTER RRA +<U000105DF> /xf0/x90/x97/x9f TODHRI LETTER SA +<U000105E0> /xf0/x90/x97/xa0 TODHRI LETTER SHA +<U000105E1> /xf0/x90/x97/xa1 TODHRI LETTER SHTA +<U000105E2> /xf0/x90/x97/xa2 TODHRI LETTER TA +<U000105E3> /xf0/x90/x97/xa3 TODHRI LETTER THA +<U000105E4> /xf0/x90/x97/xa4 TODHRI LETTER U +<U000105E5> /xf0/x90/x97/xa5 TODHRI LETTER VA +<U000105E6> /xf0/x90/x97/xa6 TODHRI LETTER XA +<U000105E7> /xf0/x90/x97/xa7 TODHRI LETTER NXA +<U000105E8> /xf0/x90/x97/xa8 TODHRI LETTER XHA +<U000105E9> /xf0/x90/x97/xa9 TODHRI LETTER NXHA +<U000105EA> /xf0/x90/x97/xaa TODHRI LETTER Y +<U000105EB> /xf0/x90/x97/xab TODHRI LETTER JY +<U000105EC> /xf0/x90/x97/xac TODHRI LETTER ZA +<U000105ED> /xf0/x90/x97/xad TODHRI LETTER ZHA +<U000105EE> /xf0/x90/x97/xae TODHRI LETTER GHA +<U000105EF> /xf0/x90/x97/xaf TODHRI LETTER STA +<U000105F0> /xf0/x90/x97/xb0 TODHRI LETTER SKAN +<U000105F1> /xf0/x90/x97/xb1 TODHRI LETTER KHA +<U000105F2> /xf0/x90/x97/xb2 TODHRI LETTER PSA +<U000105F3> /xf0/x90/x97/xb3 TODHRI LETTER OO <U00010600> /xf0/x90/x98/x80 LINEAR A SIGN AB001 <U00010601> /xf0/x90/x98/x81 LINEAR A SIGN AB002 <U00010602> /xf0/x90/x98/x82 LINEAR A SIGN AB003 @@ -31026,6 +31095,75 @@ CHARMAP <U00010D37> /xf0/x90/xb4/xb7 HANIFI ROHINGYA DIGIT SEVEN <U00010D38> /xf0/x90/xb4/xb8 HANIFI ROHINGYA DIGIT EIGHT <U00010D39> /xf0/x90/xb4/xb9 HANIFI ROHINGYA DIGIT NINE +<U00010D40> /xf0/x90/xb5/x80 GARAY DIGIT ZERO +<U00010D41> /xf0/x90/xb5/x81 GARAY DIGIT ONE +<U00010D42> /xf0/x90/xb5/x82 GARAY DIGIT TWO +<U00010D43> /xf0/x90/xb5/x83 GARAY DIGIT THREE +<U00010D44> /xf0/x90/xb5/x84 GARAY DIGIT FOUR +<U00010D45> /xf0/x90/xb5/x85 GARAY DIGIT FIVE +<U00010D46> /xf0/x90/xb5/x86 GARAY DIGIT SIX +<U00010D47> /xf0/x90/xb5/x87 GARAY DIGIT SEVEN +<U00010D48> /xf0/x90/xb5/x88 GARAY DIGIT EIGHT +<U00010D49> /xf0/x90/xb5/x89 GARAY DIGIT NINE +<U00010D4A> /xf0/x90/xb5/x8a GARAY VOWEL SIGN A +<U00010D4B> /xf0/x90/xb5/x8b GARAY VOWEL SIGN I +<U00010D4C> /xf0/x90/xb5/x8c GARAY VOWEL SIGN O +<U00010D4D> /xf0/x90/xb5/x8d GARAY VOWEL SIGN EE +<U00010D4E> /xf0/x90/xb5/x8e GARAY VOWEL LENGTH MARK +<U00010D4F> /xf0/x90/xb5/x8f GARAY SUKUN +<U00010D50> /xf0/x90/xb5/x90 GARAY CAPITAL LETTER A +<U00010D51> /xf0/x90/xb5/x91 GARAY CAPITAL LETTER CA +<U00010D52> /xf0/x90/xb5/x92 GARAY CAPITAL LETTER MA +<U00010D53> /xf0/x90/xb5/x93 GARAY CAPITAL LETTER KA +<U00010D54> /xf0/x90/xb5/x94 GARAY CAPITAL LETTER BA +<U00010D55> /xf0/x90/xb5/x95 GARAY CAPITAL LETTER JA +<U00010D56> /xf0/x90/xb5/x96 GARAY CAPITAL LETTER SA +<U00010D57> /xf0/x90/xb5/x97 GARAY CAPITAL LETTER WA +<U00010D58> /xf0/x90/xb5/x98 GARAY CAPITAL LETTER LA +<U00010D59> /xf0/x90/xb5/x99 GARAY CAPITAL LETTER GA +<U00010D5A> /xf0/x90/xb5/x9a GARAY CAPITAL LETTER DA +<U00010D5B> /xf0/x90/xb5/x9b GARAY CAPITAL LETTER XA +<U00010D5C> /xf0/x90/xb5/x9c GARAY CAPITAL LETTER YA +<U00010D5D> /xf0/x90/xb5/x9d GARAY CAPITAL LETTER TA +<U00010D5E> /xf0/x90/xb5/x9e GARAY CAPITAL LETTER RA +<U00010D5F> /xf0/x90/xb5/x9f GARAY CAPITAL LETTER NYA +<U00010D60> /xf0/x90/xb5/xa0 GARAY CAPITAL LETTER FA +<U00010D61> /xf0/x90/xb5/xa1 GARAY CAPITAL LETTER NA +<U00010D62> /xf0/x90/xb5/xa2 GARAY CAPITAL LETTER PA +<U00010D63> /xf0/x90/xb5/xa3 GARAY CAPITAL LETTER HA +<U00010D64> /xf0/x90/xb5/xa4 GARAY CAPITAL LETTER OLD KA +<U00010D65> /xf0/x90/xb5/xa5 GARAY CAPITAL LETTER OLD NA +<U00010D69> /xf0/x90/xb5/xa9 GARAY VOWEL SIGN E +<U00010D6A> /xf0/x90/xb5/xaa GARAY CONSONANT GEMINATION MARK +<U00010D6B> /xf0/x90/xb5/xab GARAY COMBINING DOT ABOVE +<U00010D6C> /xf0/x90/xb5/xac GARAY COMBINING DOUBLE DOT ABOVE +<U00010D6D> /xf0/x90/xb5/xad GARAY CONSONANT NASALIZATION MARK +<U00010D6E> /xf0/x90/xb5/xae GARAY HYPHEN +<U00010D6F> /xf0/x90/xb5/xaf GARAY REDUPLICATION MARK +<U00010D70> /xf0/x90/xb5/xb0 GARAY SMALL LETTER A +<U00010D71> /xf0/x90/xb5/xb1 GARAY SMALL LETTER CA +<U00010D72> /xf0/x90/xb5/xb2 GARAY SMALL LETTER MA +<U00010D73> /xf0/x90/xb5/xb3 GARAY SMALL LETTER KA +<U00010D74> /xf0/x90/xb5/xb4 GARAY SMALL LETTER BA +<U00010D75> /xf0/x90/xb5/xb5 GARAY SMALL LETTER JA +<U00010D76> /xf0/x90/xb5/xb6 GARAY SMALL LETTER SA +<U00010D77> /xf0/x90/xb5/xb7 GARAY SMALL LETTER WA +<U00010D78> /xf0/x90/xb5/xb8 GARAY SMALL LETTER LA +<U00010D79> /xf0/x90/xb5/xb9 GARAY SMALL LETTER GA +<U00010D7A> /xf0/x90/xb5/xba GARAY SMALL LETTER DA +<U00010D7B> /xf0/x90/xb5/xbb GARAY SMALL LETTER XA +<U00010D7C> /xf0/x90/xb5/xbc GARAY SMALL LETTER YA +<U00010D7D> /xf0/x90/xb5/xbd GARAY SMALL LETTER TA +<U00010D7E> /xf0/x90/xb5/xbe GARAY SMALL LETTER RA +<U00010D7F> /xf0/x90/xb5/xbf GARAY SMALL LETTER NYA +<U00010D80> /xf0/x90/xb6/x80 GARAY SMALL LETTER FA +<U00010D81> /xf0/x90/xb6/x81 GARAY SMALL LETTER NA +<U00010D82> /xf0/x90/xb6/x82 GARAY SMALL LETTER PA +<U00010D83> /xf0/x90/xb6/x83 GARAY SMALL LETTER HA +<U00010D84> /xf0/x90/xb6/x84 GARAY SMALL LETTER OLD KA +<U00010D85> /xf0/x90/xb6/x85 GARAY SMALL LETTER OLD NA +<U00010D8E> /xf0/x90/xb6/x8e GARAY PLUS SIGN +<U00010D8F> /xf0/x90/xb6/x8f GARAY MINUS SIGN <U00010E60> /xf0/x90/xb9/xa0 RUMI DIGIT ONE <U00010E61> /xf0/x90/xb9/xa1 RUMI DIGIT TWO <U00010E62> /xf0/x90/xb9/xa2 RUMI DIGIT THREE @@ -31104,6 +31242,10 @@ CHARMAP <U00010EAD> /xf0/x90/xba/xad YEZIDI HYPHENATION MARK <U00010EB0> /xf0/x90/xba/xb0 YEZIDI LETTER LAM WITH DOT ABOVE <U00010EB1> /xf0/x90/xba/xb1 YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +<U00010EC2> /xf0/x90/xbb/x82 ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW +<U00010EC3> /xf0/x90/xbb/x83 ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW +<U00010EC4> /xf0/x90/xbb/x84 ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +<U00010EFC> /xf0/x90/xbb/xbc ARABIC COMBINING ALEF OVERLAY <U00010EFD> /xf0/x90/xbb/xbd ARABIC SMALL LOW WORD SAKTA <U00010EFE> /xf0/x90/xbb/xbe ARABIC SMALL LOW WORD QASR <U00010EFF> /xf0/x90/xbb/xbf ARABIC SMALL LOW WORD MADDA @@ -31968,6 +32110,86 @@ CHARMAP <U00011372> /xf0/x91/x8d/xb2 COMBINING GRANTHA LETTER NA <U00011373> /xf0/x91/x8d/xb3 COMBINING GRANTHA LETTER VI <U00011374> /xf0/x91/x8d/xb4 COMBINING GRANTHA LETTER PA +<U00011380> /xf0/x91/x8e/x80 TULU-TIGALARI LETTER A +<U00011381> /xf0/x91/x8e/x81 TULU-TIGALARI LETTER AA +<U00011382> /xf0/x91/x8e/x82 TULU-TIGALARI LETTER I +<U00011383> /xf0/x91/x8e/x83 TULU-TIGALARI LETTER II +<U00011384> /xf0/x91/x8e/x84 TULU-TIGALARI LETTER U +<U00011385> /xf0/x91/x8e/x85 TULU-TIGALARI LETTER UU +<U00011386> /xf0/x91/x8e/x86 TULU-TIGALARI LETTER VOCALIC R +<U00011387> /xf0/x91/x8e/x87 TULU-TIGALARI LETTER VOCALIC RR +<U00011388> /xf0/x91/x8e/x88 TULU-TIGALARI LETTER VOCALIC L +<U00011389> /xf0/x91/x8e/x89 TULU-TIGALARI LETTER VOCALIC LL +<U0001138B> /xf0/x91/x8e/x8b TULU-TIGALARI LETTER EE +<U0001138E> /xf0/x91/x8e/x8e TULU-TIGALARI LETTER AI +<U00011390> /xf0/x91/x8e/x90 TULU-TIGALARI LETTER OO +<U00011391> /xf0/x91/x8e/x91 TULU-TIGALARI LETTER AU +<U00011392> /xf0/x91/x8e/x92 TULU-TIGALARI LETTER KA +<U00011393> /xf0/x91/x8e/x93 TULU-TIGALARI LETTER KHA +<U00011394> /xf0/x91/x8e/x94 TULU-TIGALARI LETTER GA +<U00011395> /xf0/x91/x8e/x95 TULU-TIGALARI LETTER GHA +<U00011396> /xf0/x91/x8e/x96 TULU-TIGALARI LETTER NGA +<U00011397> /xf0/x91/x8e/x97 TULU-TIGALARI LETTER CA +<U00011398> /xf0/x91/x8e/x98 TULU-TIGALARI LETTER CHA +<U00011399> /xf0/x91/x8e/x99 TULU-TIGALARI LETTER JA +<U0001139A> /xf0/x91/x8e/x9a TULU-TIGALARI LETTER JHA +<U0001139B> /xf0/x91/x8e/x9b TULU-TIGALARI LETTER NYA +<U0001139C> /xf0/x91/x8e/x9c TULU-TIGALARI LETTER TTA +<U0001139D> /xf0/x91/x8e/x9d TULU-TIGALARI LETTER TTHA +<U0001139E> /xf0/x91/x8e/x9e TULU-TIGALARI LETTER DDA +<U0001139F> /xf0/x91/x8e/x9f TULU-TIGALARI LETTER DDHA +<U000113A0> /xf0/x91/x8e/xa0 TULU-TIGALARI LETTER NNA +<U000113A1> /xf0/x91/x8e/xa1 TULU-TIGALARI LETTER TA +<U000113A2> /xf0/x91/x8e/xa2 TULU-TIGALARI LETTER THA +<U000113A3> /xf0/x91/x8e/xa3 TULU-TIGALARI LETTER DA +<U000113A4> /xf0/x91/x8e/xa4 TULU-TIGALARI LETTER DHA +<U000113A5> /xf0/x91/x8e/xa5 TULU-TIGALARI LETTER NA +<U000113A6> /xf0/x91/x8e/xa6 TULU-TIGALARI LETTER PA +<U000113A7> /xf0/x91/x8e/xa7 TULU-TIGALARI LETTER PHA +<U000113A8> /xf0/x91/x8e/xa8 TULU-TIGALARI LETTER BA +<U000113A9> /xf0/x91/x8e/xa9 TULU-TIGALARI LETTER BHA +<U000113AA> /xf0/x91/x8e/xaa TULU-TIGALARI LETTER MA +<U000113AB> /xf0/x91/x8e/xab TULU-TIGALARI LETTER YA +<U000113AC> /xf0/x91/x8e/xac TULU-TIGALARI LETTER RA +<U000113AD> /xf0/x91/x8e/xad TULU-TIGALARI LETTER LA +<U000113AE> /xf0/x91/x8e/xae TULU-TIGALARI LETTER VA +<U000113AF> /xf0/x91/x8e/xaf TULU-TIGALARI LETTER SHA +<U000113B0> /xf0/x91/x8e/xb0 TULU-TIGALARI LETTER SSA +<U000113B1> /xf0/x91/x8e/xb1 TULU-TIGALARI LETTER SA +<U000113B2> /xf0/x91/x8e/xb2 TULU-TIGALARI LETTER HA +<U000113B3> /xf0/x91/x8e/xb3 TULU-TIGALARI LETTER LLA +<U000113B4> /xf0/x91/x8e/xb4 TULU-TIGALARI LETTER RRA +<U000113B5> /xf0/x91/x8e/xb5 TULU-TIGALARI LETTER LLLA +<U000113B7> /xf0/x91/x8e/xb7 TULU-TIGALARI SIGN AVAGRAHA +<U000113B8> /xf0/x91/x8e/xb8 TULU-TIGALARI VOWEL SIGN AA +<U000113B9> /xf0/x91/x8e/xb9 TULU-TIGALARI VOWEL SIGN I +<U000113BA> /xf0/x91/x8e/xba TULU-TIGALARI VOWEL SIGN II +<U000113BB> /xf0/x91/x8e/xbb TULU-TIGALARI VOWEL SIGN U +<U000113BC> /xf0/x91/x8e/xbc TULU-TIGALARI VOWEL SIGN UU +<U000113BD> /xf0/x91/x8e/xbd TULU-TIGALARI VOWEL SIGN VOCALIC R +<U000113BE> /xf0/x91/x8e/xbe TULU-TIGALARI VOWEL SIGN VOCALIC RR +<U000113BF> /xf0/x91/x8e/xbf TULU-TIGALARI VOWEL SIGN VOCALIC L +<U000113C0> /xf0/x91/x8f/x80 TULU-TIGALARI VOWEL SIGN VOCALIC LL +<U000113C2> /xf0/x91/x8f/x82 TULU-TIGALARI VOWEL SIGN EE +<U000113C5> /xf0/x91/x8f/x85 TULU-TIGALARI VOWEL SIGN AI +<U000113C7> /xf0/x91/x8f/x87 TULU-TIGALARI VOWEL SIGN OO +<U000113C8> /xf0/x91/x8f/x88 TULU-TIGALARI VOWEL SIGN AU +<U000113C9> /xf0/x91/x8f/x89 TULU-TIGALARI AU LENGTH MARK +<U000113CA> /xf0/x91/x8f/x8a TULU-TIGALARI SIGN CANDRA ANUNASIKA +<U000113CC> /xf0/x91/x8f/x8c TULU-TIGALARI SIGN ANUSVARA +<U000113CD> /xf0/x91/x8f/x8d TULU-TIGALARI SIGN VISARGA +<U000113CE> /xf0/x91/x8f/x8e TULU-TIGALARI SIGN VIRAMA +<U000113CF> /xf0/x91/x8f/x8f TULU-TIGALARI SIGN LOOPED VIRAMA +<U000113D0> /xf0/x91/x8f/x90 TULU-TIGALARI CONJOINER +<U000113D1> /xf0/x91/x8f/x91 TULU-TIGALARI REPHA +<U000113D2> /xf0/x91/x8f/x92 TULU-TIGALARI GEMINATION MARK +<U000113D3> /xf0/x91/x8f/x93 TULU-TIGALARI SIGN PLUTA +<U000113D4> /xf0/x91/x8f/x94 TULU-TIGALARI DANDA +<U000113D5> /xf0/x91/x8f/x95 TULU-TIGALARI DOUBLE DANDA +<U000113D7> /xf0/x91/x8f/x97 TULU-TIGALARI SIGN OM PUSHPIKA +<U000113D8> /xf0/x91/x8f/x98 TULU-TIGALARI SIGN SHRII PUSHPIKA +<U000113E1> /xf0/x91/x8f/xa1 TULU-TIGALARI VEDIC TONE SVARITA +<U000113E2> /xf0/x91/x8f/xa2 TULU-TIGALARI VEDIC TONE ANUDATTA <U00011400> /xf0/x91/x90/x80 NEWA LETTER A <U00011401> /xf0/x91/x90/x81 NEWA LETTER AA <U00011402> /xf0/x91/x90/x82 NEWA LETTER I @@ -32399,6 +32621,26 @@ CHARMAP <U000116C7> /xf0/x91/x9b/x87 TAKRI DIGIT SEVEN <U000116C8> /xf0/x91/x9b/x88 TAKRI DIGIT EIGHT <U000116C9> /xf0/x91/x9b/x89 TAKRI DIGIT NINE +<U000116D0> /xf0/x91/x9b/x90 MYANMAR PAO DIGIT ZERO +<U000116D1> /xf0/x91/x9b/x91 MYANMAR PAO DIGIT ONE +<U000116D2> /xf0/x91/x9b/x92 MYANMAR PAO DIGIT TWO +<U000116D3> /xf0/x91/x9b/x93 MYANMAR PAO DIGIT THREE +<U000116D4> /xf0/x91/x9b/x94 MYANMAR PAO DIGIT FOUR +<U000116D5> /xf0/x91/x9b/x95 MYANMAR PAO DIGIT FIVE +<U000116D6> /xf0/x91/x9b/x96 MYANMAR PAO DIGIT SIX +<U000116D7> /xf0/x91/x9b/x97 MYANMAR PAO DIGIT SEVEN +<U000116D8> /xf0/x91/x9b/x98 MYANMAR PAO DIGIT EIGHT +<U000116D9> /xf0/x91/x9b/x99 MYANMAR PAO DIGIT NINE +<U000116DA> /xf0/x91/x9b/x9a MYANMAR EASTERN PWO KAREN DIGIT ZERO +<U000116DB> /xf0/x91/x9b/x9b MYANMAR EASTERN PWO KAREN DIGIT ONE +<U000116DC> /xf0/x91/x9b/x9c MYANMAR EASTERN PWO KAREN DIGIT TWO +<U000116DD> /xf0/x91/x9b/x9d MYANMAR EASTERN PWO KAREN DIGIT THREE +<U000116DE> /xf0/x91/x9b/x9e MYANMAR EASTERN PWO KAREN DIGIT FOUR +<U000116DF> /xf0/x91/x9b/x9f MYANMAR EASTERN PWO KAREN DIGIT FIVE +<U000116E0> /xf0/x91/x9b/xa0 MYANMAR EASTERN PWO KAREN DIGIT SIX +<U000116E1> /xf0/x91/x9b/xa1 MYANMAR EASTERN PWO KAREN DIGIT SEVEN +<U000116E2> /xf0/x91/x9b/xa2 MYANMAR EASTERN PWO KAREN DIGIT EIGHT +<U000116E3> /xf0/x91/x9b/xa3 MYANMAR EASTERN PWO KAREN DIGIT NINE <U00011700> /xf0/x91/x9c/x80 AHOM LETTER KA <U00011701> /xf0/x91/x9c/x81 AHOM LETTER KHA <U00011702> /xf0/x91/x9c/x82 AHOM LETTER NGA @@ -32983,6 +33225,50 @@ CHARMAP <U00011B07> /xf0/x91/xac/x87 DEVANAGARI SIGN WESTERN NINE-LIKE BHALE <U00011B08> /xf0/x91/xac/x88 DEVANAGARI SIGN REVERSED NINE-LIKE BHALE <U00011B09> /xf0/x91/xac/x89 DEVANAGARI SIGN MINDU +<U00011BC0> /xf0/x91/xaf/x80 SUNUWAR LETTER DEVI +<U00011BC1> /xf0/x91/xaf/x81 SUNUWAR LETTER TASLA +<U00011BC2> /xf0/x91/xaf/x82 SUNUWAR LETTER EKO +<U00011BC3> /xf0/x91/xaf/x83 SUNUWAR LETTER IMAR +<U00011BC4> /xf0/x91/xaf/x84 SUNUWAR LETTER REU +<U00011BC5> /xf0/x91/xaf/x85 SUNUWAR LETTER UTTHI +<U00011BC6> /xf0/x91/xaf/x86 SUNUWAR LETTER KIK +<U00011BC7> /xf0/x91/xaf/x87 SUNUWAR LETTER MA +<U00011BC8> /xf0/x91/xaf/x88 SUNUWAR LETTER APPHO +<U00011BC9> /xf0/x91/xaf/x89 SUNUWAR LETTER PIP +<U00011BCA> /xf0/x91/xaf/x8a SUNUWAR LETTER GIL +<U00011BCB> /xf0/x91/xaf/x8b SUNUWAR LETTER HAMSO +<U00011BCC> /xf0/x91/xaf/x8c SUNUWAR LETTER CARMI +<U00011BCD> /xf0/x91/xaf/x8d SUNUWAR LETTER NAH +<U00011BCE> /xf0/x91/xaf/x8e SUNUWAR LETTER BUR +<U00011BCF> /xf0/x91/xaf/x8f SUNUWAR LETTER JYAH +<U00011BD0> /xf0/x91/xaf/x90 SUNUWAR LETTER LOACHA +<U00011BD1> /xf0/x91/xaf/x91 SUNUWAR LETTER OTTHI +<U00011BD2> /xf0/x91/xaf/x92 SUNUWAR LETTER SHYELE +<U00011BD3> /xf0/x91/xaf/x93 SUNUWAR LETTER VARCA +<U00011BD4> /xf0/x91/xaf/x94 SUNUWAR LETTER YAT +<U00011BD5> /xf0/x91/xaf/x95 SUNUWAR LETTER AVA +<U00011BD6> /xf0/x91/xaf/x96 SUNUWAR LETTER AAL +<U00011BD7> /xf0/x91/xaf/x97 SUNUWAR LETTER DONGA +<U00011BD8> /xf0/x91/xaf/x98 SUNUWAR LETTER THARI +<U00011BD9> /xf0/x91/xaf/x99 SUNUWAR LETTER PHAR +<U00011BDA> /xf0/x91/xaf/x9a SUNUWAR LETTER NGAR +<U00011BDB> /xf0/x91/xaf/x9b SUNUWAR LETTER KHA +<U00011BDC> /xf0/x91/xaf/x9c SUNUWAR LETTER SHYER +<U00011BDD> /xf0/x91/xaf/x9d SUNUWAR LETTER CHELAP +<U00011BDE> /xf0/x91/xaf/x9e SUNUWAR LETTER TENTU +<U00011BDF> /xf0/x91/xaf/x9f SUNUWAR LETTER THELE +<U00011BE0> /xf0/x91/xaf/xa0 SUNUWAR LETTER KLOKO +<U00011BE1> /xf0/x91/xaf/xa1 SUNUWAR SIGN PVO +<U00011BF0> /xf0/x91/xaf/xb0 SUNUWAR DIGIT ZERO +<U00011BF1> /xf0/x91/xaf/xb1 SUNUWAR DIGIT ONE +<U00011BF2> /xf0/x91/xaf/xb2 SUNUWAR DIGIT TWO +<U00011BF3> /xf0/x91/xaf/xb3 SUNUWAR DIGIT THREE +<U00011BF4> /xf0/x91/xaf/xb4 SUNUWAR DIGIT FOUR +<U00011BF5> /xf0/x91/xaf/xb5 SUNUWAR DIGIT FIVE +<U00011BF6> /xf0/x91/xaf/xb6 SUNUWAR DIGIT SIX +<U00011BF7> /xf0/x91/xaf/xb7 SUNUWAR DIGIT SEVEN +<U00011BF8> /xf0/x91/xaf/xb8 SUNUWAR DIGIT EIGHT +<U00011BF9> /xf0/x91/xaf/xb9 SUNUWAR DIGIT NINE <U00011C00> /xf0/x91/xb0/x80 BHAIKSUKI LETTER A <U00011C01> /xf0/x91/xb0/x81 BHAIKSUKI LETTER AA <U00011C02> /xf0/x91/xb0/x82 BHAIKSUKI LETTER I @@ -33397,6 +33683,7 @@ CHARMAP <U00011F57> /xf0/x91/xbd/x97 KAWI DIGIT SEVEN <U00011F58> /xf0/x91/xbd/x98 KAWI DIGIT EIGHT <U00011F59> /xf0/x91/xbd/x99 KAWI DIGIT NINE +<U00011F5A> /xf0/x91/xbd/x9a KAWI SIGN NUKTA <U00011FB0> /xf0/x91/xbe/xb0 LISU LETTER YHA <U00011FC0> /xf0/x91/xbf/x80 TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH <U00011FC1> /xf0/x91/xbf/x81 TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH @@ -35892,6 +36179,4001 @@ CHARMAP <U00013453> /xf0/x93/x91/x93 EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END <U00013454> /xf0/x93/x91/x94 EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END <U00013455> /xf0/x93/x91/x95 EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +<U00013460> /xf0/x93/x91/xa0 EGYPTIAN HIEROGLYPH-13460 +<U00013461> /xf0/x93/x91/xa1 EGYPTIAN HIEROGLYPH-13461 +<U00013462> /xf0/x93/x91/xa2 EGYPTIAN HIEROGLYPH-13462 +<U00013463> /xf0/x93/x91/xa3 EGYPTIAN HIEROGLYPH-13463 +<U00013464> /xf0/x93/x91/xa4 EGYPTIAN HIEROGLYPH-13464 +<U00013465> /xf0/x93/x91/xa5 EGYPTIAN HIEROGLYPH-13465 +<U00013466> /xf0/x93/x91/xa6 EGYPTIAN HIEROGLYPH-13466 +<U00013467> /xf0/x93/x91/xa7 EGYPTIAN HIEROGLYPH-13467 +<U00013468> /xf0/x93/x91/xa8 EGYPTIAN HIEROGLYPH-13468 +<U00013469> /xf0/x93/x91/xa9 EGYPTIAN HIEROGLYPH-13469 +<U0001346A> /xf0/x93/x91/xaa EGYPTIAN HIEROGLYPH-1346A +<U0001346B> /xf0/x93/x91/xab EGYPTIAN HIEROGLYPH-1346B +<U0001346C> /xf0/x93/x91/xac EGYPTIAN HIEROGLYPH-1346C +<U0001346D> /xf0/x93/x91/xad EGYPTIAN HIEROGLYPH-1346D +<U0001346E> /xf0/x93/x91/xae EGYPTIAN HIEROGLYPH-1346E +<U0001346F> /xf0/x93/x91/xaf EGYPTIAN HIEROGLYPH-1346F +<U00013470> /xf0/x93/x91/xb0 EGYPTIAN HIEROGLYPH-13470 +<U00013471> /xf0/x93/x91/xb1 EGYPTIAN HIEROGLYPH-13471 +<U00013472> /xf0/x93/x91/xb2 EGYPTIAN HIEROGLYPH-13472 +<U00013473> /xf0/x93/x91/xb3 EGYPTIAN HIEROGLYPH-13473 +<U00013474> /xf0/x93/x91/xb4 EGYPTIAN HIEROGLYPH-13474 +<U00013475> /xf0/x93/x91/xb5 EGYPTIAN HIEROGLYPH-13475 +<U00013476> /xf0/x93/x91/xb6 EGYPTIAN HIEROGLYPH-13476 +<U00013477> /xf0/x93/x91/xb7 EGYPTIAN HIEROGLYPH-13477 +<U00013478> /xf0/x93/x91/xb8 EGYPTIAN HIEROGLYPH-13478 +<U00013479> /xf0/x93/x91/xb9 EGYPTIAN HIEROGLYPH-13479 +<U0001347A> /xf0/x93/x91/xba EGYPTIAN HIEROGLYPH-1347A +<U0001347B> /xf0/x93/x91/xbb EGYPTIAN HIEROGLYPH-1347B +<U0001347C> /xf0/x93/x91/xbc EGYPTIAN HIEROGLYPH-1347C +<U0001347D> /xf0/x93/x91/xbd EGYPTIAN HIEROGLYPH-1347D +<U0001347E> /xf0/x93/x91/xbe EGYPTIAN HIEROGLYPH-1347E +<U0001347F> /xf0/x93/x91/xbf EGYPTIAN HIEROGLYPH-1347F +<U00013480> /xf0/x93/x92/x80 EGYPTIAN HIEROGLYPH-13480 +<U00013481> /xf0/x93/x92/x81 EGYPTIAN HIEROGLYPH-13481 +<U00013482> /xf0/x93/x92/x82 EGYPTIAN HIEROGLYPH-13482 +<U00013483> /xf0/x93/x92/x83 EGYPTIAN HIEROGLYPH-13483 +<U00013484> /xf0/x93/x92/x84 EGYPTIAN HIEROGLYPH-13484 +<U00013485> /xf0/x93/x92/x85 EGYPTIAN HIEROGLYPH-13485 +<U00013486> /xf0/x93/x92/x86 EGYPTIAN HIEROGLYPH-13486 +<U00013487> /xf0/x93/x92/x87 EGYPTIAN HIEROGLYPH-13487 +<U00013488> /xf0/x93/x92/x88 EGYPTIAN HIEROGLYPH-13488 +<U00013489> /xf0/x93/x92/x89 EGYPTIAN HIEROGLYPH-13489 +<U0001348A> /xf0/x93/x92/x8a EGYPTIAN HIEROGLYPH-1348A +<U0001348B> /xf0/x93/x92/x8b EGYPTIAN HIEROGLYPH-1348B +<U0001348C> /xf0/x93/x92/x8c EGYPTIAN HIEROGLYPH-1348C +<U0001348D> /xf0/x93/x92/x8d EGYPTIAN HIEROGLYPH-1348D +<U0001348E> /xf0/x93/x92/x8e EGYPTIAN HIEROGLYPH-1348E +<U0001348F> /xf0/x93/x92/x8f EGYPTIAN HIEROGLYPH-1348F +<U00013490> /xf0/x93/x92/x90 EGYPTIAN HIEROGLYPH-13490 +<U00013491> /xf0/x93/x92/x91 EGYPTIAN HIEROGLYPH-13491 +<U00013492> /xf0/x93/x92/x92 EGYPTIAN HIEROGLYPH-13492 +<U00013493> /xf0/x93/x92/x93 EGYPTIAN HIEROGLYPH-13493 +<U00013494> /xf0/x93/x92/x94 EGYPTIAN HIEROGLYPH-13494 +<U00013495> /xf0/x93/x92/x95 EGYPTIAN HIEROGLYPH-13495 +<U00013496> /xf0/x93/x92/x96 EGYPTIAN HIEROGLYPH-13496 +<U00013497> /xf0/x93/x92/x97 EGYPTIAN HIEROGLYPH-13497 +<U00013498> /xf0/x93/x92/x98 EGYPTIAN HIEROGLYPH-13498 +<U00013499> /xf0/x93/x92/x99 EGYPTIAN HIEROGLYPH-13499 +<U0001349A> /xf0/x93/x92/x9a EGYPTIAN HIEROGLYPH-1349A +<U0001349B> /xf0/x93/x92/x9b EGYPTIAN HIEROGLYPH-1349B +<U0001349C> /xf0/x93/x92/x9c EGYPTIAN HIEROGLYPH-1349C +<U0001349D> /xf0/x93/x92/x9d EGYPTIAN HIEROGLYPH-1349D +<U0001349E> /xf0/x93/x92/x9e EGYPTIAN HIEROGLYPH-1349E +<U0001349F> /xf0/x93/x92/x9f EGYPTIAN HIEROGLYPH-1349F +<U000134A0> /xf0/x93/x92/xa0 EGYPTIAN HIEROGLYPH-134A0 +<U000134A1> /xf0/x93/x92/xa1 EGYPTIAN HIEROGLYPH-134A1 +<U000134A2> /xf0/x93/x92/xa2 EGYPTIAN HIEROGLYPH-134A2 +<U000134A3> /xf0/x93/x92/xa3 EGYPTIAN HIEROGLYPH-134A3 +<U000134A4> /xf0/x93/x92/xa4 EGYPTIAN HIEROGLYPH-134A4 +<U000134A5> /xf0/x93/x92/xa5 EGYPTIAN HIEROGLYPH-134A5 +<U000134A6> /xf0/x93/x92/xa6 EGYPTIAN HIEROGLYPH-134A6 +<U000134A7> /xf0/x93/x92/xa7 EGYPTIAN HIEROGLYPH-134A7 +<U000134A8> /xf0/x93/x92/xa8 EGYPTIAN HIEROGLYPH-134A8 +<U000134A9> /xf0/x93/x92/xa9 EGYPTIAN HIEROGLYPH-134A9 +<U000134AA> /xf0/x93/x92/xaa EGYPTIAN HIEROGLYPH-134AA +<U000134AB> /xf0/x93/x92/xab EGYPTIAN HIEROGLYPH-134AB +<U000134AC> /xf0/x93/x92/xac EGYPTIAN HIEROGLYPH-134AC +<U000134AD> /xf0/x93/x92/xad EGYPTIAN HIEROGLYPH-134AD +<U000134AE> /xf0/x93/x92/xae EGYPTIAN HIEROGLYPH-134AE +<U000134AF> /xf0/x93/x92/xaf EGYPTIAN HIEROGLYPH-134AF +<U000134B0> /xf0/x93/x92/xb0 EGYPTIAN HIEROGLYPH-134B0 +<U000134B1> /xf0/x93/x92/xb1 EGYPTIAN HIEROGLYPH-134B1 +<U000134B2> /xf0/x93/x92/xb2 EGYPTIAN HIEROGLYPH-134B2 +<U000134B3> /xf0/x93/x92/xb3 EGYPTIAN HIEROGLYPH-134B3 +<U000134B4> /xf0/x93/x92/xb4 EGYPTIAN HIEROGLYPH-134B4 +<U000134B5> /xf0/x93/x92/xb5 EGYPTIAN HIEROGLYPH-134B5 +<U000134B6> /xf0/x93/x92/xb6 EGYPTIAN HIEROGLYPH-134B6 +<U000134B7> /xf0/x93/x92/xb7 EGYPTIAN HIEROGLYPH-134B7 +<U000134B8> /xf0/x93/x92/xb8 EGYPTIAN HIEROGLYPH-134B8 +<U000134B9> /xf0/x93/x92/xb9 EGYPTIAN HIEROGLYPH-134B9 +<U000134BA> /xf0/x93/x92/xba EGYPTIAN HIEROGLYPH-134BA +<U000134BB> /xf0/x93/x92/xbb EGYPTIAN HIEROGLYPH-134BB +<U000134BC> /xf0/x93/x92/xbc EGYPTIAN HIEROGLYPH-134BC +<U000134BD> /xf0/x93/x92/xbd EGYPTIAN HIEROGLYPH-134BD +<U000134BE> /xf0/x93/x92/xbe EGYPTIAN HIEROGLYPH-134BE +<U000134BF> /xf0/x93/x92/xbf EGYPTIAN HIEROGLYPH-134BF +<U000134C0> /xf0/x93/x93/x80 EGYPTIAN HIEROGLYPH-134C0 +<U000134C1> /xf0/x93/x93/x81 EGYPTIAN HIEROGLYPH-134C1 +<U000134C2> /xf0/x93/x93/x82 EGYPTIAN HIEROGLYPH-134C2 +<U000134C3> /xf0/x93/x93/x83 EGYPTIAN HIEROGLYPH-134C3 +<U000134C4> /xf0/x93/x93/x84 EGYPTIAN HIEROGLYPH-134C4 +<U000134C5> /xf0/x93/x93/x85 EGYPTIAN HIEROGLYPH-134C5 +<U000134C6> /xf0/x93/x93/x86 EGYPTIAN HIEROGLYPH-134C6 +<U000134C7> /xf0/x93/x93/x87 EGYPTIAN HIEROGLYPH-134C7 +<U000134C8> /xf0/x93/x93/x88 EGYPTIAN HIEROGLYPH-134C8 +<U000134C9> /xf0/x93/x93/x89 EGYPTIAN HIEROGLYPH-134C9 +<U000134CA> /xf0/x93/x93/x8a EGYPTIAN HIEROGLYPH-134CA +<U000134CB> /xf0/x93/x93/x8b EGYPTIAN HIEROGLYPH-134CB +<U000134CC> /xf0/x93/x93/x8c EGYPTIAN HIEROGLYPH-134CC +<U000134CD> /xf0/x93/x93/x8d EGYPTIAN HIEROGLYPH-134CD +<U000134CE> /xf0/x93/x93/x8e EGYPTIAN HIEROGLYPH-134CE +<U000134CF> /xf0/x93/x93/x8f EGYPTIAN HIEROGLYPH-134CF +<U000134D0> /xf0/x93/x93/x90 EGYPTIAN HIEROGLYPH-134D0 +<U000134D1> /xf0/x93/x93/x91 EGYPTIAN HIEROGLYPH-134D1 +<U000134D2> /xf0/x93/x93/x92 EGYPTIAN HIEROGLYPH-134D2 +<U000134D3> /xf0/x93/x93/x93 EGYPTIAN HIEROGLYPH-134D3 +<U000134D4> /xf0/x93/x93/x94 EGYPTIAN HIEROGLYPH-134D4 +<U000134D5> /xf0/x93/x93/x95 EGYPTIAN HIEROGLYPH-134D5 +<U000134D6> /xf0/x93/x93/x96 EGYPTIAN HIEROGLYPH-134D6 +<U000134D7> /xf0/x93/x93/x97 EGYPTIAN HIEROGLYPH-134D7 +<U000134D8> /xf0/x93/x93/x98 EGYPTIAN HIEROGLYPH-134D8 +<U000134D9> /xf0/x93/x93/x99 EGYPTIAN HIEROGLYPH-134D9 +<U000134DA> /xf0/x93/x93/x9a EGYPTIAN HIEROGLYPH-134DA +<U000134DB> /xf0/x93/x93/x9b EGYPTIAN HIEROGLYPH-134DB +<U000134DC> /xf0/x93/x93/x9c EGYPTIAN HIEROGLYPH-134DC +<U000134DD> /xf0/x93/x93/x9d EGYPTIAN HIEROGLYPH-134DD +<U000134DE> /xf0/x93/x93/x9e EGYPTIAN HIEROGLYPH-134DE +<U000134DF> /xf0/x93/x93/x9f EGYPTIAN HIEROGLYPH-134DF +<U000134E0> /xf0/x93/x93/xa0 EGYPTIAN HIEROGLYPH-134E0 +<U000134E1> /xf0/x93/x93/xa1 EGYPTIAN HIEROGLYPH-134E1 +<U000134E2> /xf0/x93/x93/xa2 EGYPTIAN HIEROGLYPH-134E2 +<U000134E3> /xf0/x93/x93/xa3 EGYPTIAN HIEROGLYPH-134E3 +<U000134E4> /xf0/x93/x93/xa4 EGYPTIAN HIEROGLYPH-134E4 +<U000134E5> /xf0/x93/x93/xa5 EGYPTIAN HIEROGLYPH-134E5 +<U000134E6> /xf0/x93/x93/xa6 EGYPTIAN HIEROGLYPH-134E6 +<U000134E7> /xf0/x93/x93/xa7 EGYPTIAN HIEROGLYPH-134E7 +<U000134E8> /xf0/x93/x93/xa8 EGYPTIAN HIEROGLYPH-134E8 +<U000134E9> /xf0/x93/x93/xa9 EGYPTIAN HIEROGLYPH-134E9 +<U000134EA> /xf0/x93/x93/xaa EGYPTIAN HIEROGLYPH-134EA +<U000134EB> /xf0/x93/x93/xab EGYPTIAN HIEROGLYPH-134EB +<U000134EC> /xf0/x93/x93/xac EGYPTIAN HIEROGLYPH-134EC +<U000134ED> /xf0/x93/x93/xad EGYPTIAN HIEROGLYPH-134ED +<U000134EE> /xf0/x93/x93/xae EGYPTIAN HIEROGLYPH-134EE +<U000134EF> /xf0/x93/x93/xaf EGYPTIAN HIEROGLYPH-134EF +<U000134F0> /xf0/x93/x93/xb0 EGYPTIAN HIEROGLYPH-134F0 +<U000134F1> /xf0/x93/x93/xb1 EGYPTIAN HIEROGLYPH-134F1 +<U000134F2> /xf0/x93/x93/xb2 EGYPTIAN HIEROGLYPH-134F2 +<U000134F3> /xf0/x93/x93/xb3 EGYPTIAN HIEROGLYPH-134F3 +<U000134F4> /xf0/x93/x93/xb4 EGYPTIAN HIEROGLYPH-134F4 +<U000134F5> /xf0/x93/x93/xb5 EGYPTIAN HIEROGLYPH-134F5 +<U000134F6> /xf0/x93/x93/xb6 EGYPTIAN HIEROGLYPH-134F6 +<U000134F7> /xf0/x93/x93/xb7 EGYPTIAN HIEROGLYPH-134F7 +<U000134F8> /xf0/x93/x93/xb8 EGYPTIAN HIEROGLYPH-134F8 +<U000134F9> /xf0/x93/x93/xb9 EGYPTIAN HIEROGLYPH-134F9 +<U000134FA> /xf0/x93/x93/xba EGYPTIAN HIEROGLYPH-134FA +<U000134FB> /xf0/x93/x93/xbb EGYPTIAN HIEROGLYPH-134FB +<U000134FC> /xf0/x93/x93/xbc EGYPTIAN HIEROGLYPH-134FC +<U000134FD> /xf0/x93/x93/xbd EGYPTIAN HIEROGLYPH-134FD +<U000134FE> /xf0/x93/x93/xbe EGYPTIAN HIEROGLYPH-134FE +<U000134FF> /xf0/x93/x93/xbf EGYPTIAN HIEROGLYPH-134FF +<U00013500> /xf0/x93/x94/x80 EGYPTIAN HIEROGLYPH-13500 +<U00013501> /xf0/x93/x94/x81 EGYPTIAN HIEROGLYPH-13501 +<U00013502> /xf0/x93/x94/x82 EGYPTIAN HIEROGLYPH-13502 +<U00013503> /xf0/x93/x94/x83 EGYPTIAN HIEROGLYPH-13503 +<U00013504> /xf0/x93/x94/x84 EGYPTIAN HIEROGLYPH-13504 +<U00013505> /xf0/x93/x94/x85 EGYPTIAN HIEROGLYPH-13505 +<U00013506> /xf0/x93/x94/x86 EGYPTIAN HIEROGLYPH-13506 +<U00013507> /xf0/x93/x94/x87 EGYPTIAN HIEROGLYPH-13507 +<U00013508> /xf0/x93/x94/x88 EGYPTIAN HIEROGLYPH-13508 +<U00013509> /xf0/x93/x94/x89 EGYPTIAN HIEROGLYPH-13509 +<U0001350A> /xf0/x93/x94/x8a EGYPTIAN HIEROGLYPH-1350A +<U0001350B> /xf0/x93/x94/x8b EGYPTIAN HIEROGLYPH-1350B +<U0001350C> /xf0/x93/x94/x8c EGYPTIAN HIEROGLYPH-1350C +<U0001350D> /xf0/x93/x94/x8d EGYPTIAN HIEROGLYPH-1350D +<U0001350E> /xf0/x93/x94/x8e EGYPTIAN HIEROGLYPH-1350E +<U0001350F> /xf0/x93/x94/x8f EGYPTIAN HIEROGLYPH-1350F +<U00013510> /xf0/x93/x94/x90 EGYPTIAN HIEROGLYPH-13510 +<U00013511> /xf0/x93/x94/x91 EGYPTIAN HIEROGLYPH-13511 +<U00013512> /xf0/x93/x94/x92 EGYPTIAN HIEROGLYPH-13512 +<U00013513> /xf0/x93/x94/x93 EGYPTIAN HIEROGLYPH-13513 +<U00013514> /xf0/x93/x94/x94 EGYPTIAN HIEROGLYPH-13514 +<U00013515> /xf0/x93/x94/x95 EGYPTIAN HIEROGLYPH-13515 +<U00013516> /xf0/x93/x94/x96 EGYPTIAN HIEROGLYPH-13516 +<U00013517> /xf0/x93/x94/x97 EGYPTIAN HIEROGLYPH-13517 +<U00013518> /xf0/x93/x94/x98 EGYPTIAN HIEROGLYPH-13518 +<U00013519> /xf0/x93/x94/x99 EGYPTIAN HIEROGLYPH-13519 +<U0001351A> /xf0/x93/x94/x9a EGYPTIAN HIEROGLYPH-1351A +<U0001351B> /xf0/x93/x94/x9b EGYPTIAN HIEROGLYPH-1351B +<U0001351C> /xf0/x93/x94/x9c EGYPTIAN HIEROGLYPH-1351C +<U0001351D> /xf0/x93/x94/x9d EGYPTIAN HIEROGLYPH-1351D +<U0001351E> /xf0/x93/x94/x9e EGYPTIAN HIEROGLYPH-1351E +<U0001351F> /xf0/x93/x94/x9f EGYPTIAN HIEROGLYPH-1351F +<U00013520> /xf0/x93/x94/xa0 EGYPTIAN HIEROGLYPH-13520 +<U00013521> /xf0/x93/x94/xa1 EGYPTIAN HIEROGLYPH-13521 +<U00013522> /xf0/x93/x94/xa2 EGYPTIAN HIEROGLYPH-13522 +<U00013523> /xf0/x93/x94/xa3 EGYPTIAN HIEROGLYPH-13523 +<U00013524> /xf0/x93/x94/xa4 EGYPTIAN HIEROGLYPH-13524 +<U00013525> /xf0/x93/x94/xa5 EGYPTIAN HIEROGLYPH-13525 +<U00013526> /xf0/x93/x94/xa6 EGYPTIAN HIEROGLYPH-13526 +<U00013527> /xf0/x93/x94/xa7 EGYPTIAN HIEROGLYPH-13527 +<U00013528> /xf0/x93/x94/xa8 EGYPTIAN HIEROGLYPH-13528 +<U00013529> /xf0/x93/x94/xa9 EGYPTIAN HIEROGLYPH-13529 +<U0001352A> /xf0/x93/x94/xaa EGYPTIAN HIEROGLYPH-1352A +<U0001352B> /xf0/x93/x94/xab EGYPTIAN HIEROGLYPH-1352B +<U0001352C> /xf0/x93/x94/xac EGYPTIAN HIEROGLYPH-1352C +<U0001352D> /xf0/x93/x94/xad EGYPTIAN HIEROGLYPH-1352D +<U0001352E> /xf0/x93/x94/xae EGYPTIAN HIEROGLYPH-1352E +<U0001352F> /xf0/x93/x94/xaf EGYPTIAN HIEROGLYPH-1352F +<U00013530> /xf0/x93/x94/xb0 EGYPTIAN HIEROGLYPH-13530 +<U00013531> /xf0/x93/x94/xb1 EGYPTIAN HIEROGLYPH-13531 +<U00013532> /xf0/x93/x94/xb2 EGYPTIAN HIEROGLYPH-13532 +<U00013533> /xf0/x93/x94/xb3 EGYPTIAN HIEROGLYPH-13533 +<U00013534> /xf0/x93/x94/xb4 EGYPTIAN HIEROGLYPH-13534 +<U00013535> /xf0/x93/x94/xb5 EGYPTIAN HIEROGLYPH-13535 +<U00013536> /xf0/x93/x94/xb6 EGYPTIAN HIEROGLYPH-13536 +<U00013537> /xf0/x93/x94/xb7 EGYPTIAN HIEROGLYPH-13537 +<U00013538> /xf0/x93/x94/xb8 EGYPTIAN HIEROGLYPH-13538 +<U00013539> /xf0/x93/x94/xb9 EGYPTIAN HIEROGLYPH-13539 +<U0001353A> /xf0/x93/x94/xba EGYPTIAN HIEROGLYPH-1353A +<U0001353B> /xf0/x93/x94/xbb EGYPTIAN HIEROGLYPH-1353B +<U0001353C> /xf0/x93/x94/xbc EGYPTIAN HIEROGLYPH-1353C +<U0001353D> /xf0/x93/x94/xbd EGYPTIAN HIEROGLYPH-1353D +<U0001353E> /xf0/x93/x94/xbe EGYPTIAN HIEROGLYPH-1353E +<U0001353F> /xf0/x93/x94/xbf EGYPTIAN HIEROGLYPH-1353F +<U00013540> /xf0/x93/x95/x80 EGYPTIAN HIEROGLYPH-13540 +<U00013541> /xf0/x93/x95/x81 EGYPTIAN HIEROGLYPH-13541 +<U00013542> /xf0/x93/x95/x82 EGYPTIAN HIEROGLYPH-13542 +<U00013543> /xf0/x93/x95/x83 EGYPTIAN HIEROGLYPH-13543 +<U00013544> /xf0/x93/x95/x84 EGYPTIAN HIEROGLYPH-13544 +<U00013545> /xf0/x93/x95/x85 EGYPTIAN HIEROGLYPH-13545 +<U00013546> /xf0/x93/x95/x86 EGYPTIAN HIEROGLYPH-13546 +<U00013547> /xf0/x93/x95/x87 EGYPTIAN HIEROGLYPH-13547 +<U00013548> /xf0/x93/x95/x88 EGYPTIAN HIEROGLYPH-13548 +<U00013549> /xf0/x93/x95/x89 EGYPTIAN HIEROGLYPH-13549 +<U0001354A> /xf0/x93/x95/x8a EGYPTIAN HIEROGLYPH-1354A +<U0001354B> /xf0/x93/x95/x8b EGYPTIAN HIEROGLYPH-1354B +<U0001354C> /xf0/x93/x95/x8c EGYPTIAN HIEROGLYPH-1354C +<U0001354D> /xf0/x93/x95/x8d EGYPTIAN HIEROGLYPH-1354D +<U0001354E> /xf0/x93/x95/x8e EGYPTIAN HIEROGLYPH-1354E +<U0001354F> /xf0/x93/x95/x8f EGYPTIAN HIEROGLYPH-1354F +<U00013550> /xf0/x93/x95/x90 EGYPTIAN HIEROGLYPH-13550 +<U00013551> /xf0/x93/x95/x91 EGYPTIAN HIEROGLYPH-13551 +<U00013552> /xf0/x93/x95/x92 EGYPTIAN HIEROGLYPH-13552 +<U00013553> /xf0/x93/x95/x93 EGYPTIAN HIEROGLYPH-13553 +<U00013554> /xf0/x93/x95/x94 EGYPTIAN HIEROGLYPH-13554 +<U00013555> /xf0/x93/x95/x95 EGYPTIAN HIEROGLYPH-13555 +<U00013556> /xf0/x93/x95/x96 EGYPTIAN HIEROGLYPH-13556 +<U00013557> /xf0/x93/x95/x97 EGYPTIAN HIEROGLYPH-13557 +<U00013558> /xf0/x93/x95/x98 EGYPTIAN HIEROGLYPH-13558 +<U00013559> /xf0/x93/x95/x99 EGYPTIAN HIEROGLYPH-13559 +<U0001355A> /xf0/x93/x95/x9a EGYPTIAN HIEROGLYPH-1355A +<U0001355B> /xf0/x93/x95/x9b EGYPTIAN HIEROGLYPH-1355B +<U0001355C> /xf0/x93/x95/x9c EGYPTIAN HIEROGLYPH-1355C +<U0001355D> /xf0/x93/x95/x9d EGYPTIAN HIEROGLYPH-1355D +<U0001355E> /xf0/x93/x95/x9e EGYPTIAN HIEROGLYPH-1355E +<U0001355F> /xf0/x93/x95/x9f EGYPTIAN HIEROGLYPH-1355F +<U00013560> /xf0/x93/x95/xa0 EGYPTIAN HIEROGLYPH-13560 +<U00013561> /xf0/x93/x95/xa1 EGYPTIAN HIEROGLYPH-13561 +<U00013562> /xf0/x93/x95/xa2 EGYPTIAN HIEROGLYPH-13562 +<U00013563> /xf0/x93/x95/xa3 EGYPTIAN HIEROGLYPH-13563 +<U00013564> /xf0/x93/x95/xa4 EGYPTIAN HIEROGLYPH-13564 +<U00013565> /xf0/x93/x95/xa5 EGYPTIAN HIEROGLYPH-13565 +<U00013566> /xf0/x93/x95/xa6 EGYPTIAN HIEROGLYPH-13566 +<U00013567> /xf0/x93/x95/xa7 EGYPTIAN HIEROGLYPH-13567 +<U00013568> /xf0/x93/x95/xa8 EGYPTIAN HIEROGLYPH-13568 +<U00013569> /xf0/x93/x95/xa9 EGYPTIAN HIEROGLYPH-13569 +<U0001356A> /xf0/x93/x95/xaa EGYPTIAN HIEROGLYPH-1356A +<U0001356B> /xf0/x93/x95/xab EGYPTIAN HIEROGLYPH-1356B +<U0001356C> /xf0/x93/x95/xac EGYPTIAN HIEROGLYPH-1356C +<U0001356D> /xf0/x93/x95/xad EGYPTIAN HIEROGLYPH-1356D +<U0001356E> /xf0/x93/x95/xae EGYPTIAN HIEROGLYPH-1356E +<U0001356F> /xf0/x93/x95/xaf EGYPTIAN HIEROGLYPH-1356F +<U00013570> /xf0/x93/x95/xb0 EGYPTIAN HIEROGLYPH-13570 +<U00013571> /xf0/x93/x95/xb1 EGYPTIAN HIEROGLYPH-13571 +<U00013572> /xf0/x93/x95/xb2 EGYPTIAN HIEROGLYPH-13572 +<U00013573> /xf0/x93/x95/xb3 EGYPTIAN HIEROGLYPH-13573 +<U00013574> /xf0/x93/x95/xb4 EGYPTIAN HIEROGLYPH-13574 +<U00013575> /xf0/x93/x95/xb5 EGYPTIAN HIEROGLYPH-13575 +<U00013576> /xf0/x93/x95/xb6 EGYPTIAN HIEROGLYPH-13576 +<U00013577> /xf0/x93/x95/xb7 EGYPTIAN HIEROGLYPH-13577 +<U00013578> /xf0/x93/x95/xb8 EGYPTIAN HIEROGLYPH-13578 +<U00013579> /xf0/x93/x95/xb9 EGYPTIAN HIEROGLYPH-13579 +<U0001357A> /xf0/x93/x95/xba EGYPTIAN HIEROGLYPH-1357A +<U0001357B> /xf0/x93/x95/xbb EGYPTIAN HIEROGLYPH-1357B +<U0001357C> /xf0/x93/x95/xbc EGYPTIAN HIEROGLYPH-1357C +<U0001357D> /xf0/x93/x95/xbd EGYPTIAN HIEROGLYPH-1357D +<U0001357E> /xf0/x93/x95/xbe EGYPTIAN HIEROGLYPH-1357E +<U0001357F> /xf0/x93/x95/xbf EGYPTIAN HIEROGLYPH-1357F +<U00013580> /xf0/x93/x96/x80 EGYPTIAN HIEROGLYPH-13580 +<U00013581> /xf0/x93/x96/x81 EGYPTIAN HIEROGLYPH-13581 +<U00013582> /xf0/x93/x96/x82 EGYPTIAN HIEROGLYPH-13582 +<U00013583> /xf0/x93/x96/x83 EGYPTIAN HIEROGLYPH-13583 +<U00013584> /xf0/x93/x96/x84 EGYPTIAN HIEROGLYPH-13584 +<U00013585> /xf0/x93/x96/x85 EGYPTIAN HIEROGLYPH-13585 +<U00013586> /xf0/x93/x96/x86 EGYPTIAN HIEROGLYPH-13586 +<U00013587> /xf0/x93/x96/x87 EGYPTIAN HIEROGLYPH-13587 +<U00013588> /xf0/x93/x96/x88 EGYPTIAN HIEROGLYPH-13588 +<U00013589> /xf0/x93/x96/x89 EGYPTIAN HIEROGLYPH-13589 +<U0001358A> /xf0/x93/x96/x8a EGYPTIAN HIEROGLYPH-1358A +<U0001358B> /xf0/x93/x96/x8b EGYPTIAN HIEROGLYPH-1358B +<U0001358C> /xf0/x93/x96/x8c EGYPTIAN HIEROGLYPH-1358C +<U0001358D> /xf0/x93/x96/x8d EGYPTIAN HIEROGLYPH-1358D +<U0001358E> /xf0/x93/x96/x8e EGYPTIAN HIEROGLYPH-1358E +<U0001358F> /xf0/x93/x96/x8f EGYPTIAN HIEROGLYPH-1358F +<U00013590> /xf0/x93/x96/x90 EGYPTIAN HIEROGLYPH-13590 +<U00013591> /xf0/x93/x96/x91 EGYPTIAN HIEROGLYPH-13591 +<U00013592> /xf0/x93/x96/x92 EGYPTIAN HIEROGLYPH-13592 +<U00013593> /xf0/x93/x96/x93 EGYPTIAN HIEROGLYPH-13593 +<U00013594> /xf0/x93/x96/x94 EGYPTIAN HIEROGLYPH-13594 +<U00013595> /xf0/x93/x96/x95 EGYPTIAN HIEROGLYPH-13595 +<U00013596> /xf0/x93/x96/x96 EGYPTIAN HIEROGLYPH-13596 +<U00013597> /xf0/x93/x96/x97 EGYPTIAN HIEROGLYPH-13597 +<U00013598> /xf0/x93/x96/x98 EGYPTIAN HIEROGLYPH-13598 +<U00013599> /xf0/x93/x96/x99 EGYPTIAN HIEROGLYPH-13599 +<U0001359A> /xf0/x93/x96/x9a EGYPTIAN HIEROGLYPH-1359A +<U0001359B> /xf0/x93/x96/x9b EGYPTIAN HIEROGLYPH-1359B +<U0001359C> /xf0/x93/x96/x9c EGYPTIAN HIEROGLYPH-1359C +<U0001359D> /xf0/x93/x96/x9d EGYPTIAN HIEROGLYPH-1359D +<U0001359E> /xf0/x93/x96/x9e EGYPTIAN HIEROGLYPH-1359E +<U0001359F> /xf0/x93/x96/x9f EGYPTIAN HIEROGLYPH-1359F +<U000135A0> /xf0/x93/x96/xa0 EGYPTIAN HIEROGLYPH-135A0 +<U000135A1> /xf0/x93/x96/xa1 EGYPTIAN HIEROGLYPH-135A1 +<U000135A2> /xf0/x93/x96/xa2 EGYPTIAN HIEROGLYPH-135A2 +<U000135A3> /xf0/x93/x96/xa3 EGYPTIAN HIEROGLYPH-135A3 +<U000135A4> /xf0/x93/x96/xa4 EGYPTIAN HIEROGLYPH-135A4 +<U000135A5> /xf0/x93/x96/xa5 EGYPTIAN HIEROGLYPH-135A5 +<U000135A6> /xf0/x93/x96/xa6 EGYPTIAN HIEROGLYPH-135A6 +<U000135A7> /xf0/x93/x96/xa7 EGYPTIAN HIEROGLYPH-135A7 +<U000135A8> /xf0/x93/x96/xa8 EGYPTIAN HIEROGLYPH-135A8 +<U000135A9> /xf0/x93/x96/xa9 EGYPTIAN HIEROGLYPH-135A9 +<U000135AA> /xf0/x93/x96/xaa EGYPTIAN HIEROGLYPH-135AA +<U000135AB> /xf0/x93/x96/xab EGYPTIAN HIEROGLYPH-135AB +<U000135AC> /xf0/x93/x96/xac EGYPTIAN HIEROGLYPH-135AC +<U000135AD> /xf0/x93/x96/xad EGYPTIAN HIEROGLYPH-135AD +<U000135AE> /xf0/x93/x96/xae EGYPTIAN HIEROGLYPH-135AE +<U000135AF> /xf0/x93/x96/xaf EGYPTIAN HIEROGLYPH-135AF +<U000135B0> /xf0/x93/x96/xb0 EGYPTIAN HIEROGLYPH-135B0 +<U000135B1> /xf0/x93/x96/xb1 EGYPTIAN HIEROGLYPH-135B1 +<U000135B2> /xf0/x93/x96/xb2 EGYPTIAN HIEROGLYPH-135B2 +<U000135B3> /xf0/x93/x96/xb3 EGYPTIAN HIEROGLYPH-135B3 +<U000135B4> /xf0/x93/x96/xb4 EGYPTIAN HIEROGLYPH-135B4 +<U000135B5> /xf0/x93/x96/xb5 EGYPTIAN HIEROGLYPH-135B5 +<U000135B6> /xf0/x93/x96/xb6 EGYPTIAN HIEROGLYPH-135B6 +<U000135B7> /xf0/x93/x96/xb7 EGYPTIAN HIEROGLYPH-135B7 +<U000135B8> /xf0/x93/x96/xb8 EGYPTIAN HIEROGLYPH-135B8 +<U000135B9> /xf0/x93/x96/xb9 EGYPTIAN HIEROGLYPH-135B9 +<U000135BA> /xf0/x93/x96/xba EGYPTIAN HIEROGLYPH-135BA +<U000135BB> /xf0/x93/x96/xbb EGYPTIAN HIEROGLYPH-135BB +<U000135BC> /xf0/x93/x96/xbc EGYPTIAN HIEROGLYPH-135BC +<U000135BD> /xf0/x93/x96/xbd EGYPTIAN HIEROGLYPH-135BD +<U000135BE> /xf0/x93/x96/xbe EGYPTIAN HIEROGLYPH-135BE +<U000135BF> /xf0/x93/x96/xbf EGYPTIAN HIEROGLYPH-135BF +<U000135C0> /xf0/x93/x97/x80 EGYPTIAN HIEROGLYPH-135C0 +<U000135C1> /xf0/x93/x97/x81 EGYPTIAN HIEROGLYPH-135C1 +<U000135C2> /xf0/x93/x97/x82 EGYPTIAN HIEROGLYPH-135C2 +<U000135C3> /xf0/x93/x97/x83 EGYPTIAN HIEROGLYPH-135C3 +<U000135C4> /xf0/x93/x97/x84 EGYPTIAN HIEROGLYPH-135C4 +<U000135C5> /xf0/x93/x97/x85 EGYPTIAN HIEROGLYPH-135C5 +<U000135C6> /xf0/x93/x97/x86 EGYPTIAN HIEROGLYPH-135C6 +<U000135C7> /xf0/x93/x97/x87 EGYPTIAN HIEROGLYPH-135C7 +<U000135C8> /xf0/x93/x97/x88 EGYPTIAN HIEROGLYPH-135C8 +<U000135C9> /xf0/x93/x97/x89 EGYPTIAN HIEROGLYPH-135C9 +<U000135CA> /xf0/x93/x97/x8a EGYPTIAN HIEROGLYPH-135CA +<U000135CB> /xf0/x93/x97/x8b EGYPTIAN HIEROGLYPH-135CB +<U000135CC> /xf0/x93/x97/x8c EGYPTIAN HIEROGLYPH-135CC +<U000135CD> /xf0/x93/x97/x8d EGYPTIAN HIEROGLYPH-135CD +<U000135CE> /xf0/x93/x97/x8e EGYPTIAN HIEROGLYPH-135CE +<U000135CF> /xf0/x93/x97/x8f EGYPTIAN HIEROGLYPH-135CF +<U000135D0> /xf0/x93/x97/x90 EGYPTIAN HIEROGLYPH-135D0 +<U000135D1> /xf0/x93/x97/x91 EGYPTIAN HIEROGLYPH-135D1 +<U000135D2> /xf0/x93/x97/x92 EGYPTIAN HIEROGLYPH-135D2 +<U000135D3> /xf0/x93/x97/x93 EGYPTIAN HIEROGLYPH-135D3 +<U000135D4> /xf0/x93/x97/x94 EGYPTIAN HIEROGLYPH-135D4 +<U000135D5> /xf0/x93/x97/x95 EGYPTIAN HIEROGLYPH-135D5 +<U000135D6> /xf0/x93/x97/x96 EGYPTIAN HIEROGLYPH-135D6 +<U000135D7> /xf0/x93/x97/x97 EGYPTIAN HIEROGLYPH-135D7 +<U000135D8> /xf0/x93/x97/x98 EGYPTIAN HIEROGLYPH-135D8 +<U000135D9> /xf0/x93/x97/x99 EGYPTIAN HIEROGLYPH-135D9 +<U000135DA> /xf0/x93/x97/x9a EGYPTIAN HIEROGLYPH-135DA +<U000135DB> /xf0/x93/x97/x9b EGYPTIAN HIEROGLYPH-135DB +<U000135DC> /xf0/x93/x97/x9c EGYPTIAN HIEROGLYPH-135DC +<U000135DD> /xf0/x93/x97/x9d EGYPTIAN HIEROGLYPH-135DD +<U000135DE> /xf0/x93/x97/x9e EGYPTIAN HIEROGLYPH-135DE +<U000135DF> /xf0/x93/x97/x9f EGYPTIAN HIEROGLYPH-135DF +<U000135E0> /xf0/x93/x97/xa0 EGYPTIAN HIEROGLYPH-135E0 +<U000135E1> /xf0/x93/x97/xa1 EGYPTIAN HIEROGLYPH-135E1 +<U000135E2> /xf0/x93/x97/xa2 EGYPTIAN HIEROGLYPH-135E2 +<U000135E3> /xf0/x93/x97/xa3 EGYPTIAN HIEROGLYPH-135E3 +<U000135E4> /xf0/x93/x97/xa4 EGYPTIAN HIEROGLYPH-135E4 +<U000135E5> /xf0/x93/x97/xa5 EGYPTIAN HIEROGLYPH-135E5 +<U000135E6> /xf0/x93/x97/xa6 EGYPTIAN HIEROGLYPH-135E6 +<U000135E7> /xf0/x93/x97/xa7 EGYPTIAN HIEROGLYPH-135E7 +<U000135E8> /xf0/x93/x97/xa8 EGYPTIAN HIEROGLYPH-135E8 +<U000135E9> /xf0/x93/x97/xa9 EGYPTIAN HIEROGLYPH-135E9 +<U000135EA> /xf0/x93/x97/xaa EGYPTIAN HIEROGLYPH-135EA +<U000135EB> /xf0/x93/x97/xab EGYPTIAN HIEROGLYPH-135EB +<U000135EC> /xf0/x93/x97/xac EGYPTIAN HIEROGLYPH-135EC +<U000135ED> /xf0/x93/x97/xad EGYPTIAN HIEROGLYPH-135ED +<U000135EE> /xf0/x93/x97/xae EGYPTIAN HIEROGLYPH-135EE +<U000135EF> /xf0/x93/x97/xaf EGYPTIAN HIEROGLYPH-135EF +<U000135F0> /xf0/x93/x97/xb0 EGYPTIAN HIEROGLYPH-135F0 +<U000135F1> /xf0/x93/x97/xb1 EGYPTIAN HIEROGLYPH-135F1 +<U000135F2> /xf0/x93/x97/xb2 EGYPTIAN HIEROGLYPH-135F2 +<U000135F3> /xf0/x93/x97/xb3 EGYPTIAN HIEROGLYPH-135F3 +<U000135F4> /xf0/x93/x97/xb4 EGYPTIAN HIEROGLYPH-135F4 +<U000135F5> /xf0/x93/x97/xb5 EGYPTIAN HIEROGLYPH-135F5 +<U000135F6> /xf0/x93/x97/xb6 EGYPTIAN HIEROGLYPH-135F6 +<U000135F7> /xf0/x93/x97/xb7 EGYPTIAN HIEROGLYPH-135F7 +<U000135F8> /xf0/x93/x97/xb8 EGYPTIAN HIEROGLYPH-135F8 +<U000135F9> /xf0/x93/x97/xb9 EGYPTIAN HIEROGLYPH-135F9 +<U000135FA> /xf0/x93/x97/xba EGYPTIAN HIEROGLYPH-135FA +<U000135FB> /xf0/x93/x97/xbb EGYPTIAN HIEROGLYPH-135FB +<U000135FC> /xf0/x93/x97/xbc EGYPTIAN HIEROGLYPH-135FC +<U000135FD> /xf0/x93/x97/xbd EGYPTIAN HIEROGLYPH-135FD +<U000135FE> /xf0/x93/x97/xbe EGYPTIAN HIEROGLYPH-135FE +<U000135FF> /xf0/x93/x97/xbf EGYPTIAN HIEROGLYPH-135FF +<U00013600> /xf0/x93/x98/x80 EGYPTIAN HIEROGLYPH-13600 +<U00013601> /xf0/x93/x98/x81 EGYPTIAN HIEROGLYPH-13601 +<U00013602> /xf0/x93/x98/x82 EGYPTIAN HIEROGLYPH-13602 +<U00013603> /xf0/x93/x98/x83 EGYPTIAN HIEROGLYPH-13603 +<U00013604> /xf0/x93/x98/x84 EGYPTIAN HIEROGLYPH-13604 +<U00013605> /xf0/x93/x98/x85 EGYPTIAN HIEROGLYPH-13605 +<U00013606> /xf0/x93/x98/x86 EGYPTIAN HIEROGLYPH-13606 +<U00013607> /xf0/x93/x98/x87 EGYPTIAN HIEROGLYPH-13607 +<U00013608> /xf0/x93/x98/x88 EGYPTIAN HIEROGLYPH-13608 +<U00013609> /xf0/x93/x98/x89 EGYPTIAN HIEROGLYPH-13609 +<U0001360A> /xf0/x93/x98/x8a EGYPTIAN HIEROGLYPH-1360A +<U0001360B> /xf0/x93/x98/x8b EGYPTIAN HIEROGLYPH-1360B +<U0001360C> /xf0/x93/x98/x8c EGYPTIAN HIEROGLYPH-1360C +<U0001360D> /xf0/x93/x98/x8d EGYPTIAN HIEROGLYPH-1360D +<U0001360E> /xf0/x93/x98/x8e EGYPTIAN HIEROGLYPH-1360E +<U0001360F> /xf0/x93/x98/x8f EGYPTIAN HIEROGLYPH-1360F +<U00013610> /xf0/x93/x98/x90 EGYPTIAN HIEROGLYPH-13610 +<U00013611> /xf0/x93/x98/x91 EGYPTIAN HIEROGLYPH-13611 +<U00013612> /xf0/x93/x98/x92 EGYPTIAN HIEROGLYPH-13612 +<U00013613> /xf0/x93/x98/x93 EGYPTIAN HIEROGLYPH-13613 +<U00013614> /xf0/x93/x98/x94 EGYPTIAN HIEROGLYPH-13614 +<U00013615> /xf0/x93/x98/x95 EGYPTIAN HIEROGLYPH-13615 +<U00013616> /xf0/x93/x98/x96 EGYPTIAN HIEROGLYPH-13616 +<U00013617> /xf0/x93/x98/x97 EGYPTIAN HIEROGLYPH-13617 +<U00013618> /xf0/x93/x98/x98 EGYPTIAN HIEROGLYPH-13618 +<U00013619> /xf0/x93/x98/x99 EGYPTIAN HIEROGLYPH-13619 +<U0001361A> /xf0/x93/x98/x9a EGYPTIAN HIEROGLYPH-1361A +<U0001361B> /xf0/x93/x98/x9b EGYPTIAN HIEROGLYPH-1361B +<U0001361C> /xf0/x93/x98/x9c EGYPTIAN HIEROGLYPH-1361C +<U0001361D> /xf0/x93/x98/x9d EGYPTIAN HIEROGLYPH-1361D +<U0001361E> /xf0/x93/x98/x9e EGYPTIAN HIEROGLYPH-1361E +<U0001361F> /xf0/x93/x98/x9f EGYPTIAN HIEROGLYPH-1361F +<U00013620> /xf0/x93/x98/xa0 EGYPTIAN HIEROGLYPH-13620 +<U00013621> /xf0/x93/x98/xa1 EGYPTIAN HIEROGLYPH-13621 +<U00013622> /xf0/x93/x98/xa2 EGYPTIAN HIEROGLYPH-13622 +<U00013623> /xf0/x93/x98/xa3 EGYPTIAN HIEROGLYPH-13623 +<U00013624> /xf0/x93/x98/xa4 EGYPTIAN HIEROGLYPH-13624 +<U00013625> /xf0/x93/x98/xa5 EGYPTIAN HIEROGLYPH-13625 +<U00013626> /xf0/x93/x98/xa6 EGYPTIAN HIEROGLYPH-13626 +<U00013627> /xf0/x93/x98/xa7 EGYPTIAN HIEROGLYPH-13627 +<U00013628> /xf0/x93/x98/xa8 EGYPTIAN HIEROGLYPH-13628 +<U00013629> /xf0/x93/x98/xa9 EGYPTIAN HIEROGLYPH-13629 +<U0001362A> /xf0/x93/x98/xaa EGYPTIAN HIEROGLYPH-1362A +<U0001362B> /xf0/x93/x98/xab EGYPTIAN HIEROGLYPH-1362B +<U0001362C> /xf0/x93/x98/xac EGYPTIAN HIEROGLYPH-1362C +<U0001362D> /xf0/x93/x98/xad EGYPTIAN HIEROGLYPH-1362D +<U0001362E> /xf0/x93/x98/xae EGYPTIAN HIEROGLYPH-1362E +<U0001362F> /xf0/x93/x98/xaf EGYPTIAN HIEROGLYPH-1362F +<U00013630> /xf0/x93/x98/xb0 EGYPTIAN HIEROGLYPH-13630 +<U00013631> /xf0/x93/x98/xb1 EGYPTIAN HIEROGLYPH-13631 +<U00013632> /xf0/x93/x98/xb2 EGYPTIAN HIEROGLYPH-13632 +<U00013633> /xf0/x93/x98/xb3 EGYPTIAN HIEROGLYPH-13633 +<U00013634> /xf0/x93/x98/xb4 EGYPTIAN HIEROGLYPH-13634 +<U00013635> /xf0/x93/x98/xb5 EGYPTIAN HIEROGLYPH-13635 +<U00013636> /xf0/x93/x98/xb6 EGYPTIAN HIEROGLYPH-13636 +<U00013637> /xf0/x93/x98/xb7 EGYPTIAN HIEROGLYPH-13637 +<U00013638> /xf0/x93/x98/xb8 EGYPTIAN HIEROGLYPH-13638 +<U00013639> /xf0/x93/x98/xb9 EGYPTIAN HIEROGLYPH-13639 +<U0001363A> /xf0/x93/x98/xba EGYPTIAN HIEROGLYPH-1363A +<U0001363B> /xf0/x93/x98/xbb EGYPTIAN HIEROGLYPH-1363B +<U0001363C> /xf0/x93/x98/xbc EGYPTIAN HIEROGLYPH-1363C +<U0001363D> /xf0/x93/x98/xbd EGYPTIAN HIEROGLYPH-1363D +<U0001363E> /xf0/x93/x98/xbe EGYPTIAN HIEROGLYPH-1363E +<U0001363F> /xf0/x93/x98/xbf EGYPTIAN HIEROGLYPH-1363F +<U00013640> /xf0/x93/x99/x80 EGYPTIAN HIEROGLYPH-13640 +<U00013641> /xf0/x93/x99/x81 EGYPTIAN HIEROGLYPH-13641 +<U00013642> /xf0/x93/x99/x82 EGYPTIAN HIEROGLYPH-13642 +<U00013643> /xf0/x93/x99/x83 EGYPTIAN HIEROGLYPH-13643 +<U00013644> /xf0/x93/x99/x84 EGYPTIAN HIEROGLYPH-13644 +<U00013645> /xf0/x93/x99/x85 EGYPTIAN HIEROGLYPH-13645 +<U00013646> /xf0/x93/x99/x86 EGYPTIAN HIEROGLYPH-13646 +<U00013647> /xf0/x93/x99/x87 EGYPTIAN HIEROGLYPH-13647 +<U00013648> /xf0/x93/x99/x88 EGYPTIAN HIEROGLYPH-13648 +<U00013649> /xf0/x93/x99/x89 EGYPTIAN HIEROGLYPH-13649 +<U0001364A> /xf0/x93/x99/x8a EGYPTIAN HIEROGLYPH-1364A +<U0001364B> /xf0/x93/x99/x8b EGYPTIAN HIEROGLYPH-1364B +<U0001364C> /xf0/x93/x99/x8c EGYPTIAN HIEROGLYPH-1364C +<U0001364D> /xf0/x93/x99/x8d EGYPTIAN HIEROGLYPH-1364D +<U0001364E> /xf0/x93/x99/x8e EGYPTIAN HIEROGLYPH-1364E +<U0001364F> /xf0/x93/x99/x8f EGYPTIAN HIEROGLYPH-1364F +<U00013650> /xf0/x93/x99/x90 EGYPTIAN HIEROGLYPH-13650 +<U00013651> /xf0/x93/x99/x91 EGYPTIAN HIEROGLYPH-13651 +<U00013652> /xf0/x93/x99/x92 EGYPTIAN HIEROGLYPH-13652 +<U00013653> /xf0/x93/x99/x93 EGYPTIAN HIEROGLYPH-13653 +<U00013654> /xf0/x93/x99/x94 EGYPTIAN HIEROGLYPH-13654 +<U00013655> /xf0/x93/x99/x95 EGYPTIAN HIEROGLYPH-13655 +<U00013656> /xf0/x93/x99/x96 EGYPTIAN HIEROGLYPH-13656 +<U00013657> /xf0/x93/x99/x97 EGYPTIAN HIEROGLYPH-13657 +<U00013658> /xf0/x93/x99/x98 EGYPTIAN HIEROGLYPH-13658 +<U00013659> /xf0/x93/x99/x99 EGYPTIAN HIEROGLYPH-13659 +<U0001365A> /xf0/x93/x99/x9a EGYPTIAN HIEROGLYPH-1365A +<U0001365B> /xf0/x93/x99/x9b EGYPTIAN HIEROGLYPH-1365B +<U0001365C> /xf0/x93/x99/x9c EGYPTIAN HIEROGLYPH-1365C +<U0001365D> /xf0/x93/x99/x9d EGYPTIAN HIEROGLYPH-1365D +<U0001365E> /xf0/x93/x99/x9e EGYPTIAN HIEROGLYPH-1365E +<U0001365F> /xf0/x93/x99/x9f EGYPTIAN HIEROGLYPH-1365F +<U00013660> /xf0/x93/x99/xa0 EGYPTIAN HIEROGLYPH-13660 +<U00013661> /xf0/x93/x99/xa1 EGYPTIAN HIEROGLYPH-13661 +<U00013662> /xf0/x93/x99/xa2 EGYPTIAN HIEROGLYPH-13662 +<U00013663> /xf0/x93/x99/xa3 EGYPTIAN HIEROGLYPH-13663 +<U00013664> /xf0/x93/x99/xa4 EGYPTIAN HIEROGLYPH-13664 +<U00013665> /xf0/x93/x99/xa5 EGYPTIAN HIEROGLYPH-13665 +<U00013666> /xf0/x93/x99/xa6 EGYPTIAN HIEROGLYPH-13666 +<U00013667> /xf0/x93/x99/xa7 EGYPTIAN HIEROGLYPH-13667 +<U00013668> /xf0/x93/x99/xa8 EGYPTIAN HIEROGLYPH-13668 +<U00013669> /xf0/x93/x99/xa9 EGYPTIAN HIEROGLYPH-13669 +<U0001366A> /xf0/x93/x99/xaa EGYPTIAN HIEROGLYPH-1366A +<U0001366B> /xf0/x93/x99/xab EGYPTIAN HIEROGLYPH-1366B +<U0001366C> /xf0/x93/x99/xac EGYPTIAN HIEROGLYPH-1366C +<U0001366D> /xf0/x93/x99/xad EGYPTIAN HIEROGLYPH-1366D +<U0001366E> /xf0/x93/x99/xae EGYPTIAN HIEROGLYPH-1366E +<U0001366F> /xf0/x93/x99/xaf EGYPTIAN HIEROGLYPH-1366F +<U00013670> /xf0/x93/x99/xb0 EGYPTIAN HIEROGLYPH-13670 +<U00013671> /xf0/x93/x99/xb1 EGYPTIAN HIEROGLYPH-13671 +<U00013672> /xf0/x93/x99/xb2 EGYPTIAN HIEROGLYPH-13672 +<U00013673> /xf0/x93/x99/xb3 EGYPTIAN HIEROGLYPH-13673 +<U00013674> /xf0/x93/x99/xb4 EGYPTIAN HIEROGLYPH-13674 +<U00013675> /xf0/x93/x99/xb5 EGYPTIAN HIEROGLYPH-13675 +<U00013676> /xf0/x93/x99/xb6 EGYPTIAN HIEROGLYPH-13676 +<U00013677> /xf0/x93/x99/xb7 EGYPTIAN HIEROGLYPH-13677 +<U00013678> /xf0/x93/x99/xb8 EGYPTIAN HIEROGLYPH-13678 +<U00013679> /xf0/x93/x99/xb9 EGYPTIAN HIEROGLYPH-13679 +<U0001367A> /xf0/x93/x99/xba EGYPTIAN HIEROGLYPH-1367A +<U0001367B> /xf0/x93/x99/xbb EGYPTIAN HIEROGLYPH-1367B +<U0001367C> /xf0/x93/x99/xbc EGYPTIAN HIEROGLYPH-1367C +<U0001367D> /xf0/x93/x99/xbd EGYPTIAN HIEROGLYPH-1367D +<U0001367E> /xf0/x93/x99/xbe EGYPTIAN HIEROGLYPH-1367E +<U0001367F> /xf0/x93/x99/xbf EGYPTIAN HIEROGLYPH-1367F +<U00013680> /xf0/x93/x9a/x80 EGYPTIAN HIEROGLYPH-13680 +<U00013681> /xf0/x93/x9a/x81 EGYPTIAN HIEROGLYPH-13681 +<U00013682> /xf0/x93/x9a/x82 EGYPTIAN HIEROGLYPH-13682 +<U00013683> /xf0/x93/x9a/x83 EGYPTIAN HIEROGLYPH-13683 +<U00013684> /xf0/x93/x9a/x84 EGYPTIAN HIEROGLYPH-13684 +<U00013685> /xf0/x93/x9a/x85 EGYPTIAN HIEROGLYPH-13685 +<U00013686> /xf0/x93/x9a/x86 EGYPTIAN HIEROGLYPH-13686 +<U00013687> /xf0/x93/x9a/x87 EGYPTIAN HIEROGLYPH-13687 +<U00013688> /xf0/x93/x9a/x88 EGYPTIAN HIEROGLYPH-13688 +<U00013689> /xf0/x93/x9a/x89 EGYPTIAN HIEROGLYPH-13689 +<U0001368A> /xf0/x93/x9a/x8a EGYPTIAN HIEROGLYPH-1368A +<U0001368B> /xf0/x93/x9a/x8b EGYPTIAN HIEROGLYPH-1368B +<U0001368C> /xf0/x93/x9a/x8c EGYPTIAN HIEROGLYPH-1368C +<U0001368D> /xf0/x93/x9a/x8d EGYPTIAN HIEROGLYPH-1368D +<U0001368E> /xf0/x93/x9a/x8e EGYPTIAN HIEROGLYPH-1368E +<U0001368F> /xf0/x93/x9a/x8f EGYPTIAN HIEROGLYPH-1368F +<U00013690> /xf0/x93/x9a/x90 EGYPTIAN HIEROGLYPH-13690 +<U00013691> /xf0/x93/x9a/x91 EGYPTIAN HIEROGLYPH-13691 +<U00013692> /xf0/x93/x9a/x92 EGYPTIAN HIEROGLYPH-13692 +<U00013693> /xf0/x93/x9a/x93 EGYPTIAN HIEROGLYPH-13693 +<U00013694> /xf0/x93/x9a/x94 EGYPTIAN HIEROGLYPH-13694 +<U00013695> /xf0/x93/x9a/x95 EGYPTIAN HIEROGLYPH-13695 +<U00013696> /xf0/x93/x9a/x96 EGYPTIAN HIEROGLYPH-13696 +<U00013697> /xf0/x93/x9a/x97 EGYPTIAN HIEROGLYPH-13697 +<U00013698> /xf0/x93/x9a/x98 EGYPTIAN HIEROGLYPH-13698 +<U00013699> /xf0/x93/x9a/x99 EGYPTIAN HIEROGLYPH-13699 +<U0001369A> /xf0/x93/x9a/x9a EGYPTIAN HIEROGLYPH-1369A +<U0001369B> /xf0/x93/x9a/x9b EGYPTIAN HIEROGLYPH-1369B +<U0001369C> /xf0/x93/x9a/x9c EGYPTIAN HIEROGLYPH-1369C +<U0001369D> /xf0/x93/x9a/x9d EGYPTIAN HIEROGLYPH-1369D +<U0001369E> /xf0/x93/x9a/x9e EGYPTIAN HIEROGLYPH-1369E +<U0001369F> /xf0/x93/x9a/x9f EGYPTIAN HIEROGLYPH-1369F +<U000136A0> /xf0/x93/x9a/xa0 EGYPTIAN HIEROGLYPH-136A0 +<U000136A1> /xf0/x93/x9a/xa1 EGYPTIAN HIEROGLYPH-136A1 +<U000136A2> /xf0/x93/x9a/xa2 EGYPTIAN HIEROGLYPH-136A2 +<U000136A3> /xf0/x93/x9a/xa3 EGYPTIAN HIEROGLYPH-136A3 +<U000136A4> /xf0/x93/x9a/xa4 EGYPTIAN HIEROGLYPH-136A4 +<U000136A5> /xf0/x93/x9a/xa5 EGYPTIAN HIEROGLYPH-136A5 +<U000136A6> /xf0/x93/x9a/xa6 EGYPTIAN HIEROGLYPH-136A6 +<U000136A7> /xf0/x93/x9a/xa7 EGYPTIAN HIEROGLYPH-136A7 +<U000136A8> /xf0/x93/x9a/xa8 EGYPTIAN HIEROGLYPH-136A8 +<U000136A9> /xf0/x93/x9a/xa9 EGYPTIAN HIEROGLYPH-136A9 +<U000136AA> /xf0/x93/x9a/xaa EGYPTIAN HIEROGLYPH-136AA +<U000136AB> /xf0/x93/x9a/xab EGYPTIAN HIEROGLYPH-136AB +<U000136AC> /xf0/x93/x9a/xac EGYPTIAN HIEROGLYPH-136AC +<U000136AD> /xf0/x93/x9a/xad EGYPTIAN HIEROGLYPH-136AD +<U000136AE> /xf0/x93/x9a/xae EGYPTIAN HIEROGLYPH-136AE +<U000136AF> /xf0/x93/x9a/xaf EGYPTIAN HIEROGLYPH-136AF +<U000136B0> /xf0/x93/x9a/xb0 EGYPTIAN HIEROGLYPH-136B0 +<U000136B1> /xf0/x93/x9a/xb1 EGYPTIAN HIEROGLYPH-136B1 +<U000136B2> /xf0/x93/x9a/xb2 EGYPTIAN HIEROGLYPH-136B2 +<U000136B3> /xf0/x93/x9a/xb3 EGYPTIAN HIEROGLYPH-136B3 +<U000136B4> /xf0/x93/x9a/xb4 EGYPTIAN HIEROGLYPH-136B4 +<U000136B5> /xf0/x93/x9a/xb5 EGYPTIAN HIEROGLYPH-136B5 +<U000136B6> /xf0/x93/x9a/xb6 EGYPTIAN HIEROGLYPH-136B6 +<U000136B7> /xf0/x93/x9a/xb7 EGYPTIAN HIEROGLYPH-136B7 +<U000136B8> /xf0/x93/x9a/xb8 EGYPTIAN HIEROGLYPH-136B8 +<U000136B9> /xf0/x93/x9a/xb9 EGYPTIAN HIEROGLYPH-136B9 +<U000136BA> /xf0/x93/x9a/xba EGYPTIAN HIEROGLYPH-136BA +<U000136BB> /xf0/x93/x9a/xbb EGYPTIAN HIEROGLYPH-136BB +<U000136BC> /xf0/x93/x9a/xbc EGYPTIAN HIEROGLYPH-136BC +<U000136BD> /xf0/x93/x9a/xbd EGYPTIAN HIEROGLYPH-136BD +<U000136BE> /xf0/x93/x9a/xbe EGYPTIAN HIEROGLYPH-136BE +<U000136BF> /xf0/x93/x9a/xbf EGYPTIAN HIEROGLYPH-136BF +<U000136C0> /xf0/x93/x9b/x80 EGYPTIAN HIEROGLYPH-136C0 +<U000136C1> /xf0/x93/x9b/x81 EGYPTIAN HIEROGLYPH-136C1 +<U000136C2> /xf0/x93/x9b/x82 EGYPTIAN HIEROGLYPH-136C2 +<U000136C3> /xf0/x93/x9b/x83 EGYPTIAN HIEROGLYPH-136C3 +<U000136C4> /xf0/x93/x9b/x84 EGYPTIAN HIEROGLYPH-136C4 +<U000136C5> /xf0/x93/x9b/x85 EGYPTIAN HIEROGLYPH-136C5 +<U000136C6> /xf0/x93/x9b/x86 EGYPTIAN HIEROGLYPH-136C6 +<U000136C7> /xf0/x93/x9b/x87 EGYPTIAN HIEROGLYPH-136C7 +<U000136C8> /xf0/x93/x9b/x88 EGYPTIAN HIEROGLYPH-136C8 +<U000136C9> /xf0/x93/x9b/x89 EGYPTIAN HIEROGLYPH-136C9 +<U000136CA> /xf0/x93/x9b/x8a EGYPTIAN HIEROGLYPH-136CA +<U000136CB> /xf0/x93/x9b/x8b EGYPTIAN HIEROGLYPH-136CB +<U000136CC> /xf0/x93/x9b/x8c EGYPTIAN HIEROGLYPH-136CC +<U000136CD> /xf0/x93/x9b/x8d EGYPTIAN HIEROGLYPH-136CD +<U000136CE> /xf0/x93/x9b/x8e EGYPTIAN HIEROGLYPH-136CE +<U000136CF> /xf0/x93/x9b/x8f EGYPTIAN HIEROGLYPH-136CF +<U000136D0> /xf0/x93/x9b/x90 EGYPTIAN HIEROGLYPH-136D0 +<U000136D1> /xf0/x93/x9b/x91 EGYPTIAN HIEROGLYPH-136D1 +<U000136D2> /xf0/x93/x9b/x92 EGYPTIAN HIEROGLYPH-136D2 +<U000136D3> /xf0/x93/x9b/x93 EGYPTIAN HIEROGLYPH-136D3 +<U000136D4> /xf0/x93/x9b/x94 EGYPTIAN HIEROGLYPH-136D4 +<U000136D5> /xf0/x93/x9b/x95 EGYPTIAN HIEROGLYPH-136D5 +<U000136D6> /xf0/x93/x9b/x96 EGYPTIAN HIEROGLYPH-136D6 +<U000136D7> /xf0/x93/x9b/x97 EGYPTIAN HIEROGLYPH-136D7 +<U000136D8> /xf0/x93/x9b/x98 EGYPTIAN HIEROGLYPH-136D8 +<U000136D9> /xf0/x93/x9b/x99 EGYPTIAN HIEROGLYPH-136D9 +<U000136DA> /xf0/x93/x9b/x9a EGYPTIAN HIEROGLYPH-136DA +<U000136DB> /xf0/x93/x9b/x9b EGYPTIAN HIEROGLYPH-136DB +<U000136DC> /xf0/x93/x9b/x9c EGYPTIAN HIEROGLYPH-136DC +<U000136DD> /xf0/x93/x9b/x9d EGYPTIAN HIEROGLYPH-136DD +<U000136DE> /xf0/x93/x9b/x9e EGYPTIAN HIEROGLYPH-136DE +<U000136DF> /xf0/x93/x9b/x9f EGYPTIAN HIEROGLYPH-136DF +<U000136E0> /xf0/x93/x9b/xa0 EGYPTIAN HIEROGLYPH-136E0 +<U000136E1> /xf0/x93/x9b/xa1 EGYPTIAN HIEROGLYPH-136E1 +<U000136E2> /xf0/x93/x9b/xa2 EGYPTIAN HIEROGLYPH-136E2 +<U000136E3> /xf0/x93/x9b/xa3 EGYPTIAN HIEROGLYPH-136E3 +<U000136E4> /xf0/x93/x9b/xa4 EGYPTIAN HIEROGLYPH-136E4 +<U000136E5> /xf0/x93/x9b/xa5 EGYPTIAN HIEROGLYPH-136E5 +<U000136E6> /xf0/x93/x9b/xa6 EGYPTIAN HIEROGLYPH-136E6 +<U000136E7> /xf0/x93/x9b/xa7 EGYPTIAN HIEROGLYPH-136E7 +<U000136E8> /xf0/x93/x9b/xa8 EGYPTIAN HIEROGLYPH-136E8 +<U000136E9> /xf0/x93/x9b/xa9 EGYPTIAN HIEROGLYPH-136E9 +<U000136EA> /xf0/x93/x9b/xaa EGYPTIAN HIEROGLYPH-136EA +<U000136EB> /xf0/x93/x9b/xab EGYPTIAN HIEROGLYPH-136EB +<U000136EC> /xf0/x93/x9b/xac EGYPTIAN HIEROGLYPH-136EC +<U000136ED> /xf0/x93/x9b/xad EGYPTIAN HIEROGLYPH-136ED +<U000136EE> /xf0/x93/x9b/xae EGYPTIAN HIEROGLYPH-136EE +<U000136EF> /xf0/x93/x9b/xaf EGYPTIAN HIEROGLYPH-136EF +<U000136F0> /xf0/x93/x9b/xb0 EGYPTIAN HIEROGLYPH-136F0 +<U000136F1> /xf0/x93/x9b/xb1 EGYPTIAN HIEROGLYPH-136F1 +<U000136F2> /xf0/x93/x9b/xb2 EGYPTIAN HIEROGLYPH-136F2 +<U000136F3> /xf0/x93/x9b/xb3 EGYPTIAN HIEROGLYPH-136F3 +<U000136F4> /xf0/x93/x9b/xb4 EGYPTIAN HIEROGLYPH-136F4 +<U000136F5> /xf0/x93/x9b/xb5 EGYPTIAN HIEROGLYPH-136F5 +<U000136F6> /xf0/x93/x9b/xb6 EGYPTIAN HIEROGLYPH-136F6 +<U000136F7> /xf0/x93/x9b/xb7 EGYPTIAN HIEROGLYPH-136F7 +<U000136F8> /xf0/x93/x9b/xb8 EGYPTIAN HIEROGLYPH-136F8 +<U000136F9> /xf0/x93/x9b/xb9 EGYPTIAN HIEROGLYPH-136F9 +<U000136FA> /xf0/x93/x9b/xba EGYPTIAN HIEROGLYPH-136FA +<U000136FB> /xf0/x93/x9b/xbb EGYPTIAN HIEROGLYPH-136FB +<U000136FC> /xf0/x93/x9b/xbc EGYPTIAN HIEROGLYPH-136FC +<U000136FD> /xf0/x93/x9b/xbd EGYPTIAN HIEROGLYPH-136FD +<U000136FE> /xf0/x93/x9b/xbe EGYPTIAN HIEROGLYPH-136FE +<U000136FF> /xf0/x93/x9b/xbf EGYPTIAN HIEROGLYPH-136FF +<U00013700> /xf0/x93/x9c/x80 EGYPTIAN HIEROGLYPH-13700 +<U00013701> /xf0/x93/x9c/x81 EGYPTIAN HIEROGLYPH-13701 +<U00013702> /xf0/x93/x9c/x82 EGYPTIAN HIEROGLYPH-13702 +<U00013703> /xf0/x93/x9c/x83 EGYPTIAN HIEROGLYPH-13703 +<U00013704> /xf0/x93/x9c/x84 EGYPTIAN HIEROGLYPH-13704 +<U00013705> /xf0/x93/x9c/x85 EGYPTIAN HIEROGLYPH-13705 +<U00013706> /xf0/x93/x9c/x86 EGYPTIAN HIEROGLYPH-13706 +<U00013707> /xf0/x93/x9c/x87 EGYPTIAN HIEROGLYPH-13707 +<U00013708> /xf0/x93/x9c/x88 EGYPTIAN HIEROGLYPH-13708 +<U00013709> /xf0/x93/x9c/x89 EGYPTIAN HIEROGLYPH-13709 +<U0001370A> /xf0/x93/x9c/x8a EGYPTIAN HIEROGLYPH-1370A +<U0001370B> /xf0/x93/x9c/x8b EGYPTIAN HIEROGLYPH-1370B +<U0001370C> /xf0/x93/x9c/x8c EGYPTIAN HIEROGLYPH-1370C +<U0001370D> /xf0/x93/x9c/x8d EGYPTIAN HIEROGLYPH-1370D +<U0001370E> /xf0/x93/x9c/x8e EGYPTIAN HIEROGLYPH-1370E +<U0001370F> /xf0/x93/x9c/x8f EGYPTIAN HIEROGLYPH-1370F +<U00013710> /xf0/x93/x9c/x90 EGYPTIAN HIEROGLYPH-13710 +<U00013711> /xf0/x93/x9c/x91 EGYPTIAN HIEROGLYPH-13711 +<U00013712> /xf0/x93/x9c/x92 EGYPTIAN HIEROGLYPH-13712 +<U00013713> /xf0/x93/x9c/x93 EGYPTIAN HIEROGLYPH-13713 +<U00013714> /xf0/x93/x9c/x94 EGYPTIAN HIEROGLYPH-13714 +<U00013715> /xf0/x93/x9c/x95 EGYPTIAN HIEROGLYPH-13715 +<U00013716> /xf0/x93/x9c/x96 EGYPTIAN HIEROGLYPH-13716 +<U00013717> /xf0/x93/x9c/x97 EGYPTIAN HIEROGLYPH-13717 +<U00013718> /xf0/x93/x9c/x98 EGYPTIAN HIEROGLYPH-13718 +<U00013719> /xf0/x93/x9c/x99 EGYPTIAN HIEROGLYPH-13719 +<U0001371A> /xf0/x93/x9c/x9a EGYPTIAN HIEROGLYPH-1371A +<U0001371B> /xf0/x93/x9c/x9b EGYPTIAN HIEROGLYPH-1371B +<U0001371C> /xf0/x93/x9c/x9c EGYPTIAN HIEROGLYPH-1371C +<U0001371D> /xf0/x93/x9c/x9d EGYPTIAN HIEROGLYPH-1371D +<U0001371E> /xf0/x93/x9c/x9e EGYPTIAN HIEROGLYPH-1371E +<U0001371F> /xf0/x93/x9c/x9f EGYPTIAN HIEROGLYPH-1371F +<U00013720> /xf0/x93/x9c/xa0 EGYPTIAN HIEROGLYPH-13720 +<U00013721> /xf0/x93/x9c/xa1 EGYPTIAN HIEROGLYPH-13721 +<U00013722> /xf0/x93/x9c/xa2 EGYPTIAN HIEROGLYPH-13722 +<U00013723> /xf0/x93/x9c/xa3 EGYPTIAN HIEROGLYPH-13723 +<U00013724> /xf0/x93/x9c/xa4 EGYPTIAN HIEROGLYPH-13724 +<U00013725> /xf0/x93/x9c/xa5 EGYPTIAN HIEROGLYPH-13725 +<U00013726> /xf0/x93/x9c/xa6 EGYPTIAN HIEROGLYPH-13726 +<U00013727> /xf0/x93/x9c/xa7 EGYPTIAN HIEROGLYPH-13727 +<U00013728> /xf0/x93/x9c/xa8 EGYPTIAN HIEROGLYPH-13728 +<U00013729> /xf0/x93/x9c/xa9 EGYPTIAN HIEROGLYPH-13729 +<U0001372A> /xf0/x93/x9c/xaa EGYPTIAN HIEROGLYPH-1372A +<U0001372B> /xf0/x93/x9c/xab EGYPTIAN HIEROGLYPH-1372B +<U0001372C> /xf0/x93/x9c/xac EGYPTIAN HIEROGLYPH-1372C +<U0001372D> /xf0/x93/x9c/xad EGYPTIAN HIEROGLYPH-1372D +<U0001372E> /xf0/x93/x9c/xae EGYPTIAN HIEROGLYPH-1372E +<U0001372F> /xf0/x93/x9c/xaf EGYPTIAN HIEROGLYPH-1372F +<U00013730> /xf0/x93/x9c/xb0 EGYPTIAN HIEROGLYPH-13730 +<U00013731> /xf0/x93/x9c/xb1 EGYPTIAN HIEROGLYPH-13731 +<U00013732> /xf0/x93/x9c/xb2 EGYPTIAN HIEROGLYPH-13732 +<U00013733> /xf0/x93/x9c/xb3 EGYPTIAN HIEROGLYPH-13733 +<U00013734> /xf0/x93/x9c/xb4 EGYPTIAN HIEROGLYPH-13734 +<U00013735> /xf0/x93/x9c/xb5 EGYPTIAN HIEROGLYPH-13735 +<U00013736> /xf0/x93/x9c/xb6 EGYPTIAN HIEROGLYPH-13736 +<U00013737> /xf0/x93/x9c/xb7 EGYPTIAN HIEROGLYPH-13737 +<U00013738> /xf0/x93/x9c/xb8 EGYPTIAN HIEROGLYPH-13738 +<U00013739> /xf0/x93/x9c/xb9 EGYPTIAN HIEROGLYPH-13739 +<U0001373A> /xf0/x93/x9c/xba EGYPTIAN HIEROGLYPH-1373A +<U0001373B> /xf0/x93/x9c/xbb EGYPTIAN HIEROGLYPH-1373B +<U0001373C> /xf0/x93/x9c/xbc EGYPTIAN HIEROGLYPH-1373C +<U0001373D> /xf0/x93/x9c/xbd EGYPTIAN HIEROGLYPH-1373D +<U0001373E> /xf0/x93/x9c/xbe EGYPTIAN HIEROGLYPH-1373E +<U0001373F> /xf0/x93/x9c/xbf EGYPTIAN HIEROGLYPH-1373F +<U00013740> /xf0/x93/x9d/x80 EGYPTIAN HIEROGLYPH-13740 +<U00013741> /xf0/x93/x9d/x81 EGYPTIAN HIEROGLYPH-13741 +<U00013742> /xf0/x93/x9d/x82 EGYPTIAN HIEROGLYPH-13742 +<U00013743> /xf0/x93/x9d/x83 EGYPTIAN HIEROGLYPH-13743 +<U00013744> /xf0/x93/x9d/x84 EGYPTIAN HIEROGLYPH-13744 +<U00013745> /xf0/x93/x9d/x85 EGYPTIAN HIEROGLYPH-13745 +<U00013746> /xf0/x93/x9d/x86 EGYPTIAN HIEROGLYPH-13746 +<U00013747> /xf0/x93/x9d/x87 EGYPTIAN HIEROGLYPH-13747 +<U00013748> /xf0/x93/x9d/x88 EGYPTIAN HIEROGLYPH-13748 +<U00013749> /xf0/x93/x9d/x89 EGYPTIAN HIEROGLYPH-13749 +<U0001374A> /xf0/x93/x9d/x8a EGYPTIAN HIEROGLYPH-1374A +<U0001374B> /xf0/x93/x9d/x8b EGYPTIAN HIEROGLYPH-1374B +<U0001374C> /xf0/x93/x9d/x8c EGYPTIAN HIEROGLYPH-1374C +<U0001374D> /xf0/x93/x9d/x8d EGYPTIAN HIEROGLYPH-1374D +<U0001374E> /xf0/x93/x9d/x8e EGYPTIAN HIEROGLYPH-1374E +<U0001374F> /xf0/x93/x9d/x8f EGYPTIAN HIEROGLYPH-1374F +<U00013750> /xf0/x93/x9d/x90 EGYPTIAN HIEROGLYPH-13750 +<U00013751> /xf0/x93/x9d/x91 EGYPTIAN HIEROGLYPH-13751 +<U00013752> /xf0/x93/x9d/x92 EGYPTIAN HIEROGLYPH-13752 +<U00013753> /xf0/x93/x9d/x93 EGYPTIAN HIEROGLYPH-13753 +<U00013754> /xf0/x93/x9d/x94 EGYPTIAN HIEROGLYPH-13754 +<U00013755> /xf0/x93/x9d/x95 EGYPTIAN HIEROGLYPH-13755 +<U00013756> /xf0/x93/x9d/x96 EGYPTIAN HIEROGLYPH-13756 +<U00013757> /xf0/x93/x9d/x97 EGYPTIAN HIEROGLYPH-13757 +<U00013758> /xf0/x93/x9d/x98 EGYPTIAN HIEROGLYPH-13758 +<U00013759> /xf0/x93/x9d/x99 EGYPTIAN HIEROGLYPH-13759 +<U0001375A> /xf0/x93/x9d/x9a EGYPTIAN HIEROGLYPH-1375A +<U0001375B> /xf0/x93/x9d/x9b EGYPTIAN HIEROGLYPH-1375B +<U0001375C> /xf0/x93/x9d/x9c EGYPTIAN HIEROGLYPH-1375C +<U0001375D> /xf0/x93/x9d/x9d EGYPTIAN HIEROGLYPH-1375D +<U0001375E> /xf0/x93/x9d/x9e EGYPTIAN HIEROGLYPH-1375E +<U0001375F> /xf0/x93/x9d/x9f EGYPTIAN HIEROGLYPH-1375F +<U00013760> /xf0/x93/x9d/xa0 EGYPTIAN HIEROGLYPH-13760 +<U00013761> /xf0/x93/x9d/xa1 EGYPTIAN HIEROGLYPH-13761 +<U00013762> /xf0/x93/x9d/xa2 EGYPTIAN HIEROGLYPH-13762 +<U00013763> /xf0/x93/x9d/xa3 EGYPTIAN HIEROGLYPH-13763 +<U00013764> /xf0/x93/x9d/xa4 EGYPTIAN HIEROGLYPH-13764 +<U00013765> /xf0/x93/x9d/xa5 EGYPTIAN HIEROGLYPH-13765 +<U00013766> /xf0/x93/x9d/xa6 EGYPTIAN HIEROGLYPH-13766 +<U00013767> /xf0/x93/x9d/xa7 EGYPTIAN HIEROGLYPH-13767 +<U00013768> /xf0/x93/x9d/xa8 EGYPTIAN HIEROGLYPH-13768 +<U00013769> /xf0/x93/x9d/xa9 EGYPTIAN HIEROGLYPH-13769 +<U0001376A> /xf0/x93/x9d/xaa EGYPTIAN HIEROGLYPH-1376A +<U0001376B> /xf0/x93/x9d/xab EGYPTIAN HIEROGLYPH-1376B +<U0001376C> /xf0/x93/x9d/xac EGYPTIAN HIEROGLYPH-1376C +<U0001376D> /xf0/x93/x9d/xad EGYPTIAN HIEROGLYPH-1376D +<U0001376E> /xf0/x93/x9d/xae EGYPTIAN HIEROGLYPH-1376E +<U0001376F> /xf0/x93/x9d/xaf EGYPTIAN HIEROGLYPH-1376F +<U00013770> /xf0/x93/x9d/xb0 EGYPTIAN HIEROGLYPH-13770 +<U00013771> /xf0/x93/x9d/xb1 EGYPTIAN HIEROGLYPH-13771 +<U00013772> /xf0/x93/x9d/xb2 EGYPTIAN HIEROGLYPH-13772 +<U00013773> /xf0/x93/x9d/xb3 EGYPTIAN HIEROGLYPH-13773 +<U00013774> /xf0/x93/x9d/xb4 EGYPTIAN HIEROGLYPH-13774 +<U00013775> /xf0/x93/x9d/xb5 EGYPTIAN HIEROGLYPH-13775 +<U00013776> /xf0/x93/x9d/xb6 EGYPTIAN HIEROGLYPH-13776 +<U00013777> /xf0/x93/x9d/xb7 EGYPTIAN HIEROGLYPH-13777 +<U00013778> /xf0/x93/x9d/xb8 EGYPTIAN HIEROGLYPH-13778 +<U00013779> /xf0/x93/x9d/xb9 EGYPTIAN HIEROGLYPH-13779 +<U0001377A> /xf0/x93/x9d/xba EGYPTIAN HIEROGLYPH-1377A +<U0001377B> /xf0/x93/x9d/xbb EGYPTIAN HIEROGLYPH-1377B +<U0001377C> /xf0/x93/x9d/xbc EGYPTIAN HIEROGLYPH-1377C +<U0001377D> /xf0/x93/x9d/xbd EGYPTIAN HIEROGLYPH-1377D +<U0001377E> /xf0/x93/x9d/xbe EGYPTIAN HIEROGLYPH-1377E +<U0001377F> /xf0/x93/x9d/xbf EGYPTIAN HIEROGLYPH-1377F +<U00013780> /xf0/x93/x9e/x80 EGYPTIAN HIEROGLYPH-13780 +<U00013781> /xf0/x93/x9e/x81 EGYPTIAN HIEROGLYPH-13781 +<U00013782> /xf0/x93/x9e/x82 EGYPTIAN HIEROGLYPH-13782 +<U00013783> /xf0/x93/x9e/x83 EGYPTIAN HIEROGLYPH-13783 +<U00013784> /xf0/x93/x9e/x84 EGYPTIAN HIEROGLYPH-13784 +<U00013785> /xf0/x93/x9e/x85 EGYPTIAN HIEROGLYPH-13785 +<U00013786> /xf0/x93/x9e/x86 EGYPTIAN HIEROGLYPH-13786 +<U00013787> /xf0/x93/x9e/x87 EGYPTIAN HIEROGLYPH-13787 +<U00013788> /xf0/x93/x9e/x88 EGYPTIAN HIEROGLYPH-13788 +<U00013789> /xf0/x93/x9e/x89 EGYPTIAN HIEROGLYPH-13789 +<U0001378A> /xf0/x93/x9e/x8a EGYPTIAN HIEROGLYPH-1378A +<U0001378B> /xf0/x93/x9e/x8b EGYPTIAN HIEROGLYPH-1378B +<U0001378C> /xf0/x93/x9e/x8c EGYPTIAN HIEROGLYPH-1378C +<U0001378D> /xf0/x93/x9e/x8d EGYPTIAN HIEROGLYPH-1378D +<U0001378E> /xf0/x93/x9e/x8e EGYPTIAN HIEROGLYPH-1378E +<U0001378F> /xf0/x93/x9e/x8f EGYPTIAN HIEROGLYPH-1378F +<U00013790> /xf0/x93/x9e/x90 EGYPTIAN HIEROGLYPH-13790 +<U00013791> /xf0/x93/x9e/x91 EGYPTIAN HIEROGLYPH-13791 +<U00013792> /xf0/x93/x9e/x92 EGYPTIAN HIEROGLYPH-13792 +<U00013793> /xf0/x93/x9e/x93 EGYPTIAN HIEROGLYPH-13793 +<U00013794> /xf0/x93/x9e/x94 EGYPTIAN HIEROGLYPH-13794 +<U00013795> /xf0/x93/x9e/x95 EGYPTIAN HIEROGLYPH-13795 +<U00013796> /xf0/x93/x9e/x96 EGYPTIAN HIEROGLYPH-13796 +<U00013797> /xf0/x93/x9e/x97 EGYPTIAN HIEROGLYPH-13797 +<U00013798> /xf0/x93/x9e/x98 EGYPTIAN HIEROGLYPH-13798 +<U00013799> /xf0/x93/x9e/x99 EGYPTIAN HIEROGLYPH-13799 +<U0001379A> /xf0/x93/x9e/x9a EGYPTIAN HIEROGLYPH-1379A +<U0001379B> /xf0/x93/x9e/x9b EGYPTIAN HIEROGLYPH-1379B +<U0001379C> /xf0/x93/x9e/x9c EGYPTIAN HIEROGLYPH-1379C +<U0001379D> /xf0/x93/x9e/x9d EGYPTIAN HIEROGLYPH-1379D +<U0001379E> /xf0/x93/x9e/x9e EGYPTIAN HIEROGLYPH-1379E +<U0001379F> /xf0/x93/x9e/x9f EGYPTIAN HIEROGLYPH-1379F +<U000137A0> /xf0/x93/x9e/xa0 EGYPTIAN HIEROGLYPH-137A0 +<U000137A1> /xf0/x93/x9e/xa1 EGYPTIAN HIEROGLYPH-137A1 +<U000137A2> /xf0/x93/x9e/xa2 EGYPTIAN HIEROGLYPH-137A2 +<U000137A3> /xf0/x93/x9e/xa3 EGYPTIAN HIEROGLYPH-137A3 +<U000137A4> /xf0/x93/x9e/xa4 EGYPTIAN HIEROGLYPH-137A4 +<U000137A5> /xf0/x93/x9e/xa5 EGYPTIAN HIEROGLYPH-137A5 +<U000137A6> /xf0/x93/x9e/xa6 EGYPTIAN HIEROGLYPH-137A6 +<U000137A7> /xf0/x93/x9e/xa7 EGYPTIAN HIEROGLYPH-137A7 +<U000137A8> /xf0/x93/x9e/xa8 EGYPTIAN HIEROGLYPH-137A8 +<U000137A9> /xf0/x93/x9e/xa9 EGYPTIAN HIEROGLYPH-137A9 +<U000137AA> /xf0/x93/x9e/xaa EGYPTIAN HIEROGLYPH-137AA +<U000137AB> /xf0/x93/x9e/xab EGYPTIAN HIEROGLYPH-137AB +<U000137AC> /xf0/x93/x9e/xac EGYPTIAN HIEROGLYPH-137AC +<U000137AD> /xf0/x93/x9e/xad EGYPTIAN HIEROGLYPH-137AD +<U000137AE> /xf0/x93/x9e/xae EGYPTIAN HIEROGLYPH-137AE +<U000137AF> /xf0/x93/x9e/xaf EGYPTIAN HIEROGLYPH-137AF +<U000137B0> /xf0/x93/x9e/xb0 EGYPTIAN HIEROGLYPH-137B0 +<U000137B1> /xf0/x93/x9e/xb1 EGYPTIAN HIEROGLYPH-137B1 +<U000137B2> /xf0/x93/x9e/xb2 EGYPTIAN HIEROGLYPH-137B2 +<U000137B3> /xf0/x93/x9e/xb3 EGYPTIAN HIEROGLYPH-137B3 +<U000137B4> /xf0/x93/x9e/xb4 EGYPTIAN HIEROGLYPH-137B4 +<U000137B5> /xf0/x93/x9e/xb5 EGYPTIAN HIEROGLYPH-137B5 +<U000137B6> /xf0/x93/x9e/xb6 EGYPTIAN HIEROGLYPH-137B6 +<U000137B7> /xf0/x93/x9e/xb7 EGYPTIAN HIEROGLYPH-137B7 +<U000137B8> /xf0/x93/x9e/xb8 EGYPTIAN HIEROGLYPH-137B8 +<U000137B9> /xf0/x93/x9e/xb9 EGYPTIAN HIEROGLYPH-137B9 +<U000137BA> /xf0/x93/x9e/xba EGYPTIAN HIEROGLYPH-137BA +<U000137BB> /xf0/x93/x9e/xbb EGYPTIAN HIEROGLYPH-137BB +<U000137BC> /xf0/x93/x9e/xbc EGYPTIAN HIEROGLYPH-137BC +<U000137BD> /xf0/x93/x9e/xbd EGYPTIAN HIEROGLYPH-137BD +<U000137BE> /xf0/x93/x9e/xbe EGYPTIAN HIEROGLYPH-137BE +<U000137BF> /xf0/x93/x9e/xbf EGYPTIAN HIEROGLYPH-137BF +<U000137C0> /xf0/x93/x9f/x80 EGYPTIAN HIEROGLYPH-137C0 +<U000137C1> /xf0/x93/x9f/x81 EGYPTIAN HIEROGLYPH-137C1 +<U000137C2> /xf0/x93/x9f/x82 EGYPTIAN HIEROGLYPH-137C2 +<U000137C3> /xf0/x93/x9f/x83 EGYPTIAN HIEROGLYPH-137C3 +<U000137C4> /xf0/x93/x9f/x84 EGYPTIAN HIEROGLYPH-137C4 +<U000137C5> /xf0/x93/x9f/x85 EGYPTIAN HIEROGLYPH-137C5 +<U000137C6> /xf0/x93/x9f/x86 EGYPTIAN HIEROGLYPH-137C6 +<U000137C7> /xf0/x93/x9f/x87 EGYPTIAN HIEROGLYPH-137C7 +<U000137C8> /xf0/x93/x9f/x88 EGYPTIAN HIEROGLYPH-137C8 +<U000137C9> /xf0/x93/x9f/x89 EGYPTIAN HIEROGLYPH-137C9 +<U000137CA> /xf0/x93/x9f/x8a EGYPTIAN HIEROGLYPH-137CA +<U000137CB> /xf0/x93/x9f/x8b EGYPTIAN HIEROGLYPH-137CB +<U000137CC> /xf0/x93/x9f/x8c EGYPTIAN HIEROGLYPH-137CC +<U000137CD> /xf0/x93/x9f/x8d EGYPTIAN HIEROGLYPH-137CD +<U000137CE> /xf0/x93/x9f/x8e EGYPTIAN HIEROGLYPH-137CE +<U000137CF> /xf0/x93/x9f/x8f EGYPTIAN HIEROGLYPH-137CF +<U000137D0> /xf0/x93/x9f/x90 EGYPTIAN HIEROGLYPH-137D0 +<U000137D1> /xf0/x93/x9f/x91 EGYPTIAN HIEROGLYPH-137D1 +<U000137D2> /xf0/x93/x9f/x92 EGYPTIAN HIEROGLYPH-137D2 +<U000137D3> /xf0/x93/x9f/x93 EGYPTIAN HIEROGLYPH-137D3 +<U000137D4> /xf0/x93/x9f/x94 EGYPTIAN HIEROGLYPH-137D4 +<U000137D5> /xf0/x93/x9f/x95 EGYPTIAN HIEROGLYPH-137D5 +<U000137D6> /xf0/x93/x9f/x96 EGYPTIAN HIEROGLYPH-137D6 +<U000137D7> /xf0/x93/x9f/x97 EGYPTIAN HIEROGLYPH-137D7 +<U000137D8> /xf0/x93/x9f/x98 EGYPTIAN HIEROGLYPH-137D8 +<U000137D9> /xf0/x93/x9f/x99 EGYPTIAN HIEROGLYPH-137D9 +<U000137DA> /xf0/x93/x9f/x9a EGYPTIAN HIEROGLYPH-137DA +<U000137DB> /xf0/x93/x9f/x9b EGYPTIAN HIEROGLYPH-137DB +<U000137DC> /xf0/x93/x9f/x9c EGYPTIAN HIEROGLYPH-137DC +<U000137DD> /xf0/x93/x9f/x9d EGYPTIAN HIEROGLYPH-137DD +<U000137DE> /xf0/x93/x9f/x9e EGYPTIAN HIEROGLYPH-137DE +<U000137DF> /xf0/x93/x9f/x9f EGYPTIAN HIEROGLYPH-137DF +<U000137E0> /xf0/x93/x9f/xa0 EGYPTIAN HIEROGLYPH-137E0 +<U000137E1> /xf0/x93/x9f/xa1 EGYPTIAN HIEROGLYPH-137E1 +<U000137E2> /xf0/x93/x9f/xa2 EGYPTIAN HIEROGLYPH-137E2 +<U000137E3> /xf0/x93/x9f/xa3 EGYPTIAN HIEROGLYPH-137E3 +<U000137E4> /xf0/x93/x9f/xa4 EGYPTIAN HIEROGLYPH-137E4 +<U000137E5> /xf0/x93/x9f/xa5 EGYPTIAN HIEROGLYPH-137E5 +<U000137E6> /xf0/x93/x9f/xa6 EGYPTIAN HIEROGLYPH-137E6 +<U000137E7> /xf0/x93/x9f/xa7 EGYPTIAN HIEROGLYPH-137E7 +<U000137E8> /xf0/x93/x9f/xa8 EGYPTIAN HIEROGLYPH-137E8 +<U000137E9> /xf0/x93/x9f/xa9 EGYPTIAN HIEROGLYPH-137E9 +<U000137EA> /xf0/x93/x9f/xaa EGYPTIAN HIEROGLYPH-137EA +<U000137EB> /xf0/x93/x9f/xab EGYPTIAN HIEROGLYPH-137EB +<U000137EC> /xf0/x93/x9f/xac EGYPTIAN HIEROGLYPH-137EC +<U000137ED> /xf0/x93/x9f/xad EGYPTIAN HIEROGLYPH-137ED +<U000137EE> /xf0/x93/x9f/xae EGYPTIAN HIEROGLYPH-137EE +<U000137EF> /xf0/x93/x9f/xaf EGYPTIAN HIEROGLYPH-137EF +<U000137F0> /xf0/x93/x9f/xb0 EGYPTIAN HIEROGLYPH-137F0 +<U000137F1> /xf0/x93/x9f/xb1 EGYPTIAN HIEROGLYPH-137F1 +<U000137F2> /xf0/x93/x9f/xb2 EGYPTIAN HIEROGLYPH-137F2 +<U000137F3> /xf0/x93/x9f/xb3 EGYPTIAN HIEROGLYPH-137F3 +<U000137F4> /xf0/x93/x9f/xb4 EGYPTIAN HIEROGLYPH-137F4 +<U000137F5> /xf0/x93/x9f/xb5 EGYPTIAN HIEROGLYPH-137F5 +<U000137F6> /xf0/x93/x9f/xb6 EGYPTIAN HIEROGLYPH-137F6 +<U000137F7> /xf0/x93/x9f/xb7 EGYPTIAN HIEROGLYPH-137F7 +<U000137F8> /xf0/x93/x9f/xb8 EGYPTIAN HIEROGLYPH-137F8 +<U000137F9> /xf0/x93/x9f/xb9 EGYPTIAN HIEROGLYPH-137F9 +<U000137FA> /xf0/x93/x9f/xba EGYPTIAN HIEROGLYPH-137FA +<U000137FB> /xf0/x93/x9f/xbb EGYPTIAN HIEROGLYPH-137FB +<U000137FC> /xf0/x93/x9f/xbc EGYPTIAN HIEROGLYPH-137FC +<U000137FD> /xf0/x93/x9f/xbd EGYPTIAN HIEROGLYPH-137FD +<U000137FE> /xf0/x93/x9f/xbe EGYPTIAN HIEROGLYPH-137FE +<U000137FF> /xf0/x93/x9f/xbf EGYPTIAN HIEROGLYPH-137FF +<U00013800> /xf0/x93/xa0/x80 EGYPTIAN HIEROGLYPH-13800 +<U00013801> /xf0/x93/xa0/x81 EGYPTIAN HIEROGLYPH-13801 +<U00013802> /xf0/x93/xa0/x82 EGYPTIAN HIEROGLYPH-13802 +<U00013803> /xf0/x93/xa0/x83 EGYPTIAN HIEROGLYPH-13803 +<U00013804> /xf0/x93/xa0/x84 EGYPTIAN HIEROGLYPH-13804 +<U00013805> /xf0/x93/xa0/x85 EGYPTIAN HIEROGLYPH-13805 +<U00013806> /xf0/x93/xa0/x86 EGYPTIAN HIEROGLYPH-13806 +<U00013807> /xf0/x93/xa0/x87 EGYPTIAN HIEROGLYPH-13807 +<U00013808> /xf0/x93/xa0/x88 EGYPTIAN HIEROGLYPH-13808 +<U00013809> /xf0/x93/xa0/x89 EGYPTIAN HIEROGLYPH-13809 +<U0001380A> /xf0/x93/xa0/x8a EGYPTIAN HIEROGLYPH-1380A +<U0001380B> /xf0/x93/xa0/x8b EGYPTIAN HIEROGLYPH-1380B +<U0001380C> /xf0/x93/xa0/x8c EGYPTIAN HIEROGLYPH-1380C +<U0001380D> /xf0/x93/xa0/x8d EGYPTIAN HIEROGLYPH-1380D +<U0001380E> /xf0/x93/xa0/x8e EGYPTIAN HIEROGLYPH-1380E +<U0001380F> /xf0/x93/xa0/x8f EGYPTIAN HIEROGLYPH-1380F +<U00013810> /xf0/x93/xa0/x90 EGYPTIAN HIEROGLYPH-13810 +<U00013811> /xf0/x93/xa0/x91 EGYPTIAN HIEROGLYPH-13811 +<U00013812> /xf0/x93/xa0/x92 EGYPTIAN HIEROGLYPH-13812 +<U00013813> /xf0/x93/xa0/x93 EGYPTIAN HIEROGLYPH-13813 +<U00013814> /xf0/x93/xa0/x94 EGYPTIAN HIEROGLYPH-13814 +<U00013815> /xf0/x93/xa0/x95 EGYPTIAN HIEROGLYPH-13815 +<U00013816> /xf0/x93/xa0/x96 EGYPTIAN HIEROGLYPH-13816 +<U00013817> /xf0/x93/xa0/x97 EGYPTIAN HIEROGLYPH-13817 +<U00013818> /xf0/x93/xa0/x98 EGYPTIAN HIEROGLYPH-13818 +<U00013819> /xf0/x93/xa0/x99 EGYPTIAN HIEROGLYPH-13819 +<U0001381A> /xf0/x93/xa0/x9a EGYPTIAN HIEROGLYPH-1381A +<U0001381B> /xf0/x93/xa0/x9b EGYPTIAN HIEROGLYPH-1381B +<U0001381C> /xf0/x93/xa0/x9c EGYPTIAN HIEROGLYPH-1381C +<U0001381D> /xf0/x93/xa0/x9d EGYPTIAN HIEROGLYPH-1381D +<U0001381E> /xf0/x93/xa0/x9e EGYPTIAN HIEROGLYPH-1381E +<U0001381F> /xf0/x93/xa0/x9f EGYPTIAN HIEROGLYPH-1381F +<U00013820> /xf0/x93/xa0/xa0 EGYPTIAN HIEROGLYPH-13820 +<U00013821> /xf0/x93/xa0/xa1 EGYPTIAN HIEROGLYPH-13821 +<U00013822> /xf0/x93/xa0/xa2 EGYPTIAN HIEROGLYPH-13822 +<U00013823> /xf0/x93/xa0/xa3 EGYPTIAN HIEROGLYPH-13823 +<U00013824> /xf0/x93/xa0/xa4 EGYPTIAN HIEROGLYPH-13824 +<U00013825> /xf0/x93/xa0/xa5 EGYPTIAN HIEROGLYPH-13825 +<U00013826> /xf0/x93/xa0/xa6 EGYPTIAN HIEROGLYPH-13826 +<U00013827> /xf0/x93/xa0/xa7 EGYPTIAN HIEROGLYPH-13827 +<U00013828> /xf0/x93/xa0/xa8 EGYPTIAN HIEROGLYPH-13828 +<U00013829> /xf0/x93/xa0/xa9 EGYPTIAN HIEROGLYPH-13829 +<U0001382A> /xf0/x93/xa0/xaa EGYPTIAN HIEROGLYPH-1382A +<U0001382B> /xf0/x93/xa0/xab EGYPTIAN HIEROGLYPH-1382B +<U0001382C> /xf0/x93/xa0/xac EGYPTIAN HIEROGLYPH-1382C +<U0001382D> /xf0/x93/xa0/xad EGYPTIAN HIEROGLYPH-1382D +<U0001382E> /xf0/x93/xa0/xae EGYPTIAN HIEROGLYPH-1382E +<U0001382F> /xf0/x93/xa0/xaf EGYPTIAN HIEROGLYPH-1382F +<U00013830> /xf0/x93/xa0/xb0 EGYPTIAN HIEROGLYPH-13830 +<U00013831> /xf0/x93/xa0/xb1 EGYPTIAN HIEROGLYPH-13831 +<U00013832> /xf0/x93/xa0/xb2 EGYPTIAN HIEROGLYPH-13832 +<U00013833> /xf0/x93/xa0/xb3 EGYPTIAN HIEROGLYPH-13833 +<U00013834> /xf0/x93/xa0/xb4 EGYPTIAN HIEROGLYPH-13834 +<U00013835> /xf0/x93/xa0/xb5 EGYPTIAN HIEROGLYPH-13835 +<U00013836> /xf0/x93/xa0/xb6 EGYPTIAN HIEROGLYPH-13836 +<U00013837> /xf0/x93/xa0/xb7 EGYPTIAN HIEROGLYPH-13837 +<U00013838> /xf0/x93/xa0/xb8 EGYPTIAN HIEROGLYPH-13838 +<U00013839> /xf0/x93/xa0/xb9 EGYPTIAN HIEROGLYPH-13839 +<U0001383A> /xf0/x93/xa0/xba EGYPTIAN HIEROGLYPH-1383A +<U0001383B> /xf0/x93/xa0/xbb EGYPTIAN HIEROGLYPH-1383B +<U0001383C> /xf0/x93/xa0/xbc EGYPTIAN HIEROGLYPH-1383C +<U0001383D> /xf0/x93/xa0/xbd EGYPTIAN HIEROGLYPH-1383D +<U0001383E> /xf0/x93/xa0/xbe EGYPTIAN HIEROGLYPH-1383E +<U0001383F> /xf0/x93/xa0/xbf EGYPTIAN HIEROGLYPH-1383F +<U00013840> /xf0/x93/xa1/x80 EGYPTIAN HIEROGLYPH-13840 +<U00013841> /xf0/x93/xa1/x81 EGYPTIAN HIEROGLYPH-13841 +<U00013842> /xf0/x93/xa1/x82 EGYPTIAN HIEROGLYPH-13842 +<U00013843> /xf0/x93/xa1/x83 EGYPTIAN HIEROGLYPH-13843 +<U00013844> /xf0/x93/xa1/x84 EGYPTIAN HIEROGLYPH-13844 +<U00013845> /xf0/x93/xa1/x85 EGYPTIAN HIEROGLYPH-13845 +<U00013846> /xf0/x93/xa1/x86 EGYPTIAN HIEROGLYPH-13846 +<U00013847> /xf0/x93/xa1/x87 EGYPTIAN HIEROGLYPH-13847 +<U00013848> /xf0/x93/xa1/x88 EGYPTIAN HIEROGLYPH-13848 +<U00013849> /xf0/x93/xa1/x89 EGYPTIAN HIEROGLYPH-13849 +<U0001384A> /xf0/x93/xa1/x8a EGYPTIAN HIEROGLYPH-1384A +<U0001384B> /xf0/x93/xa1/x8b EGYPTIAN HIEROGLYPH-1384B +<U0001384C> /xf0/x93/xa1/x8c EGYPTIAN HIEROGLYPH-1384C +<U0001384D> /xf0/x93/xa1/x8d EGYPTIAN HIEROGLYPH-1384D +<U0001384E> /xf0/x93/xa1/x8e EGYPTIAN HIEROGLYPH-1384E +<U0001384F> /xf0/x93/xa1/x8f EGYPTIAN HIEROGLYPH-1384F +<U00013850> /xf0/x93/xa1/x90 EGYPTIAN HIEROGLYPH-13850 +<U00013851> /xf0/x93/xa1/x91 EGYPTIAN HIEROGLYPH-13851 +<U00013852> /xf0/x93/xa1/x92 EGYPTIAN HIEROGLYPH-13852 +<U00013853> /xf0/x93/xa1/x93 EGYPTIAN HIEROGLYPH-13853 +<U00013854> /xf0/x93/xa1/x94 EGYPTIAN HIEROGLYPH-13854 +<U00013855> /xf0/x93/xa1/x95 EGYPTIAN HIEROGLYPH-13855 +<U00013856> /xf0/x93/xa1/x96 EGYPTIAN HIEROGLYPH-13856 +<U00013857> /xf0/x93/xa1/x97 EGYPTIAN HIEROGLYPH-13857 +<U00013858> /xf0/x93/xa1/x98 EGYPTIAN HIEROGLYPH-13858 +<U00013859> /xf0/x93/xa1/x99 EGYPTIAN HIEROGLYPH-13859 +<U0001385A> /xf0/x93/xa1/x9a EGYPTIAN HIEROGLYPH-1385A +<U0001385B> /xf0/x93/xa1/x9b EGYPTIAN HIEROGLYPH-1385B +<U0001385C> /xf0/x93/xa1/x9c EGYPTIAN HIEROGLYPH-1385C +<U0001385D> /xf0/x93/xa1/x9d EGYPTIAN HIEROGLYPH-1385D +<U0001385E> /xf0/x93/xa1/x9e EGYPTIAN HIEROGLYPH-1385E +<U0001385F> /xf0/x93/xa1/x9f EGYPTIAN HIEROGLYPH-1385F +<U00013860> /xf0/x93/xa1/xa0 EGYPTIAN HIEROGLYPH-13860 +<U00013861> /xf0/x93/xa1/xa1 EGYPTIAN HIEROGLYPH-13861 +<U00013862> /xf0/x93/xa1/xa2 EGYPTIAN HIEROGLYPH-13862 +<U00013863> /xf0/x93/xa1/xa3 EGYPTIAN HIEROGLYPH-13863 +<U00013864> /xf0/x93/xa1/xa4 EGYPTIAN HIEROGLYPH-13864 +<U00013865> /xf0/x93/xa1/xa5 EGYPTIAN HIEROGLYPH-13865 +<U00013866> /xf0/x93/xa1/xa6 EGYPTIAN HIEROGLYPH-13866 +<U00013867> /xf0/x93/xa1/xa7 EGYPTIAN HIEROGLYPH-13867 +<U00013868> /xf0/x93/xa1/xa8 EGYPTIAN HIEROGLYPH-13868 +<U00013869> /xf0/x93/xa1/xa9 EGYPTIAN HIEROGLYPH-13869 +<U0001386A> /xf0/x93/xa1/xaa EGYPTIAN HIEROGLYPH-1386A +<U0001386B> /xf0/x93/xa1/xab EGYPTIAN HIEROGLYPH-1386B +<U0001386C> /xf0/x93/xa1/xac EGYPTIAN HIEROGLYPH-1386C +<U0001386D> /xf0/x93/xa1/xad EGYPTIAN HIEROGLYPH-1386D +<U0001386E> /xf0/x93/xa1/xae EGYPTIAN HIEROGLYPH-1386E +<U0001386F> /xf0/x93/xa1/xaf EGYPTIAN HIEROGLYPH-1386F +<U00013870> /xf0/x93/xa1/xb0 EGYPTIAN HIEROGLYPH-13870 +<U00013871> /xf0/x93/xa1/xb1 EGYPTIAN HIEROGLYPH-13871 +<U00013872> /xf0/x93/xa1/xb2 EGYPTIAN HIEROGLYPH-13872 +<U00013873> /xf0/x93/xa1/xb3 EGYPTIAN HIEROGLYPH-13873 +<U00013874> /xf0/x93/xa1/xb4 EGYPTIAN HIEROGLYPH-13874 +<U00013875> /xf0/x93/xa1/xb5 EGYPTIAN HIEROGLYPH-13875 +<U00013876> /xf0/x93/xa1/xb6 EGYPTIAN HIEROGLYPH-13876 +<U00013877> /xf0/x93/xa1/xb7 EGYPTIAN HIEROGLYPH-13877 +<U00013878> /xf0/x93/xa1/xb8 EGYPTIAN HIEROGLYPH-13878 +<U00013879> /xf0/x93/xa1/xb9 EGYPTIAN HIEROGLYPH-13879 +<U0001387A> /xf0/x93/xa1/xba EGYPTIAN HIEROGLYPH-1387A +<U0001387B> /xf0/x93/xa1/xbb EGYPTIAN HIEROGLYPH-1387B +<U0001387C> /xf0/x93/xa1/xbc EGYPTIAN HIEROGLYPH-1387C +<U0001387D> /xf0/x93/xa1/xbd EGYPTIAN HIEROGLYPH-1387D +<U0001387E> /xf0/x93/xa1/xbe EGYPTIAN HIEROGLYPH-1387E +<U0001387F> /xf0/x93/xa1/xbf EGYPTIAN HIEROGLYPH-1387F +<U00013880> /xf0/x93/xa2/x80 EGYPTIAN HIEROGLYPH-13880 +<U00013881> /xf0/x93/xa2/x81 EGYPTIAN HIEROGLYPH-13881 +<U00013882> /xf0/x93/xa2/x82 EGYPTIAN HIEROGLYPH-13882 +<U00013883> /xf0/x93/xa2/x83 EGYPTIAN HIEROGLYPH-13883 +<U00013884> /xf0/x93/xa2/x84 EGYPTIAN HIEROGLYPH-13884 +<U00013885> /xf0/x93/xa2/x85 EGYPTIAN HIEROGLYPH-13885 +<U00013886> /xf0/x93/xa2/x86 EGYPTIAN HIEROGLYPH-13886 +<U00013887> /xf0/x93/xa2/x87 EGYPTIAN HIEROGLYPH-13887 +<U00013888> /xf0/x93/xa2/x88 EGYPTIAN HIEROGLYPH-13888 +<U00013889> /xf0/x93/xa2/x89 EGYPTIAN HIEROGLYPH-13889 +<U0001388A> /xf0/x93/xa2/x8a EGYPTIAN HIEROGLYPH-1388A +<U0001388B> /xf0/x93/xa2/x8b EGYPTIAN HIEROGLYPH-1388B +<U0001388C> /xf0/x93/xa2/x8c EGYPTIAN HIEROGLYPH-1388C +<U0001388D> /xf0/x93/xa2/x8d EGYPTIAN HIEROGLYPH-1388D +<U0001388E> /xf0/x93/xa2/x8e EGYPTIAN HIEROGLYPH-1388E +<U0001388F> /xf0/x93/xa2/x8f EGYPTIAN HIEROGLYPH-1388F +<U00013890> /xf0/x93/xa2/x90 EGYPTIAN HIEROGLYPH-13890 +<U00013891> /xf0/x93/xa2/x91 EGYPTIAN HIEROGLYPH-13891 +<U00013892> /xf0/x93/xa2/x92 EGYPTIAN HIEROGLYPH-13892 +<U00013893> /xf0/x93/xa2/x93 EGYPTIAN HIEROGLYPH-13893 +<U00013894> /xf0/x93/xa2/x94 EGYPTIAN HIEROGLYPH-13894 +<U00013895> /xf0/x93/xa2/x95 EGYPTIAN HIEROGLYPH-13895 +<U00013896> /xf0/x93/xa2/x96 EGYPTIAN HIEROGLYPH-13896 +<U00013897> /xf0/x93/xa2/x97 EGYPTIAN HIEROGLYPH-13897 +<U00013898> /xf0/x93/xa2/x98 EGYPTIAN HIEROGLYPH-13898 +<U00013899> /xf0/x93/xa2/x99 EGYPTIAN HIEROGLYPH-13899 +<U0001389A> /xf0/x93/xa2/x9a EGYPTIAN HIEROGLYPH-1389A +<U0001389B> /xf0/x93/xa2/x9b EGYPTIAN HIEROGLYPH-1389B +<U0001389C> /xf0/x93/xa2/x9c EGYPTIAN HIEROGLYPH-1389C +<U0001389D> /xf0/x93/xa2/x9d EGYPTIAN HIEROGLYPH-1389D +<U0001389E> /xf0/x93/xa2/x9e EGYPTIAN HIEROGLYPH-1389E +<U0001389F> /xf0/x93/xa2/x9f EGYPTIAN HIEROGLYPH-1389F +<U000138A0> /xf0/x93/xa2/xa0 EGYPTIAN HIEROGLYPH-138A0 +<U000138A1> /xf0/x93/xa2/xa1 EGYPTIAN HIEROGLYPH-138A1 +<U000138A2> /xf0/x93/xa2/xa2 EGYPTIAN HIEROGLYPH-138A2 +<U000138A3> /xf0/x93/xa2/xa3 EGYPTIAN HIEROGLYPH-138A3 +<U000138A4> /xf0/x93/xa2/xa4 EGYPTIAN HIEROGLYPH-138A4 +<U000138A5> /xf0/x93/xa2/xa5 EGYPTIAN HIEROGLYPH-138A5 +<U000138A6> /xf0/x93/xa2/xa6 EGYPTIAN HIEROGLYPH-138A6 +<U000138A7> /xf0/x93/xa2/xa7 EGYPTIAN HIEROGLYPH-138A7 +<U000138A8> /xf0/x93/xa2/xa8 EGYPTIAN HIEROGLYPH-138A8 +<U000138A9> /xf0/x93/xa2/xa9 EGYPTIAN HIEROGLYPH-138A9 +<U000138AA> /xf0/x93/xa2/xaa EGYPTIAN HIEROGLYPH-138AA +<U000138AB> /xf0/x93/xa2/xab EGYPTIAN HIEROGLYPH-138AB +<U000138AC> /xf0/x93/xa2/xac EGYPTIAN HIEROGLYPH-138AC +<U000138AD> /xf0/x93/xa2/xad EGYPTIAN HIEROGLYPH-138AD +<U000138AE> /xf0/x93/xa2/xae EGYPTIAN HIEROGLYPH-138AE +<U000138AF> /xf0/x93/xa2/xaf EGYPTIAN HIEROGLYPH-138AF +<U000138B0> /xf0/x93/xa2/xb0 EGYPTIAN HIEROGLYPH-138B0 +<U000138B1> /xf0/x93/xa2/xb1 EGYPTIAN HIEROGLYPH-138B1 +<U000138B2> /xf0/x93/xa2/xb2 EGYPTIAN HIEROGLYPH-138B2 +<U000138B3> /xf0/x93/xa2/xb3 EGYPTIAN HIEROGLYPH-138B3 +<U000138B4> /xf0/x93/xa2/xb4 EGYPTIAN HIEROGLYPH-138B4 +<U000138B5> /xf0/x93/xa2/xb5 EGYPTIAN HIEROGLYPH-138B5 +<U000138B6> /xf0/x93/xa2/xb6 EGYPTIAN HIEROGLYPH-138B6 +<U000138B7> /xf0/x93/xa2/xb7 EGYPTIAN HIEROGLYPH-138B7 +<U000138B8> /xf0/x93/xa2/xb8 EGYPTIAN HIEROGLYPH-138B8 +<U000138B9> /xf0/x93/xa2/xb9 EGYPTIAN HIEROGLYPH-138B9 +<U000138BA> /xf0/x93/xa2/xba EGYPTIAN HIEROGLYPH-138BA +<U000138BB> /xf0/x93/xa2/xbb EGYPTIAN HIEROGLYPH-138BB +<U000138BC> /xf0/x93/xa2/xbc EGYPTIAN HIEROGLYPH-138BC +<U000138BD> /xf0/x93/xa2/xbd EGYPTIAN HIEROGLYPH-138BD +<U000138BE> /xf0/x93/xa2/xbe EGYPTIAN HIEROGLYPH-138BE +<U000138BF> /xf0/x93/xa2/xbf EGYPTIAN HIEROGLYPH-138BF +<U000138C0> /xf0/x93/xa3/x80 EGYPTIAN HIEROGLYPH-138C0 +<U000138C1> /xf0/x93/xa3/x81 EGYPTIAN HIEROGLYPH-138C1 +<U000138C2> /xf0/x93/xa3/x82 EGYPTIAN HIEROGLYPH-138C2 +<U000138C3> /xf0/x93/xa3/x83 EGYPTIAN HIEROGLYPH-138C3 +<U000138C4> /xf0/x93/xa3/x84 EGYPTIAN HIEROGLYPH-138C4 +<U000138C5> /xf0/x93/xa3/x85 EGYPTIAN HIEROGLYPH-138C5 +<U000138C6> /xf0/x93/xa3/x86 EGYPTIAN HIEROGLYPH-138C6 +<U000138C7> /xf0/x93/xa3/x87 EGYPTIAN HIEROGLYPH-138C7 +<U000138C8> /xf0/x93/xa3/x88 EGYPTIAN HIEROGLYPH-138C8 +<U000138C9> /xf0/x93/xa3/x89 EGYPTIAN HIEROGLYPH-138C9 +<U000138CA> /xf0/x93/xa3/x8a EGYPTIAN HIEROGLYPH-138CA +<U000138CB> /xf0/x93/xa3/x8b EGYPTIAN HIEROGLYPH-138CB +<U000138CC> /xf0/x93/xa3/x8c EGYPTIAN HIEROGLYPH-138CC +<U000138CD> /xf0/x93/xa3/x8d EGYPTIAN HIEROGLYPH-138CD +<U000138CE> /xf0/x93/xa3/x8e EGYPTIAN HIEROGLYPH-138CE +<U000138CF> /xf0/x93/xa3/x8f EGYPTIAN HIEROGLYPH-138CF +<U000138D0> /xf0/x93/xa3/x90 EGYPTIAN HIEROGLYPH-138D0 +<U000138D1> /xf0/x93/xa3/x91 EGYPTIAN HIEROGLYPH-138D1 +<U000138D2> /xf0/x93/xa3/x92 EGYPTIAN HIEROGLYPH-138D2 +<U000138D3> /xf0/x93/xa3/x93 EGYPTIAN HIEROGLYPH-138D3 +<U000138D4> /xf0/x93/xa3/x94 EGYPTIAN HIEROGLYPH-138D4 +<U000138D5> /xf0/x93/xa3/x95 EGYPTIAN HIEROGLYPH-138D5 +<U000138D6> /xf0/x93/xa3/x96 EGYPTIAN HIEROGLYPH-138D6 +<U000138D7> /xf0/x93/xa3/x97 EGYPTIAN HIEROGLYPH-138D7 +<U000138D8> /xf0/x93/xa3/x98 EGYPTIAN HIEROGLYPH-138D8 +<U000138D9> /xf0/x93/xa3/x99 EGYPTIAN HIEROGLYPH-138D9 +<U000138DA> /xf0/x93/xa3/x9a EGYPTIAN HIEROGLYPH-138DA +<U000138DB> /xf0/x93/xa3/x9b EGYPTIAN HIEROGLYPH-138DB +<U000138DC> /xf0/x93/xa3/x9c EGYPTIAN HIEROGLYPH-138DC +<U000138DD> /xf0/x93/xa3/x9d EGYPTIAN HIEROGLYPH-138DD +<U000138DE> /xf0/x93/xa3/x9e EGYPTIAN HIEROGLYPH-138DE +<U000138DF> /xf0/x93/xa3/x9f EGYPTIAN HIEROGLYPH-138DF +<U000138E0> /xf0/x93/xa3/xa0 EGYPTIAN HIEROGLYPH-138E0 +<U000138E1> /xf0/x93/xa3/xa1 EGYPTIAN HIEROGLYPH-138E1 +<U000138E2> /xf0/x93/xa3/xa2 EGYPTIAN HIEROGLYPH-138E2 +<U000138E3> /xf0/x93/xa3/xa3 EGYPTIAN HIEROGLYPH-138E3 +<U000138E4> /xf0/x93/xa3/xa4 EGYPTIAN HIEROGLYPH-138E4 +<U000138E5> /xf0/x93/xa3/xa5 EGYPTIAN HIEROGLYPH-138E5 +<U000138E6> /xf0/x93/xa3/xa6 EGYPTIAN HIEROGLYPH-138E6 +<U000138E7> /xf0/x93/xa3/xa7 EGYPTIAN HIEROGLYPH-138E7 +<U000138E8> /xf0/x93/xa3/xa8 EGYPTIAN HIEROGLYPH-138E8 +<U000138E9> /xf0/x93/xa3/xa9 EGYPTIAN HIEROGLYPH-138E9 +<U000138EA> /xf0/x93/xa3/xaa EGYPTIAN HIEROGLYPH-138EA +<U000138EB> /xf0/x93/xa3/xab EGYPTIAN HIEROGLYPH-138EB +<U000138EC> /xf0/x93/xa3/xac EGYPTIAN HIEROGLYPH-138EC +<U000138ED> /xf0/x93/xa3/xad EGYPTIAN HIEROGLYPH-138ED +<U000138EE> /xf0/x93/xa3/xae EGYPTIAN HIEROGLYPH-138EE +<U000138EF> /xf0/x93/xa3/xaf EGYPTIAN HIEROGLYPH-138EF +<U000138F0> /xf0/x93/xa3/xb0 EGYPTIAN HIEROGLYPH-138F0 +<U000138F1> /xf0/x93/xa3/xb1 EGYPTIAN HIEROGLYPH-138F1 +<U000138F2> /xf0/x93/xa3/xb2 EGYPTIAN HIEROGLYPH-138F2 +<U000138F3> /xf0/x93/xa3/xb3 EGYPTIAN HIEROGLYPH-138F3 +<U000138F4> /xf0/x93/xa3/xb4 EGYPTIAN HIEROGLYPH-138F4 +<U000138F5> /xf0/x93/xa3/xb5 EGYPTIAN HIEROGLYPH-138F5 +<U000138F6> /xf0/x93/xa3/xb6 EGYPTIAN HIEROGLYPH-138F6 +<U000138F7> /xf0/x93/xa3/xb7 EGYPTIAN HIEROGLYPH-138F7 +<U000138F8> /xf0/x93/xa3/xb8 EGYPTIAN HIEROGLYPH-138F8 +<U000138F9> /xf0/x93/xa3/xb9 EGYPTIAN HIEROGLYPH-138F9 +<U000138FA> /xf0/x93/xa3/xba EGYPTIAN HIEROGLYPH-138FA +<U000138FB> /xf0/x93/xa3/xbb EGYPTIAN HIEROGLYPH-138FB +<U000138FC> /xf0/x93/xa3/xbc EGYPTIAN HIEROGLYPH-138FC +<U000138FD> /xf0/x93/xa3/xbd EGYPTIAN HIEROGLYPH-138FD +<U000138FE> /xf0/x93/xa3/xbe EGYPTIAN HIEROGLYPH-138FE +<U000138FF> /xf0/x93/xa3/xbf EGYPTIAN HIEROGLYPH-138FF +<U00013900> /xf0/x93/xa4/x80 EGYPTIAN HIEROGLYPH-13900 +<U00013901> /xf0/x93/xa4/x81 EGYPTIAN HIEROGLYPH-13901 +<U00013902> /xf0/x93/xa4/x82 EGYPTIAN HIEROGLYPH-13902 +<U00013903> /xf0/x93/xa4/x83 EGYPTIAN HIEROGLYPH-13903 +<U00013904> /xf0/x93/xa4/x84 EGYPTIAN HIEROGLYPH-13904 +<U00013905> /xf0/x93/xa4/x85 EGYPTIAN HIEROGLYPH-13905 +<U00013906> /xf0/x93/xa4/x86 EGYPTIAN HIEROGLYPH-13906 +<U00013907> /xf0/x93/xa4/x87 EGYPTIAN HIEROGLYPH-13907 +<U00013908> /xf0/x93/xa4/x88 EGYPTIAN HIEROGLYPH-13908 +<U00013909> /xf0/x93/xa4/x89 EGYPTIAN HIEROGLYPH-13909 +<U0001390A> /xf0/x93/xa4/x8a EGYPTIAN HIEROGLYPH-1390A +<U0001390B> /xf0/x93/xa4/x8b EGYPTIAN HIEROGLYPH-1390B +<U0001390C> /xf0/x93/xa4/x8c EGYPTIAN HIEROGLYPH-1390C +<U0001390D> /xf0/x93/xa4/x8d EGYPTIAN HIEROGLYPH-1390D +<U0001390E> /xf0/x93/xa4/x8e EGYPTIAN HIEROGLYPH-1390E +<U0001390F> /xf0/x93/xa4/x8f EGYPTIAN HIEROGLYPH-1390F +<U00013910> /xf0/x93/xa4/x90 EGYPTIAN HIEROGLYPH-13910 +<U00013911> /xf0/x93/xa4/x91 EGYPTIAN HIEROGLYPH-13911 +<U00013912> /xf0/x93/xa4/x92 EGYPTIAN HIEROGLYPH-13912 +<U00013913> /xf0/x93/xa4/x93 EGYPTIAN HIEROGLYPH-13913 +<U00013914> /xf0/x93/xa4/x94 EGYPTIAN HIEROGLYPH-13914 +<U00013915> /xf0/x93/xa4/x95 EGYPTIAN HIEROGLYPH-13915 +<U00013916> /xf0/x93/xa4/x96 EGYPTIAN HIEROGLYPH-13916 +<U00013917> /xf0/x93/xa4/x97 EGYPTIAN HIEROGLYPH-13917 +<U00013918> /xf0/x93/xa4/x98 EGYPTIAN HIEROGLYPH-13918 +<U00013919> /xf0/x93/xa4/x99 EGYPTIAN HIEROGLYPH-13919 +<U0001391A> /xf0/x93/xa4/x9a EGYPTIAN HIEROGLYPH-1391A +<U0001391B> /xf0/x93/xa4/x9b EGYPTIAN HIEROGLYPH-1391B +<U0001391C> /xf0/x93/xa4/x9c EGYPTIAN HIEROGLYPH-1391C +<U0001391D> /xf0/x93/xa4/x9d EGYPTIAN HIEROGLYPH-1391D +<U0001391E> /xf0/x93/xa4/x9e EGYPTIAN HIEROGLYPH-1391E +<U0001391F> /xf0/x93/xa4/x9f EGYPTIAN HIEROGLYPH-1391F +<U00013920> /xf0/x93/xa4/xa0 EGYPTIAN HIEROGLYPH-13920 +<U00013921> /xf0/x93/xa4/xa1 EGYPTIAN HIEROGLYPH-13921 +<U00013922> /xf0/x93/xa4/xa2 EGYPTIAN HIEROGLYPH-13922 +<U00013923> /xf0/x93/xa4/xa3 EGYPTIAN HIEROGLYPH-13923 +<U00013924> /xf0/x93/xa4/xa4 EGYPTIAN HIEROGLYPH-13924 +<U00013925> /xf0/x93/xa4/xa5 EGYPTIAN HIEROGLYPH-13925 +<U00013926> /xf0/x93/xa4/xa6 EGYPTIAN HIEROGLYPH-13926 +<U00013927> /xf0/x93/xa4/xa7 EGYPTIAN HIEROGLYPH-13927 +<U00013928> /xf0/x93/xa4/xa8 EGYPTIAN HIEROGLYPH-13928 +<U00013929> /xf0/x93/xa4/xa9 EGYPTIAN HIEROGLYPH-13929 +<U0001392A> /xf0/x93/xa4/xaa EGYPTIAN HIEROGLYPH-1392A +<U0001392B> /xf0/x93/xa4/xab EGYPTIAN HIEROGLYPH-1392B +<U0001392C> /xf0/x93/xa4/xac EGYPTIAN HIEROGLYPH-1392C +<U0001392D> /xf0/x93/xa4/xad EGYPTIAN HIEROGLYPH-1392D +<U0001392E> /xf0/x93/xa4/xae EGYPTIAN HIEROGLYPH-1392E +<U0001392F> /xf0/x93/xa4/xaf EGYPTIAN HIEROGLYPH-1392F +<U00013930> /xf0/x93/xa4/xb0 EGYPTIAN HIEROGLYPH-13930 +<U00013931> /xf0/x93/xa4/xb1 EGYPTIAN HIEROGLYPH-13931 +<U00013932> /xf0/x93/xa4/xb2 EGYPTIAN HIEROGLYPH-13932 +<U00013933> /xf0/x93/xa4/xb3 EGYPTIAN HIEROGLYPH-13933 +<U00013934> /xf0/x93/xa4/xb4 EGYPTIAN HIEROGLYPH-13934 +<U00013935> /xf0/x93/xa4/xb5 EGYPTIAN HIEROGLYPH-13935 +<U00013936> /xf0/x93/xa4/xb6 EGYPTIAN HIEROGLYPH-13936 +<U00013937> /xf0/x93/xa4/xb7 EGYPTIAN HIEROGLYPH-13937 +<U00013938> /xf0/x93/xa4/xb8 EGYPTIAN HIEROGLYPH-13938 +<U00013939> /xf0/x93/xa4/xb9 EGYPTIAN HIEROGLYPH-13939 +<U0001393A> /xf0/x93/xa4/xba EGYPTIAN HIEROGLYPH-1393A +<U0001393B> /xf0/x93/xa4/xbb EGYPTIAN HIEROGLYPH-1393B +<U0001393C> /xf0/x93/xa4/xbc EGYPTIAN HIEROGLYPH-1393C +<U0001393D> /xf0/x93/xa4/xbd EGYPTIAN HIEROGLYPH-1393D +<U0001393E> /xf0/x93/xa4/xbe EGYPTIAN HIEROGLYPH-1393E +<U0001393F> /xf0/x93/xa4/xbf EGYPTIAN HIEROGLYPH-1393F +<U00013940> /xf0/x93/xa5/x80 EGYPTIAN HIEROGLYPH-13940 +<U00013941> /xf0/x93/xa5/x81 EGYPTIAN HIEROGLYPH-13941 +<U00013942> /xf0/x93/xa5/x82 EGYPTIAN HIEROGLYPH-13942 +<U00013943> /xf0/x93/xa5/x83 EGYPTIAN HIEROGLYPH-13943 +<U00013944> /xf0/x93/xa5/x84 EGYPTIAN HIEROGLYPH-13944 +<U00013945> /xf0/x93/xa5/x85 EGYPTIAN HIEROGLYPH-13945 +<U00013946> /xf0/x93/xa5/x86 EGYPTIAN HIEROGLYPH-13946 +<U00013947> /xf0/x93/xa5/x87 EGYPTIAN HIEROGLYPH-13947 +<U00013948> /xf0/x93/xa5/x88 EGYPTIAN HIEROGLYPH-13948 +<U00013949> /xf0/x93/xa5/x89 EGYPTIAN HIEROGLYPH-13949 +<U0001394A> /xf0/x93/xa5/x8a EGYPTIAN HIEROGLYPH-1394A +<U0001394B> /xf0/x93/xa5/x8b EGYPTIAN HIEROGLYPH-1394B +<U0001394C> /xf0/x93/xa5/x8c EGYPTIAN HIEROGLYPH-1394C +<U0001394D> /xf0/x93/xa5/x8d EGYPTIAN HIEROGLYPH-1394D +<U0001394E> /xf0/x93/xa5/x8e EGYPTIAN HIEROGLYPH-1394E +<U0001394F> /xf0/x93/xa5/x8f EGYPTIAN HIEROGLYPH-1394F +<U00013950> /xf0/x93/xa5/x90 EGYPTIAN HIEROGLYPH-13950 +<U00013951> /xf0/x93/xa5/x91 EGYPTIAN HIEROGLYPH-13951 +<U00013952> /xf0/x93/xa5/x92 EGYPTIAN HIEROGLYPH-13952 +<U00013953> /xf0/x93/xa5/x93 EGYPTIAN HIEROGLYPH-13953 +<U00013954> /xf0/x93/xa5/x94 EGYPTIAN HIEROGLYPH-13954 +<U00013955> /xf0/x93/xa5/x95 EGYPTIAN HIEROGLYPH-13955 +<U00013956> /xf0/x93/xa5/x96 EGYPTIAN HIEROGLYPH-13956 +<U00013957> /xf0/x93/xa5/x97 EGYPTIAN HIEROGLYPH-13957 +<U00013958> /xf0/x93/xa5/x98 EGYPTIAN HIEROGLYPH-13958 +<U00013959> /xf0/x93/xa5/x99 EGYPTIAN HIEROGLYPH-13959 +<U0001395A> /xf0/x93/xa5/x9a EGYPTIAN HIEROGLYPH-1395A +<U0001395B> /xf0/x93/xa5/x9b EGYPTIAN HIEROGLYPH-1395B +<U0001395C> /xf0/x93/xa5/x9c EGYPTIAN HIEROGLYPH-1395C +<U0001395D> /xf0/x93/xa5/x9d EGYPTIAN HIEROGLYPH-1395D +<U0001395E> /xf0/x93/xa5/x9e EGYPTIAN HIEROGLYPH-1395E +<U0001395F> /xf0/x93/xa5/x9f EGYPTIAN HIEROGLYPH-1395F +<U00013960> /xf0/x93/xa5/xa0 EGYPTIAN HIEROGLYPH-13960 +<U00013961> /xf0/x93/xa5/xa1 EGYPTIAN HIEROGLYPH-13961 +<U00013962> /xf0/x93/xa5/xa2 EGYPTIAN HIEROGLYPH-13962 +<U00013963> /xf0/x93/xa5/xa3 EGYPTIAN HIEROGLYPH-13963 +<U00013964> /xf0/x93/xa5/xa4 EGYPTIAN HIEROGLYPH-13964 +<U00013965> /xf0/x93/xa5/xa5 EGYPTIAN HIEROGLYPH-13965 +<U00013966> /xf0/x93/xa5/xa6 EGYPTIAN HIEROGLYPH-13966 +<U00013967> /xf0/x93/xa5/xa7 EGYPTIAN HIEROGLYPH-13967 +<U00013968> /xf0/x93/xa5/xa8 EGYPTIAN HIEROGLYPH-13968 +<U00013969> /xf0/x93/xa5/xa9 EGYPTIAN HIEROGLYPH-13969 +<U0001396A> /xf0/x93/xa5/xaa EGYPTIAN HIEROGLYPH-1396A +<U0001396B> /xf0/x93/xa5/xab EGYPTIAN HIEROGLYPH-1396B +<U0001396C> /xf0/x93/xa5/xac EGYPTIAN HIEROGLYPH-1396C +<U0001396D> /xf0/x93/xa5/xad EGYPTIAN HIEROGLYPH-1396D +<U0001396E> /xf0/x93/xa5/xae EGYPTIAN HIEROGLYPH-1396E +<U0001396F> /xf0/x93/xa5/xaf EGYPTIAN HIEROGLYPH-1396F +<U00013970> /xf0/x93/xa5/xb0 EGYPTIAN HIEROGLYPH-13970 +<U00013971> /xf0/x93/xa5/xb1 EGYPTIAN HIEROGLYPH-13971 +<U00013972> /xf0/x93/xa5/xb2 EGYPTIAN HIEROGLYPH-13972 +<U00013973> /xf0/x93/xa5/xb3 EGYPTIAN HIEROGLYPH-13973 +<U00013974> /xf0/x93/xa5/xb4 EGYPTIAN HIEROGLYPH-13974 +<U00013975> /xf0/x93/xa5/xb5 EGYPTIAN HIEROGLYPH-13975 +<U00013976> /xf0/x93/xa5/xb6 EGYPTIAN HIEROGLYPH-13976 +<U00013977> /xf0/x93/xa5/xb7 EGYPTIAN HIEROGLYPH-13977 +<U00013978> /xf0/x93/xa5/xb8 EGYPTIAN HIEROGLYPH-13978 +<U00013979> /xf0/x93/xa5/xb9 EGYPTIAN HIEROGLYPH-13979 +<U0001397A> /xf0/x93/xa5/xba EGYPTIAN HIEROGLYPH-1397A +<U0001397B> /xf0/x93/xa5/xbb EGYPTIAN HIEROGLYPH-1397B +<U0001397C> /xf0/x93/xa5/xbc EGYPTIAN HIEROGLYPH-1397C +<U0001397D> /xf0/x93/xa5/xbd EGYPTIAN HIEROGLYPH-1397D +<U0001397E> /xf0/x93/xa5/xbe EGYPTIAN HIEROGLYPH-1397E +<U0001397F> /xf0/x93/xa5/xbf EGYPTIAN HIEROGLYPH-1397F +<U00013980> /xf0/x93/xa6/x80 EGYPTIAN HIEROGLYPH-13980 +<U00013981> /xf0/x93/xa6/x81 EGYPTIAN HIEROGLYPH-13981 +<U00013982> /xf0/x93/xa6/x82 EGYPTIAN HIEROGLYPH-13982 +<U00013983> /xf0/x93/xa6/x83 EGYPTIAN HIEROGLYPH-13983 +<U00013984> /xf0/x93/xa6/x84 EGYPTIAN HIEROGLYPH-13984 +<U00013985> /xf0/x93/xa6/x85 EGYPTIAN HIEROGLYPH-13985 +<U00013986> /xf0/x93/xa6/x86 EGYPTIAN HIEROGLYPH-13986 +<U00013987> /xf0/x93/xa6/x87 EGYPTIAN HIEROGLYPH-13987 +<U00013988> /xf0/x93/xa6/x88 EGYPTIAN HIEROGLYPH-13988 +<U00013989> /xf0/x93/xa6/x89 EGYPTIAN HIEROGLYPH-13989 +<U0001398A> /xf0/x93/xa6/x8a EGYPTIAN HIEROGLYPH-1398A +<U0001398B> /xf0/x93/xa6/x8b EGYPTIAN HIEROGLYPH-1398B +<U0001398C> /xf0/x93/xa6/x8c EGYPTIAN HIEROGLYPH-1398C +<U0001398D> /xf0/x93/xa6/x8d EGYPTIAN HIEROGLYPH-1398D +<U0001398E> /xf0/x93/xa6/x8e EGYPTIAN HIEROGLYPH-1398E +<U0001398F> /xf0/x93/xa6/x8f EGYPTIAN HIEROGLYPH-1398F +<U00013990> /xf0/x93/xa6/x90 EGYPTIAN HIEROGLYPH-13990 +<U00013991> /xf0/x93/xa6/x91 EGYPTIAN HIEROGLYPH-13991 +<U00013992> /xf0/x93/xa6/x92 EGYPTIAN HIEROGLYPH-13992 +<U00013993> /xf0/x93/xa6/x93 EGYPTIAN HIEROGLYPH-13993 +<U00013994> /xf0/x93/xa6/x94 EGYPTIAN HIEROGLYPH-13994 +<U00013995> /xf0/x93/xa6/x95 EGYPTIAN HIEROGLYPH-13995 +<U00013996> /xf0/x93/xa6/x96 EGYPTIAN HIEROGLYPH-13996 +<U00013997> /xf0/x93/xa6/x97 EGYPTIAN HIEROGLYPH-13997 +<U00013998> /xf0/x93/xa6/x98 EGYPTIAN HIEROGLYPH-13998 +<U00013999> /xf0/x93/xa6/x99 EGYPTIAN HIEROGLYPH-13999 +<U0001399A> /xf0/x93/xa6/x9a EGYPTIAN HIEROGLYPH-1399A +<U0001399B> /xf0/x93/xa6/x9b EGYPTIAN HIEROGLYPH-1399B +<U0001399C> /xf0/x93/xa6/x9c EGYPTIAN HIEROGLYPH-1399C +<U0001399D> /xf0/x93/xa6/x9d EGYPTIAN HIEROGLYPH-1399D +<U0001399E> /xf0/x93/xa6/x9e EGYPTIAN HIEROGLYPH-1399E +<U0001399F> /xf0/x93/xa6/x9f EGYPTIAN HIEROGLYPH-1399F +<U000139A0> /xf0/x93/xa6/xa0 EGYPTIAN HIEROGLYPH-139A0 +<U000139A1> /xf0/x93/xa6/xa1 EGYPTIAN HIEROGLYPH-139A1 +<U000139A2> /xf0/x93/xa6/xa2 EGYPTIAN HIEROGLYPH-139A2 +<U000139A3> /xf0/x93/xa6/xa3 EGYPTIAN HIEROGLYPH-139A3 +<U000139A4> /xf0/x93/xa6/xa4 EGYPTIAN HIEROGLYPH-139A4 +<U000139A5> /xf0/x93/xa6/xa5 EGYPTIAN HIEROGLYPH-139A5 +<U000139A6> /xf0/x93/xa6/xa6 EGYPTIAN HIEROGLYPH-139A6 +<U000139A7> /xf0/x93/xa6/xa7 EGYPTIAN HIEROGLYPH-139A7 +<U000139A8> /xf0/x93/xa6/xa8 EGYPTIAN HIEROGLYPH-139A8 +<U000139A9> /xf0/x93/xa6/xa9 EGYPTIAN HIEROGLYPH-139A9 +<U000139AA> /xf0/x93/xa6/xaa EGYPTIAN HIEROGLYPH-139AA +<U000139AB> /xf0/x93/xa6/xab EGYPTIAN HIEROGLYPH-139AB +<U000139AC> /xf0/x93/xa6/xac EGYPTIAN HIEROGLYPH-139AC +<U000139AD> /xf0/x93/xa6/xad EGYPTIAN HIEROGLYPH-139AD +<U000139AE> /xf0/x93/xa6/xae EGYPTIAN HIEROGLYPH-139AE +<U000139AF> /xf0/x93/xa6/xaf EGYPTIAN HIEROGLYPH-139AF +<U000139B0> /xf0/x93/xa6/xb0 EGYPTIAN HIEROGLYPH-139B0 +<U000139B1> /xf0/x93/xa6/xb1 EGYPTIAN HIEROGLYPH-139B1 +<U000139B2> /xf0/x93/xa6/xb2 EGYPTIAN HIEROGLYPH-139B2 +<U000139B3> /xf0/x93/xa6/xb3 EGYPTIAN HIEROGLYPH-139B3 +<U000139B4> /xf0/x93/xa6/xb4 EGYPTIAN HIEROGLYPH-139B4 +<U000139B5> /xf0/x93/xa6/xb5 EGYPTIAN HIEROGLYPH-139B5 +<U000139B6> /xf0/x93/xa6/xb6 EGYPTIAN HIEROGLYPH-139B6 +<U000139B7> /xf0/x93/xa6/xb7 EGYPTIAN HIEROGLYPH-139B7 +<U000139B8> /xf0/x93/xa6/xb8 EGYPTIAN HIEROGLYPH-139B8 +<U000139B9> /xf0/x93/xa6/xb9 EGYPTIAN HIEROGLYPH-139B9 +<U000139BA> /xf0/x93/xa6/xba EGYPTIAN HIEROGLYPH-139BA +<U000139BB> /xf0/x93/xa6/xbb EGYPTIAN HIEROGLYPH-139BB +<U000139BC> /xf0/x93/xa6/xbc EGYPTIAN HIEROGLYPH-139BC +<U000139BD> /xf0/x93/xa6/xbd EGYPTIAN HIEROGLYPH-139BD +<U000139BE> /xf0/x93/xa6/xbe EGYPTIAN HIEROGLYPH-139BE +<U000139BF> /xf0/x93/xa6/xbf EGYPTIAN HIEROGLYPH-139BF +<U000139C0> /xf0/x93/xa7/x80 EGYPTIAN HIEROGLYPH-139C0 +<U000139C1> /xf0/x93/xa7/x81 EGYPTIAN HIEROGLYPH-139C1 +<U000139C2> /xf0/x93/xa7/x82 EGYPTIAN HIEROGLYPH-139C2 +<U000139C3> /xf0/x93/xa7/x83 EGYPTIAN HIEROGLYPH-139C3 +<U000139C4> /xf0/x93/xa7/x84 EGYPTIAN HIEROGLYPH-139C4 +<U000139C5> /xf0/x93/xa7/x85 EGYPTIAN HIEROGLYPH-139C5 +<U000139C6> /xf0/x93/xa7/x86 EGYPTIAN HIEROGLYPH-139C6 +<U000139C7> /xf0/x93/xa7/x87 EGYPTIAN HIEROGLYPH-139C7 +<U000139C8> /xf0/x93/xa7/x88 EGYPTIAN HIEROGLYPH-139C8 +<U000139C9> /xf0/x93/xa7/x89 EGYPTIAN HIEROGLYPH-139C9 +<U000139CA> /xf0/x93/xa7/x8a EGYPTIAN HIEROGLYPH-139CA +<U000139CB> /xf0/x93/xa7/x8b EGYPTIAN HIEROGLYPH-139CB +<U000139CC> /xf0/x93/xa7/x8c EGYPTIAN HIEROGLYPH-139CC +<U000139CD> /xf0/x93/xa7/x8d EGYPTIAN HIEROGLYPH-139CD +<U000139CE> /xf0/x93/xa7/x8e EGYPTIAN HIEROGLYPH-139CE +<U000139CF> /xf0/x93/xa7/x8f EGYPTIAN HIEROGLYPH-139CF +<U000139D0> /xf0/x93/xa7/x90 EGYPTIAN HIEROGLYPH-139D0 +<U000139D1> /xf0/x93/xa7/x91 EGYPTIAN HIEROGLYPH-139D1 +<U000139D2> /xf0/x93/xa7/x92 EGYPTIAN HIEROGLYPH-139D2 +<U000139D3> /xf0/x93/xa7/x93 EGYPTIAN HIEROGLYPH-139D3 +<U000139D4> /xf0/x93/xa7/x94 EGYPTIAN HIEROGLYPH-139D4 +<U000139D5> /xf0/x93/xa7/x95 EGYPTIAN HIEROGLYPH-139D5 +<U000139D6> /xf0/x93/xa7/x96 EGYPTIAN HIEROGLYPH-139D6 +<U000139D7> /xf0/x93/xa7/x97 EGYPTIAN HIEROGLYPH-139D7 +<U000139D8> /xf0/x93/xa7/x98 EGYPTIAN HIEROGLYPH-139D8 +<U000139D9> /xf0/x93/xa7/x99 EGYPTIAN HIEROGLYPH-139D9 +<U000139DA> /xf0/x93/xa7/x9a EGYPTIAN HIEROGLYPH-139DA +<U000139DB> /xf0/x93/xa7/x9b EGYPTIAN HIEROGLYPH-139DB +<U000139DC> /xf0/x93/xa7/x9c EGYPTIAN HIEROGLYPH-139DC +<U000139DD> /xf0/x93/xa7/x9d EGYPTIAN HIEROGLYPH-139DD +<U000139DE> /xf0/x93/xa7/x9e EGYPTIAN HIEROGLYPH-139DE +<U000139DF> /xf0/x93/xa7/x9f EGYPTIAN HIEROGLYPH-139DF +<U000139E0> /xf0/x93/xa7/xa0 EGYPTIAN HIEROGLYPH-139E0 +<U000139E1> /xf0/x93/xa7/xa1 EGYPTIAN HIEROGLYPH-139E1 +<U000139E2> /xf0/x93/xa7/xa2 EGYPTIAN HIEROGLYPH-139E2 +<U000139E3> /xf0/x93/xa7/xa3 EGYPTIAN HIEROGLYPH-139E3 +<U000139E4> /xf0/x93/xa7/xa4 EGYPTIAN HIEROGLYPH-139E4 +<U000139E5> /xf0/x93/xa7/xa5 EGYPTIAN HIEROGLYPH-139E5 +<U000139E6> /xf0/x93/xa7/xa6 EGYPTIAN HIEROGLYPH-139E6 +<U000139E7> /xf0/x93/xa7/xa7 EGYPTIAN HIEROGLYPH-139E7 +<U000139E8> /xf0/x93/xa7/xa8 EGYPTIAN HIEROGLYPH-139E8 +<U000139E9> /xf0/x93/xa7/xa9 EGYPTIAN HIEROGLYPH-139E9 +<U000139EA> /xf0/x93/xa7/xaa EGYPTIAN HIEROGLYPH-139EA +<U000139EB> /xf0/x93/xa7/xab EGYPTIAN HIEROGLYPH-139EB +<U000139EC> /xf0/x93/xa7/xac EGYPTIAN HIEROGLYPH-139EC +<U000139ED> /xf0/x93/xa7/xad EGYPTIAN HIEROGLYPH-139ED +<U000139EE> /xf0/x93/xa7/xae EGYPTIAN HIEROGLYPH-139EE +<U000139EF> /xf0/x93/xa7/xaf EGYPTIAN HIEROGLYPH-139EF +<U000139F0> /xf0/x93/xa7/xb0 EGYPTIAN HIEROGLYPH-139F0 +<U000139F1> /xf0/x93/xa7/xb1 EGYPTIAN HIEROGLYPH-139F1 +<U000139F2> /xf0/x93/xa7/xb2 EGYPTIAN HIEROGLYPH-139F2 +<U000139F3> /xf0/x93/xa7/xb3 EGYPTIAN HIEROGLYPH-139F3 +<U000139F4> /xf0/x93/xa7/xb4 EGYPTIAN HIEROGLYPH-139F4 +<U000139F5> /xf0/x93/xa7/xb5 EGYPTIAN HIEROGLYPH-139F5 +<U000139F6> /xf0/x93/xa7/xb6 EGYPTIAN HIEROGLYPH-139F6 +<U000139F7> /xf0/x93/xa7/xb7 EGYPTIAN HIEROGLYPH-139F7 +<U000139F8> /xf0/x93/xa7/xb8 EGYPTIAN HIEROGLYPH-139F8 +<U000139F9> /xf0/x93/xa7/xb9 EGYPTIAN HIEROGLYPH-139F9 +<U000139FA> /xf0/x93/xa7/xba EGYPTIAN HIEROGLYPH-139FA +<U000139FB> /xf0/x93/xa7/xbb EGYPTIAN HIEROGLYPH-139FB +<U000139FC> /xf0/x93/xa7/xbc EGYPTIAN HIEROGLYPH-139FC +<U000139FD> /xf0/x93/xa7/xbd EGYPTIAN HIEROGLYPH-139FD +<U000139FE> /xf0/x93/xa7/xbe EGYPTIAN HIEROGLYPH-139FE +<U000139FF> /xf0/x93/xa7/xbf EGYPTIAN HIEROGLYPH-139FF +<U00013A00> /xf0/x93/xa8/x80 EGYPTIAN HIEROGLYPH-13A00 +<U00013A01> /xf0/x93/xa8/x81 EGYPTIAN HIEROGLYPH-13A01 +<U00013A02> /xf0/x93/xa8/x82 EGYPTIAN HIEROGLYPH-13A02 +<U00013A03> /xf0/x93/xa8/x83 EGYPTIAN HIEROGLYPH-13A03 +<U00013A04> /xf0/x93/xa8/x84 EGYPTIAN HIEROGLYPH-13A04 +<U00013A05> /xf0/x93/xa8/x85 EGYPTIAN HIEROGLYPH-13A05 +<U00013A06> /xf0/x93/xa8/x86 EGYPTIAN HIEROGLYPH-13A06 +<U00013A07> /xf0/x93/xa8/x87 EGYPTIAN HIEROGLYPH-13A07 +<U00013A08> /xf0/x93/xa8/x88 EGYPTIAN HIEROGLYPH-13A08 +<U00013A09> /xf0/x93/xa8/x89 EGYPTIAN HIEROGLYPH-13A09 +<U00013A0A> /xf0/x93/xa8/x8a EGYPTIAN HIEROGLYPH-13A0A +<U00013A0B> /xf0/x93/xa8/x8b EGYPTIAN HIEROGLYPH-13A0B +<U00013A0C> /xf0/x93/xa8/x8c EGYPTIAN HIEROGLYPH-13A0C +<U00013A0D> /xf0/x93/xa8/x8d EGYPTIAN HIEROGLYPH-13A0D +<U00013A0E> /xf0/x93/xa8/x8e EGYPTIAN HIEROGLYPH-13A0E +<U00013A0F> /xf0/x93/xa8/x8f EGYPTIAN HIEROGLYPH-13A0F +<U00013A10> /xf0/x93/xa8/x90 EGYPTIAN HIEROGLYPH-13A10 +<U00013A11> /xf0/x93/xa8/x91 EGYPTIAN HIEROGLYPH-13A11 +<U00013A12> /xf0/x93/xa8/x92 EGYPTIAN HIEROGLYPH-13A12 +<U00013A13> /xf0/x93/xa8/x93 EGYPTIAN HIEROGLYPH-13A13 +<U00013A14> /xf0/x93/xa8/x94 EGYPTIAN HIEROGLYPH-13A14 +<U00013A15> /xf0/x93/xa8/x95 EGYPTIAN HIEROGLYPH-13A15 +<U00013A16> /xf0/x93/xa8/x96 EGYPTIAN HIEROGLYPH-13A16 +<U00013A17> /xf0/x93/xa8/x97 EGYPTIAN HIEROGLYPH-13A17 +<U00013A18> /xf0/x93/xa8/x98 EGYPTIAN HIEROGLYPH-13A18 +<U00013A19> /xf0/x93/xa8/x99 EGYPTIAN HIEROGLYPH-13A19 +<U00013A1A> /xf0/x93/xa8/x9a EGYPTIAN HIEROGLYPH-13A1A +<U00013A1B> /xf0/x93/xa8/x9b EGYPTIAN HIEROGLYPH-13A1B +<U00013A1C> /xf0/x93/xa8/x9c EGYPTIAN HIEROGLYPH-13A1C +<U00013A1D> /xf0/x93/xa8/x9d EGYPTIAN HIEROGLYPH-13A1D +<U00013A1E> /xf0/x93/xa8/x9e EGYPTIAN HIEROGLYPH-13A1E +<U00013A1F> /xf0/x93/xa8/x9f EGYPTIAN HIEROGLYPH-13A1F +<U00013A20> /xf0/x93/xa8/xa0 EGYPTIAN HIEROGLYPH-13A20 +<U00013A21> /xf0/x93/xa8/xa1 EGYPTIAN HIEROGLYPH-13A21 +<U00013A22> /xf0/x93/xa8/xa2 EGYPTIAN HIEROGLYPH-13A22 +<U00013A23> /xf0/x93/xa8/xa3 EGYPTIAN HIEROGLYPH-13A23 +<U00013A24> /xf0/x93/xa8/xa4 EGYPTIAN HIEROGLYPH-13A24 +<U00013A25> /xf0/x93/xa8/xa5 EGYPTIAN HIEROGLYPH-13A25 +<U00013A26> /xf0/x93/xa8/xa6 EGYPTIAN HIEROGLYPH-13A26 +<U00013A27> /xf0/x93/xa8/xa7 EGYPTIAN HIEROGLYPH-13A27 +<U00013A28> /xf0/x93/xa8/xa8 EGYPTIAN HIEROGLYPH-13A28 +<U00013A29> /xf0/x93/xa8/xa9 EGYPTIAN HIEROGLYPH-13A29 +<U00013A2A> /xf0/x93/xa8/xaa EGYPTIAN HIEROGLYPH-13A2A +<U00013A2B> /xf0/x93/xa8/xab EGYPTIAN HIEROGLYPH-13A2B +<U00013A2C> /xf0/x93/xa8/xac EGYPTIAN HIEROGLYPH-13A2C +<U00013A2D> /xf0/x93/xa8/xad EGYPTIAN HIEROGLYPH-13A2D +<U00013A2E> /xf0/x93/xa8/xae EGYPTIAN HIEROGLYPH-13A2E +<U00013A2F> /xf0/x93/xa8/xaf EGYPTIAN HIEROGLYPH-13A2F +<U00013A30> /xf0/x93/xa8/xb0 EGYPTIAN HIEROGLYPH-13A30 +<U00013A31> /xf0/x93/xa8/xb1 EGYPTIAN HIEROGLYPH-13A31 +<U00013A32> /xf0/x93/xa8/xb2 EGYPTIAN HIEROGLYPH-13A32 +<U00013A33> /xf0/x93/xa8/xb3 EGYPTIAN HIEROGLYPH-13A33 +<U00013A34> /xf0/x93/xa8/xb4 EGYPTIAN HIEROGLYPH-13A34 +<U00013A35> /xf0/x93/xa8/xb5 EGYPTIAN HIEROGLYPH-13A35 +<U00013A36> /xf0/x93/xa8/xb6 EGYPTIAN HIEROGLYPH-13A36 +<U00013A37> /xf0/x93/xa8/xb7 EGYPTIAN HIEROGLYPH-13A37 +<U00013A38> /xf0/x93/xa8/xb8 EGYPTIAN HIEROGLYPH-13A38 +<U00013A39> /xf0/x93/xa8/xb9 EGYPTIAN HIEROGLYPH-13A39 +<U00013A3A> /xf0/x93/xa8/xba EGYPTIAN HIEROGLYPH-13A3A +<U00013A3B> /xf0/x93/xa8/xbb EGYPTIAN HIEROGLYPH-13A3B +<U00013A3C> /xf0/x93/xa8/xbc EGYPTIAN HIEROGLYPH-13A3C +<U00013A3D> /xf0/x93/xa8/xbd EGYPTIAN HIEROGLYPH-13A3D +<U00013A3E> /xf0/x93/xa8/xbe EGYPTIAN HIEROGLYPH-13A3E +<U00013A3F> /xf0/x93/xa8/xbf EGYPTIAN HIEROGLYPH-13A3F +<U00013A40> /xf0/x93/xa9/x80 EGYPTIAN HIEROGLYPH-13A40 +<U00013A41> /xf0/x93/xa9/x81 EGYPTIAN HIEROGLYPH-13A41 +<U00013A42> /xf0/x93/xa9/x82 EGYPTIAN HIEROGLYPH-13A42 +<U00013A43> /xf0/x93/xa9/x83 EGYPTIAN HIEROGLYPH-13A43 +<U00013A44> /xf0/x93/xa9/x84 EGYPTIAN HIEROGLYPH-13A44 +<U00013A45> /xf0/x93/xa9/x85 EGYPTIAN HIEROGLYPH-13A45 +<U00013A46> /xf0/x93/xa9/x86 EGYPTIAN HIEROGLYPH-13A46 +<U00013A47> /xf0/x93/xa9/x87 EGYPTIAN HIEROGLYPH-13A47 +<U00013A48> /xf0/x93/xa9/x88 EGYPTIAN HIEROGLYPH-13A48 +<U00013A49> /xf0/x93/xa9/x89 EGYPTIAN HIEROGLYPH-13A49 +<U00013A4A> /xf0/x93/xa9/x8a EGYPTIAN HIEROGLYPH-13A4A +<U00013A4B> /xf0/x93/xa9/x8b EGYPTIAN HIEROGLYPH-13A4B +<U00013A4C> /xf0/x93/xa9/x8c EGYPTIAN HIEROGLYPH-13A4C +<U00013A4D> /xf0/x93/xa9/x8d EGYPTIAN HIEROGLYPH-13A4D +<U00013A4E> /xf0/x93/xa9/x8e EGYPTIAN HIEROGLYPH-13A4E +<U00013A4F> /xf0/x93/xa9/x8f EGYPTIAN HIEROGLYPH-13A4F +<U00013A50> /xf0/x93/xa9/x90 EGYPTIAN HIEROGLYPH-13A50 +<U00013A51> /xf0/x93/xa9/x91 EGYPTIAN HIEROGLYPH-13A51 +<U00013A52> /xf0/x93/xa9/x92 EGYPTIAN HIEROGLYPH-13A52 +<U00013A53> /xf0/x93/xa9/x93 EGYPTIAN HIEROGLYPH-13A53 +<U00013A54> /xf0/x93/xa9/x94 EGYPTIAN HIEROGLYPH-13A54 +<U00013A55> /xf0/x93/xa9/x95 EGYPTIAN HIEROGLYPH-13A55 +<U00013A56> /xf0/x93/xa9/x96 EGYPTIAN HIEROGLYPH-13A56 +<U00013A57> /xf0/x93/xa9/x97 EGYPTIAN HIEROGLYPH-13A57 +<U00013A58> /xf0/x93/xa9/x98 EGYPTIAN HIEROGLYPH-13A58 +<U00013A59> /xf0/x93/xa9/x99 EGYPTIAN HIEROGLYPH-13A59 +<U00013A5A> /xf0/x93/xa9/x9a EGYPTIAN HIEROGLYPH-13A5A +<U00013A5B> /xf0/x93/xa9/x9b EGYPTIAN HIEROGLYPH-13A5B +<U00013A5C> /xf0/x93/xa9/x9c EGYPTIAN HIEROGLYPH-13A5C +<U00013A5D> /xf0/x93/xa9/x9d EGYPTIAN HIEROGLYPH-13A5D +<U00013A5E> /xf0/x93/xa9/x9e EGYPTIAN HIEROGLYPH-13A5E +<U00013A5F> /xf0/x93/xa9/x9f EGYPTIAN HIEROGLYPH-13A5F +<U00013A60> /xf0/x93/xa9/xa0 EGYPTIAN HIEROGLYPH-13A60 +<U00013A61> /xf0/x93/xa9/xa1 EGYPTIAN HIEROGLYPH-13A61 +<U00013A62> /xf0/x93/xa9/xa2 EGYPTIAN HIEROGLYPH-13A62 +<U00013A63> /xf0/x93/xa9/xa3 EGYPTIAN HIEROGLYPH-13A63 +<U00013A64> /xf0/x93/xa9/xa4 EGYPTIAN HIEROGLYPH-13A64 +<U00013A65> /xf0/x93/xa9/xa5 EGYPTIAN HIEROGLYPH-13A65 +<U00013A66> /xf0/x93/xa9/xa6 EGYPTIAN HIEROGLYPH-13A66 +<U00013A67> /xf0/x93/xa9/xa7 EGYPTIAN HIEROGLYPH-13A67 +<U00013A68> /xf0/x93/xa9/xa8 EGYPTIAN HIEROGLYPH-13A68 +<U00013A69> /xf0/x93/xa9/xa9 EGYPTIAN HIEROGLYPH-13A69 +<U00013A6A> /xf0/x93/xa9/xaa EGYPTIAN HIEROGLYPH-13A6A +<U00013A6B> /xf0/x93/xa9/xab EGYPTIAN HIEROGLYPH-13A6B +<U00013A6C> /xf0/x93/xa9/xac EGYPTIAN HIEROGLYPH-13A6C +<U00013A6D> /xf0/x93/xa9/xad EGYPTIAN HIEROGLYPH-13A6D +<U00013A6E> /xf0/x93/xa9/xae EGYPTIAN HIEROGLYPH-13A6E +<U00013A6F> /xf0/x93/xa9/xaf EGYPTIAN HIEROGLYPH-13A6F +<U00013A70> /xf0/x93/xa9/xb0 EGYPTIAN HIEROGLYPH-13A70 +<U00013A71> /xf0/x93/xa9/xb1 EGYPTIAN HIEROGLYPH-13A71 +<U00013A72> /xf0/x93/xa9/xb2 EGYPTIAN HIEROGLYPH-13A72 +<U00013A73> /xf0/x93/xa9/xb3 EGYPTIAN HIEROGLYPH-13A73 +<U00013A74> /xf0/x93/xa9/xb4 EGYPTIAN HIEROGLYPH-13A74 +<U00013A75> /xf0/x93/xa9/xb5 EGYPTIAN HIEROGLYPH-13A75 +<U00013A76> /xf0/x93/xa9/xb6 EGYPTIAN HIEROGLYPH-13A76 +<U00013A77> /xf0/x93/xa9/xb7 EGYPTIAN HIEROGLYPH-13A77 +<U00013A78> /xf0/x93/xa9/xb8 EGYPTIAN HIEROGLYPH-13A78 +<U00013A79> /xf0/x93/xa9/xb9 EGYPTIAN HIEROGLYPH-13A79 +<U00013A7A> /xf0/x93/xa9/xba EGYPTIAN HIEROGLYPH-13A7A +<U00013A7B> /xf0/x93/xa9/xbb EGYPTIAN HIEROGLYPH-13A7B +<U00013A7C> /xf0/x93/xa9/xbc EGYPTIAN HIEROGLYPH-13A7C +<U00013A7D> /xf0/x93/xa9/xbd EGYPTIAN HIEROGLYPH-13A7D +<U00013A7E> /xf0/x93/xa9/xbe EGYPTIAN HIEROGLYPH-13A7E +<U00013A7F> /xf0/x93/xa9/xbf EGYPTIAN HIEROGLYPH-13A7F +<U00013A80> /xf0/x93/xaa/x80 EGYPTIAN HIEROGLYPH-13A80 +<U00013A81> /xf0/x93/xaa/x81 EGYPTIAN HIEROGLYPH-13A81 +<U00013A82> /xf0/x93/xaa/x82 EGYPTIAN HIEROGLYPH-13A82 +<U00013A83> /xf0/x93/xaa/x83 EGYPTIAN HIEROGLYPH-13A83 +<U00013A84> /xf0/x93/xaa/x84 EGYPTIAN HIEROGLYPH-13A84 +<U00013A85> /xf0/x93/xaa/x85 EGYPTIAN HIEROGLYPH-13A85 +<U00013A86> /xf0/x93/xaa/x86 EGYPTIAN HIEROGLYPH-13A86 +<U00013A87> /xf0/x93/xaa/x87 EGYPTIAN HIEROGLYPH-13A87 +<U00013A88> /xf0/x93/xaa/x88 EGYPTIAN HIEROGLYPH-13A88 +<U00013A89> /xf0/x93/xaa/x89 EGYPTIAN HIEROGLYPH-13A89 +<U00013A8A> /xf0/x93/xaa/x8a EGYPTIAN HIEROGLYPH-13A8A +<U00013A8B> /xf0/x93/xaa/x8b EGYPTIAN HIEROGLYPH-13A8B +<U00013A8C> /xf0/x93/xaa/x8c EGYPTIAN HIEROGLYPH-13A8C +<U00013A8D> /xf0/x93/xaa/x8d EGYPTIAN HIEROGLYPH-13A8D +<U00013A8E> /xf0/x93/xaa/x8e EGYPTIAN HIEROGLYPH-13A8E +<U00013A8F> /xf0/x93/xaa/x8f EGYPTIAN HIEROGLYPH-13A8F +<U00013A90> /xf0/x93/xaa/x90 EGYPTIAN HIEROGLYPH-13A90 +<U00013A91> /xf0/x93/xaa/x91 EGYPTIAN HIEROGLYPH-13A91 +<U00013A92> /xf0/x93/xaa/x92 EGYPTIAN HIEROGLYPH-13A92 +<U00013A93> /xf0/x93/xaa/x93 EGYPTIAN HIEROGLYPH-13A93 +<U00013A94> /xf0/x93/xaa/x94 EGYPTIAN HIEROGLYPH-13A94 +<U00013A95> /xf0/x93/xaa/x95 EGYPTIAN HIEROGLYPH-13A95 +<U00013A96> /xf0/x93/xaa/x96 EGYPTIAN HIEROGLYPH-13A96 +<U00013A97> /xf0/x93/xaa/x97 EGYPTIAN HIEROGLYPH-13A97 +<U00013A98> /xf0/x93/xaa/x98 EGYPTIAN HIEROGLYPH-13A98 +<U00013A99> /xf0/x93/xaa/x99 EGYPTIAN HIEROGLYPH-13A99 +<U00013A9A> /xf0/x93/xaa/x9a EGYPTIAN HIEROGLYPH-13A9A +<U00013A9B> /xf0/x93/xaa/x9b EGYPTIAN HIEROGLYPH-13A9B +<U00013A9C> /xf0/x93/xaa/x9c EGYPTIAN HIEROGLYPH-13A9C +<U00013A9D> /xf0/x93/xaa/x9d EGYPTIAN HIEROGLYPH-13A9D +<U00013A9E> /xf0/x93/xaa/x9e EGYPTIAN HIEROGLYPH-13A9E +<U00013A9F> /xf0/x93/xaa/x9f EGYPTIAN HIEROGLYPH-13A9F +<U00013AA0> /xf0/x93/xaa/xa0 EGYPTIAN HIEROGLYPH-13AA0 +<U00013AA1> /xf0/x93/xaa/xa1 EGYPTIAN HIEROGLYPH-13AA1 +<U00013AA2> /xf0/x93/xaa/xa2 EGYPTIAN HIEROGLYPH-13AA2 +<U00013AA3> /xf0/x93/xaa/xa3 EGYPTIAN HIEROGLYPH-13AA3 +<U00013AA4> /xf0/x93/xaa/xa4 EGYPTIAN HIEROGLYPH-13AA4 +<U00013AA5> /xf0/x93/xaa/xa5 EGYPTIAN HIEROGLYPH-13AA5 +<U00013AA6> /xf0/x93/xaa/xa6 EGYPTIAN HIEROGLYPH-13AA6 +<U00013AA7> /xf0/x93/xaa/xa7 EGYPTIAN HIEROGLYPH-13AA7 +<U00013AA8> /xf0/x93/xaa/xa8 EGYPTIAN HIEROGLYPH-13AA8 +<U00013AA9> /xf0/x93/xaa/xa9 EGYPTIAN HIEROGLYPH-13AA9 +<U00013AAA> /xf0/x93/xaa/xaa EGYPTIAN HIEROGLYPH-13AAA +<U00013AAB> /xf0/x93/xaa/xab EGYPTIAN HIEROGLYPH-13AAB +<U00013AAC> /xf0/x93/xaa/xac EGYPTIAN HIEROGLYPH-13AAC +<U00013AAD> /xf0/x93/xaa/xad EGYPTIAN HIEROGLYPH-13AAD +<U00013AAE> /xf0/x93/xaa/xae EGYPTIAN HIEROGLYPH-13AAE +<U00013AAF> /xf0/x93/xaa/xaf EGYPTIAN HIEROGLYPH-13AAF +<U00013AB0> /xf0/x93/xaa/xb0 EGYPTIAN HIEROGLYPH-13AB0 +<U00013AB1> /xf0/x93/xaa/xb1 EGYPTIAN HIEROGLYPH-13AB1 +<U00013AB2> /xf0/x93/xaa/xb2 EGYPTIAN HIEROGLYPH-13AB2 +<U00013AB3> /xf0/x93/xaa/xb3 EGYPTIAN HIEROGLYPH-13AB3 +<U00013AB4> /xf0/x93/xaa/xb4 EGYPTIAN HIEROGLYPH-13AB4 +<U00013AB5> /xf0/x93/xaa/xb5 EGYPTIAN HIEROGLYPH-13AB5 +<U00013AB6> /xf0/x93/xaa/xb6 EGYPTIAN HIEROGLYPH-13AB6 +<U00013AB7> /xf0/x93/xaa/xb7 EGYPTIAN HIEROGLYPH-13AB7 +<U00013AB8> /xf0/x93/xaa/xb8 EGYPTIAN HIEROGLYPH-13AB8 +<U00013AB9> /xf0/x93/xaa/xb9 EGYPTIAN HIEROGLYPH-13AB9 +<U00013ABA> /xf0/x93/xaa/xba EGYPTIAN HIEROGLYPH-13ABA +<U00013ABB> /xf0/x93/xaa/xbb EGYPTIAN HIEROGLYPH-13ABB +<U00013ABC> /xf0/x93/xaa/xbc EGYPTIAN HIEROGLYPH-13ABC +<U00013ABD> /xf0/x93/xaa/xbd EGYPTIAN HIEROGLYPH-13ABD +<U00013ABE> /xf0/x93/xaa/xbe EGYPTIAN HIEROGLYPH-13ABE +<U00013ABF> /xf0/x93/xaa/xbf EGYPTIAN HIEROGLYPH-13ABF +<U00013AC0> /xf0/x93/xab/x80 EGYPTIAN HIEROGLYPH-13AC0 +<U00013AC1> /xf0/x93/xab/x81 EGYPTIAN HIEROGLYPH-13AC1 +<U00013AC2> /xf0/x93/xab/x82 EGYPTIAN HIEROGLYPH-13AC2 +<U00013AC3> /xf0/x93/xab/x83 EGYPTIAN HIEROGLYPH-13AC3 +<U00013AC4> /xf0/x93/xab/x84 EGYPTIAN HIEROGLYPH-13AC4 +<U00013AC5> /xf0/x93/xab/x85 EGYPTIAN HIEROGLYPH-13AC5 +<U00013AC6> /xf0/x93/xab/x86 EGYPTIAN HIEROGLYPH-13AC6 +<U00013AC7> /xf0/x93/xab/x87 EGYPTIAN HIEROGLYPH-13AC7 +<U00013AC8> /xf0/x93/xab/x88 EGYPTIAN HIEROGLYPH-13AC8 +<U00013AC9> /xf0/x93/xab/x89 EGYPTIAN HIEROGLYPH-13AC9 +<U00013ACA> /xf0/x93/xab/x8a EGYPTIAN HIEROGLYPH-13ACA +<U00013ACB> /xf0/x93/xab/x8b EGYPTIAN HIEROGLYPH-13ACB +<U00013ACC> /xf0/x93/xab/x8c EGYPTIAN HIEROGLYPH-13ACC +<U00013ACD> /xf0/x93/xab/x8d EGYPTIAN HIEROGLYPH-13ACD +<U00013ACE> /xf0/x93/xab/x8e EGYPTIAN HIEROGLYPH-13ACE +<U00013ACF> /xf0/x93/xab/x8f EGYPTIAN HIEROGLYPH-13ACF +<U00013AD0> /xf0/x93/xab/x90 EGYPTIAN HIEROGLYPH-13AD0 +<U00013AD1> /xf0/x93/xab/x91 EGYPTIAN HIEROGLYPH-13AD1 +<U00013AD2> /xf0/x93/xab/x92 EGYPTIAN HIEROGLYPH-13AD2 +<U00013AD3> /xf0/x93/xab/x93 EGYPTIAN HIEROGLYPH-13AD3 +<U00013AD4> /xf0/x93/xab/x94 EGYPTIAN HIEROGLYPH-13AD4 +<U00013AD5> /xf0/x93/xab/x95 EGYPTIAN HIEROGLYPH-13AD5 +<U00013AD6> /xf0/x93/xab/x96 EGYPTIAN HIEROGLYPH-13AD6 +<U00013AD7> /xf0/x93/xab/x97 EGYPTIAN HIEROGLYPH-13AD7 +<U00013AD8> /xf0/x93/xab/x98 EGYPTIAN HIEROGLYPH-13AD8 +<U00013AD9> /xf0/x93/xab/x99 EGYPTIAN HIEROGLYPH-13AD9 +<U00013ADA> /xf0/x93/xab/x9a EGYPTIAN HIEROGLYPH-13ADA +<U00013ADB> /xf0/x93/xab/x9b EGYPTIAN HIEROGLYPH-13ADB +<U00013ADC> /xf0/x93/xab/x9c EGYPTIAN HIEROGLYPH-13ADC +<U00013ADD> /xf0/x93/xab/x9d EGYPTIAN HIEROGLYPH-13ADD +<U00013ADE> /xf0/x93/xab/x9e EGYPTIAN HIEROGLYPH-13ADE +<U00013ADF> /xf0/x93/xab/x9f EGYPTIAN HIEROGLYPH-13ADF +<U00013AE0> /xf0/x93/xab/xa0 EGYPTIAN HIEROGLYPH-13AE0 +<U00013AE1> /xf0/x93/xab/xa1 EGYPTIAN HIEROGLYPH-13AE1 +<U00013AE2> /xf0/x93/xab/xa2 EGYPTIAN HIEROGLYPH-13AE2 +<U00013AE3> /xf0/x93/xab/xa3 EGYPTIAN HIEROGLYPH-13AE3 +<U00013AE4> /xf0/x93/xab/xa4 EGYPTIAN HIEROGLYPH-13AE4 +<U00013AE5> /xf0/x93/xab/xa5 EGYPTIAN HIEROGLYPH-13AE5 +<U00013AE6> /xf0/x93/xab/xa6 EGYPTIAN HIEROGLYPH-13AE6 +<U00013AE7> /xf0/x93/xab/xa7 EGYPTIAN HIEROGLYPH-13AE7 +<U00013AE8> /xf0/x93/xab/xa8 EGYPTIAN HIEROGLYPH-13AE8 +<U00013AE9> /xf0/x93/xab/xa9 EGYPTIAN HIEROGLYPH-13AE9 +<U00013AEA> /xf0/x93/xab/xaa EGYPTIAN HIEROGLYPH-13AEA +<U00013AEB> /xf0/x93/xab/xab EGYPTIAN HIEROGLYPH-13AEB +<U00013AEC> /xf0/x93/xab/xac EGYPTIAN HIEROGLYPH-13AEC +<U00013AED> /xf0/x93/xab/xad EGYPTIAN HIEROGLYPH-13AED +<U00013AEE> /xf0/x93/xab/xae EGYPTIAN HIEROGLYPH-13AEE +<U00013AEF> /xf0/x93/xab/xaf EGYPTIAN HIEROGLYPH-13AEF +<U00013AF0> /xf0/x93/xab/xb0 EGYPTIAN HIEROGLYPH-13AF0 +<U00013AF1> /xf0/x93/xab/xb1 EGYPTIAN HIEROGLYPH-13AF1 +<U00013AF2> /xf0/x93/xab/xb2 EGYPTIAN HIEROGLYPH-13AF2 +<U00013AF3> /xf0/x93/xab/xb3 EGYPTIAN HIEROGLYPH-13AF3 +<U00013AF4> /xf0/x93/xab/xb4 EGYPTIAN HIEROGLYPH-13AF4 +<U00013AF5> /xf0/x93/xab/xb5 EGYPTIAN HIEROGLYPH-13AF5 +<U00013AF6> /xf0/x93/xab/xb6 EGYPTIAN HIEROGLYPH-13AF6 +<U00013AF7> /xf0/x93/xab/xb7 EGYPTIAN HIEROGLYPH-13AF7 +<U00013AF8> /xf0/x93/xab/xb8 EGYPTIAN HIEROGLYPH-13AF8 +<U00013AF9> /xf0/x93/xab/xb9 EGYPTIAN HIEROGLYPH-13AF9 +<U00013AFA> /xf0/x93/xab/xba EGYPTIAN HIEROGLYPH-13AFA +<U00013AFB> /xf0/x93/xab/xbb EGYPTIAN HIEROGLYPH-13AFB +<U00013AFC> /xf0/x93/xab/xbc EGYPTIAN HIEROGLYPH-13AFC +<U00013AFD> /xf0/x93/xab/xbd EGYPTIAN HIEROGLYPH-13AFD +<U00013AFE> /xf0/x93/xab/xbe EGYPTIAN HIEROGLYPH-13AFE +<U00013AFF> /xf0/x93/xab/xbf EGYPTIAN HIEROGLYPH-13AFF +<U00013B00> /xf0/x93/xac/x80 EGYPTIAN HIEROGLYPH-13B00 +<U00013B01> /xf0/x93/xac/x81 EGYPTIAN HIEROGLYPH-13B01 +<U00013B02> /xf0/x93/xac/x82 EGYPTIAN HIEROGLYPH-13B02 +<U00013B03> /xf0/x93/xac/x83 EGYPTIAN HIEROGLYPH-13B03 +<U00013B04> /xf0/x93/xac/x84 EGYPTIAN HIEROGLYPH-13B04 +<U00013B05> /xf0/x93/xac/x85 EGYPTIAN HIEROGLYPH-13B05 +<U00013B06> /xf0/x93/xac/x86 EGYPTIAN HIEROGLYPH-13B06 +<U00013B07> /xf0/x93/xac/x87 EGYPTIAN HIEROGLYPH-13B07 +<U00013B08> /xf0/x93/xac/x88 EGYPTIAN HIEROGLYPH-13B08 +<U00013B09> /xf0/x93/xac/x89 EGYPTIAN HIEROGLYPH-13B09 +<U00013B0A> /xf0/x93/xac/x8a EGYPTIAN HIEROGLYPH-13B0A +<U00013B0B> /xf0/x93/xac/x8b EGYPTIAN HIEROGLYPH-13B0B +<U00013B0C> /xf0/x93/xac/x8c EGYPTIAN HIEROGLYPH-13B0C +<U00013B0D> /xf0/x93/xac/x8d EGYPTIAN HIEROGLYPH-13B0D +<U00013B0E> /xf0/x93/xac/x8e EGYPTIAN HIEROGLYPH-13B0E +<U00013B0F> /xf0/x93/xac/x8f EGYPTIAN HIEROGLYPH-13B0F +<U00013B10> /xf0/x93/xac/x90 EGYPTIAN HIEROGLYPH-13B10 +<U00013B11> /xf0/x93/xac/x91 EGYPTIAN HIEROGLYPH-13B11 +<U00013B12> /xf0/x93/xac/x92 EGYPTIAN HIEROGLYPH-13B12 +<U00013B13> /xf0/x93/xac/x93 EGYPTIAN HIEROGLYPH-13B13 +<U00013B14> /xf0/x93/xac/x94 EGYPTIAN HIEROGLYPH-13B14 +<U00013B15> /xf0/x93/xac/x95 EGYPTIAN HIEROGLYPH-13B15 +<U00013B16> /xf0/x93/xac/x96 EGYPTIAN HIEROGLYPH-13B16 +<U00013B17> /xf0/x93/xac/x97 EGYPTIAN HIEROGLYPH-13B17 +<U00013B18> /xf0/x93/xac/x98 EGYPTIAN HIEROGLYPH-13B18 +<U00013B19> /xf0/x93/xac/x99 EGYPTIAN HIEROGLYPH-13B19 +<U00013B1A> /xf0/x93/xac/x9a EGYPTIAN HIEROGLYPH-13B1A +<U00013B1B> /xf0/x93/xac/x9b EGYPTIAN HIEROGLYPH-13B1B +<U00013B1C> /xf0/x93/xac/x9c EGYPTIAN HIEROGLYPH-13B1C +<U00013B1D> /xf0/x93/xac/x9d EGYPTIAN HIEROGLYPH-13B1D +<U00013B1E> /xf0/x93/xac/x9e EGYPTIAN HIEROGLYPH-13B1E +<U00013B1F> /xf0/x93/xac/x9f EGYPTIAN HIEROGLYPH-13B1F +<U00013B20> /xf0/x93/xac/xa0 EGYPTIAN HIEROGLYPH-13B20 +<U00013B21> /xf0/x93/xac/xa1 EGYPTIAN HIEROGLYPH-13B21 +<U00013B22> /xf0/x93/xac/xa2 EGYPTIAN HIEROGLYPH-13B22 +<U00013B23> /xf0/x93/xac/xa3 EGYPTIAN HIEROGLYPH-13B23 +<U00013B24> /xf0/x93/xac/xa4 EGYPTIAN HIEROGLYPH-13B24 +<U00013B25> /xf0/x93/xac/xa5 EGYPTIAN HIEROGLYPH-13B25 +<U00013B26> /xf0/x93/xac/xa6 EGYPTIAN HIEROGLYPH-13B26 +<U00013B27> /xf0/x93/xac/xa7 EGYPTIAN HIEROGLYPH-13B27 +<U00013B28> /xf0/x93/xac/xa8 EGYPTIAN HIEROGLYPH-13B28 +<U00013B29> /xf0/x93/xac/xa9 EGYPTIAN HIEROGLYPH-13B29 +<U00013B2A> /xf0/x93/xac/xaa EGYPTIAN HIEROGLYPH-13B2A +<U00013B2B> /xf0/x93/xac/xab EGYPTIAN HIEROGLYPH-13B2B +<U00013B2C> /xf0/x93/xac/xac EGYPTIAN HIEROGLYPH-13B2C +<U00013B2D> /xf0/x93/xac/xad EGYPTIAN HIEROGLYPH-13B2D +<U00013B2E> /xf0/x93/xac/xae EGYPTIAN HIEROGLYPH-13B2E +<U00013B2F> /xf0/x93/xac/xaf EGYPTIAN HIEROGLYPH-13B2F +<U00013B30> /xf0/x93/xac/xb0 EGYPTIAN HIEROGLYPH-13B30 +<U00013B31> /xf0/x93/xac/xb1 EGYPTIAN HIEROGLYPH-13B31 +<U00013B32> /xf0/x93/xac/xb2 EGYPTIAN HIEROGLYPH-13B32 +<U00013B33> /xf0/x93/xac/xb3 EGYPTIAN HIEROGLYPH-13B33 +<U00013B34> /xf0/x93/xac/xb4 EGYPTIAN HIEROGLYPH-13B34 +<U00013B35> /xf0/x93/xac/xb5 EGYPTIAN HIEROGLYPH-13B35 +<U00013B36> /xf0/x93/xac/xb6 EGYPTIAN HIEROGLYPH-13B36 +<U00013B37> /xf0/x93/xac/xb7 EGYPTIAN HIEROGLYPH-13B37 +<U00013B38> /xf0/x93/xac/xb8 EGYPTIAN HIEROGLYPH-13B38 +<U00013B39> /xf0/x93/xac/xb9 EGYPTIAN HIEROGLYPH-13B39 +<U00013B3A> /xf0/x93/xac/xba EGYPTIAN HIEROGLYPH-13B3A +<U00013B3B> /xf0/x93/xac/xbb EGYPTIAN HIEROGLYPH-13B3B +<U00013B3C> /xf0/x93/xac/xbc EGYPTIAN HIEROGLYPH-13B3C +<U00013B3D> /xf0/x93/xac/xbd EGYPTIAN HIEROGLYPH-13B3D +<U00013B3E> /xf0/x93/xac/xbe EGYPTIAN HIEROGLYPH-13B3E +<U00013B3F> /xf0/x93/xac/xbf EGYPTIAN HIEROGLYPH-13B3F +<U00013B40> /xf0/x93/xad/x80 EGYPTIAN HIEROGLYPH-13B40 +<U00013B41> /xf0/x93/xad/x81 EGYPTIAN HIEROGLYPH-13B41 +<U00013B42> /xf0/x93/xad/x82 EGYPTIAN HIEROGLYPH-13B42 +<U00013B43> /xf0/x93/xad/x83 EGYPTIAN HIEROGLYPH-13B43 +<U00013B44> /xf0/x93/xad/x84 EGYPTIAN HIEROGLYPH-13B44 +<U00013B45> /xf0/x93/xad/x85 EGYPTIAN HIEROGLYPH-13B45 +<U00013B46> /xf0/x93/xad/x86 EGYPTIAN HIEROGLYPH-13B46 +<U00013B47> /xf0/x93/xad/x87 EGYPTIAN HIEROGLYPH-13B47 +<U00013B48> /xf0/x93/xad/x88 EGYPTIAN HIEROGLYPH-13B48 +<U00013B49> /xf0/x93/xad/x89 EGYPTIAN HIEROGLYPH-13B49 +<U00013B4A> /xf0/x93/xad/x8a EGYPTIAN HIEROGLYPH-13B4A +<U00013B4B> /xf0/x93/xad/x8b EGYPTIAN HIEROGLYPH-13B4B +<U00013B4C> /xf0/x93/xad/x8c EGYPTIAN HIEROGLYPH-13B4C +<U00013B4D> /xf0/x93/xad/x8d EGYPTIAN HIEROGLYPH-13B4D +<U00013B4E> /xf0/x93/xad/x8e EGYPTIAN HIEROGLYPH-13B4E +<U00013B4F> /xf0/x93/xad/x8f EGYPTIAN HIEROGLYPH-13B4F +<U00013B50> /xf0/x93/xad/x90 EGYPTIAN HIEROGLYPH-13B50 +<U00013B51> /xf0/x93/xad/x91 EGYPTIAN HIEROGLYPH-13B51 +<U00013B52> /xf0/x93/xad/x92 EGYPTIAN HIEROGLYPH-13B52 +<U00013B53> /xf0/x93/xad/x93 EGYPTIAN HIEROGLYPH-13B53 +<U00013B54> /xf0/x93/xad/x94 EGYPTIAN HIEROGLYPH-13B54 +<U00013B55> /xf0/x93/xad/x95 EGYPTIAN HIEROGLYPH-13B55 +<U00013B56> /xf0/x93/xad/x96 EGYPTIAN HIEROGLYPH-13B56 +<U00013B57> /xf0/x93/xad/x97 EGYPTIAN HIEROGLYPH-13B57 +<U00013B58> /xf0/x93/xad/x98 EGYPTIAN HIEROGLYPH-13B58 +<U00013B59> /xf0/x93/xad/x99 EGYPTIAN HIEROGLYPH-13B59 +<U00013B5A> /xf0/x93/xad/x9a EGYPTIAN HIEROGLYPH-13B5A +<U00013B5B> /xf0/x93/xad/x9b EGYPTIAN HIEROGLYPH-13B5B +<U00013B5C> /xf0/x93/xad/x9c EGYPTIAN HIEROGLYPH-13B5C +<U00013B5D> /xf0/x93/xad/x9d EGYPTIAN HIEROGLYPH-13B5D +<U00013B5E> /xf0/x93/xad/x9e EGYPTIAN HIEROGLYPH-13B5E +<U00013B5F> /xf0/x93/xad/x9f EGYPTIAN HIEROGLYPH-13B5F +<U00013B60> /xf0/x93/xad/xa0 EGYPTIAN HIEROGLYPH-13B60 +<U00013B61> /xf0/x93/xad/xa1 EGYPTIAN HIEROGLYPH-13B61 +<U00013B62> /xf0/x93/xad/xa2 EGYPTIAN HIEROGLYPH-13B62 +<U00013B63> /xf0/x93/xad/xa3 EGYPTIAN HIEROGLYPH-13B63 +<U00013B64> /xf0/x93/xad/xa4 EGYPTIAN HIEROGLYPH-13B64 +<U00013B65> /xf0/x93/xad/xa5 EGYPTIAN HIEROGLYPH-13B65 +<U00013B66> /xf0/x93/xad/xa6 EGYPTIAN HIEROGLYPH-13B66 +<U00013B67> /xf0/x93/xad/xa7 EGYPTIAN HIEROGLYPH-13B67 +<U00013B68> /xf0/x93/xad/xa8 EGYPTIAN HIEROGLYPH-13B68 +<U00013B69> /xf0/x93/xad/xa9 EGYPTIAN HIEROGLYPH-13B69 +<U00013B6A> /xf0/x93/xad/xaa EGYPTIAN HIEROGLYPH-13B6A +<U00013B6B> /xf0/x93/xad/xab EGYPTIAN HIEROGLYPH-13B6B +<U00013B6C> /xf0/x93/xad/xac EGYPTIAN HIEROGLYPH-13B6C +<U00013B6D> /xf0/x93/xad/xad EGYPTIAN HIEROGLYPH-13B6D +<U00013B6E> /xf0/x93/xad/xae EGYPTIAN HIEROGLYPH-13B6E +<U00013B6F> /xf0/x93/xad/xaf EGYPTIAN HIEROGLYPH-13B6F +<U00013B70> /xf0/x93/xad/xb0 EGYPTIAN HIEROGLYPH-13B70 +<U00013B71> /xf0/x93/xad/xb1 EGYPTIAN HIEROGLYPH-13B71 +<U00013B72> /xf0/x93/xad/xb2 EGYPTIAN HIEROGLYPH-13B72 +<U00013B73> /xf0/x93/xad/xb3 EGYPTIAN HIEROGLYPH-13B73 +<U00013B74> /xf0/x93/xad/xb4 EGYPTIAN HIEROGLYPH-13B74 +<U00013B75> /xf0/x93/xad/xb5 EGYPTIAN HIEROGLYPH-13B75 +<U00013B76> /xf0/x93/xad/xb6 EGYPTIAN HIEROGLYPH-13B76 +<U00013B77> /xf0/x93/xad/xb7 EGYPTIAN HIEROGLYPH-13B77 +<U00013B78> /xf0/x93/xad/xb8 EGYPTIAN HIEROGLYPH-13B78 +<U00013B79> /xf0/x93/xad/xb9 EGYPTIAN HIEROGLYPH-13B79 +<U00013B7A> /xf0/x93/xad/xba EGYPTIAN HIEROGLYPH-13B7A +<U00013B7B> /xf0/x93/xad/xbb EGYPTIAN HIEROGLYPH-13B7B +<U00013B7C> /xf0/x93/xad/xbc EGYPTIAN HIEROGLYPH-13B7C +<U00013B7D> /xf0/x93/xad/xbd EGYPTIAN HIEROGLYPH-13B7D +<U00013B7E> /xf0/x93/xad/xbe EGYPTIAN HIEROGLYPH-13B7E +<U00013B7F> /xf0/x93/xad/xbf EGYPTIAN HIEROGLYPH-13B7F +<U00013B80> /xf0/x93/xae/x80 EGYPTIAN HIEROGLYPH-13B80 +<U00013B81> /xf0/x93/xae/x81 EGYPTIAN HIEROGLYPH-13B81 +<U00013B82> /xf0/x93/xae/x82 EGYPTIAN HIEROGLYPH-13B82 +<U00013B83> /xf0/x93/xae/x83 EGYPTIAN HIEROGLYPH-13B83 +<U00013B84> /xf0/x93/xae/x84 EGYPTIAN HIEROGLYPH-13B84 +<U00013B85> /xf0/x93/xae/x85 EGYPTIAN HIEROGLYPH-13B85 +<U00013B86> /xf0/x93/xae/x86 EGYPTIAN HIEROGLYPH-13B86 +<U00013B87> /xf0/x93/xae/x87 EGYPTIAN HIEROGLYPH-13B87 +<U00013B88> /xf0/x93/xae/x88 EGYPTIAN HIEROGLYPH-13B88 +<U00013B89> /xf0/x93/xae/x89 EGYPTIAN HIEROGLYPH-13B89 +<U00013B8A> /xf0/x93/xae/x8a EGYPTIAN HIEROGLYPH-13B8A +<U00013B8B> /xf0/x93/xae/x8b EGYPTIAN HIEROGLYPH-13B8B +<U00013B8C> /xf0/x93/xae/x8c EGYPTIAN HIEROGLYPH-13B8C +<U00013B8D> /xf0/x93/xae/x8d EGYPTIAN HIEROGLYPH-13B8D +<U00013B8E> /xf0/x93/xae/x8e EGYPTIAN HIEROGLYPH-13B8E +<U00013B8F> /xf0/x93/xae/x8f EGYPTIAN HIEROGLYPH-13B8F +<U00013B90> /xf0/x93/xae/x90 EGYPTIAN HIEROGLYPH-13B90 +<U00013B91> /xf0/x93/xae/x91 EGYPTIAN HIEROGLYPH-13B91 +<U00013B92> /xf0/x93/xae/x92 EGYPTIAN HIEROGLYPH-13B92 +<U00013B93> /xf0/x93/xae/x93 EGYPTIAN HIEROGLYPH-13B93 +<U00013B94> /xf0/x93/xae/x94 EGYPTIAN HIEROGLYPH-13B94 +<U00013B95> /xf0/x93/xae/x95 EGYPTIAN HIEROGLYPH-13B95 +<U00013B96> /xf0/x93/xae/x96 EGYPTIAN HIEROGLYPH-13B96 +<U00013B97> /xf0/x93/xae/x97 EGYPTIAN HIEROGLYPH-13B97 +<U00013B98> /xf0/x93/xae/x98 EGYPTIAN HIEROGLYPH-13B98 +<U00013B99> /xf0/x93/xae/x99 EGYPTIAN HIEROGLYPH-13B99 +<U00013B9A> /xf0/x93/xae/x9a EGYPTIAN HIEROGLYPH-13B9A +<U00013B9B> /xf0/x93/xae/x9b EGYPTIAN HIEROGLYPH-13B9B +<U00013B9C> /xf0/x93/xae/x9c EGYPTIAN HIEROGLYPH-13B9C +<U00013B9D> /xf0/x93/xae/x9d EGYPTIAN HIEROGLYPH-13B9D +<U00013B9E> /xf0/x93/xae/x9e EGYPTIAN HIEROGLYPH-13B9E +<U00013B9F> /xf0/x93/xae/x9f EGYPTIAN HIEROGLYPH-13B9F +<U00013BA0> /xf0/x93/xae/xa0 EGYPTIAN HIEROGLYPH-13BA0 +<U00013BA1> /xf0/x93/xae/xa1 EGYPTIAN HIEROGLYPH-13BA1 +<U00013BA2> /xf0/x93/xae/xa2 EGYPTIAN HIEROGLYPH-13BA2 +<U00013BA3> /xf0/x93/xae/xa3 EGYPTIAN HIEROGLYPH-13BA3 +<U00013BA4> /xf0/x93/xae/xa4 EGYPTIAN HIEROGLYPH-13BA4 +<U00013BA5> /xf0/x93/xae/xa5 EGYPTIAN HIEROGLYPH-13BA5 +<U00013BA6> /xf0/x93/xae/xa6 EGYPTIAN HIEROGLYPH-13BA6 +<U00013BA7> /xf0/x93/xae/xa7 EGYPTIAN HIEROGLYPH-13BA7 +<U00013BA8> /xf0/x93/xae/xa8 EGYPTIAN HIEROGLYPH-13BA8 +<U00013BA9> /xf0/x93/xae/xa9 EGYPTIAN HIEROGLYPH-13BA9 +<U00013BAA> /xf0/x93/xae/xaa EGYPTIAN HIEROGLYPH-13BAA +<U00013BAB> /xf0/x93/xae/xab EGYPTIAN HIEROGLYPH-13BAB +<U00013BAC> /xf0/x93/xae/xac EGYPTIAN HIEROGLYPH-13BAC +<U00013BAD> /xf0/x93/xae/xad EGYPTIAN HIEROGLYPH-13BAD +<U00013BAE> /xf0/x93/xae/xae EGYPTIAN HIEROGLYPH-13BAE +<U00013BAF> /xf0/x93/xae/xaf EGYPTIAN HIEROGLYPH-13BAF +<U00013BB0> /xf0/x93/xae/xb0 EGYPTIAN HIEROGLYPH-13BB0 +<U00013BB1> /xf0/x93/xae/xb1 EGYPTIAN HIEROGLYPH-13BB1 +<U00013BB2> /xf0/x93/xae/xb2 EGYPTIAN HIEROGLYPH-13BB2 +<U00013BB3> /xf0/x93/xae/xb3 EGYPTIAN HIEROGLYPH-13BB3 +<U00013BB4> /xf0/x93/xae/xb4 EGYPTIAN HIEROGLYPH-13BB4 +<U00013BB5> /xf0/x93/xae/xb5 EGYPTIAN HIEROGLYPH-13BB5 +<U00013BB6> /xf0/x93/xae/xb6 EGYPTIAN HIEROGLYPH-13BB6 +<U00013BB7> /xf0/x93/xae/xb7 EGYPTIAN HIEROGLYPH-13BB7 +<U00013BB8> /xf0/x93/xae/xb8 EGYPTIAN HIEROGLYPH-13BB8 +<U00013BB9> /xf0/x93/xae/xb9 EGYPTIAN HIEROGLYPH-13BB9 +<U00013BBA> /xf0/x93/xae/xba EGYPTIAN HIEROGLYPH-13BBA +<U00013BBB> /xf0/x93/xae/xbb EGYPTIAN HIEROGLYPH-13BBB +<U00013BBC> /xf0/x93/xae/xbc EGYPTIAN HIEROGLYPH-13BBC +<U00013BBD> /xf0/x93/xae/xbd EGYPTIAN HIEROGLYPH-13BBD +<U00013BBE> /xf0/x93/xae/xbe EGYPTIAN HIEROGLYPH-13BBE +<U00013BBF> /xf0/x93/xae/xbf EGYPTIAN HIEROGLYPH-13BBF +<U00013BC0> /xf0/x93/xaf/x80 EGYPTIAN HIEROGLYPH-13BC0 +<U00013BC1> /xf0/x93/xaf/x81 EGYPTIAN HIEROGLYPH-13BC1 +<U00013BC2> /xf0/x93/xaf/x82 EGYPTIAN HIEROGLYPH-13BC2 +<U00013BC3> /xf0/x93/xaf/x83 EGYPTIAN HIEROGLYPH-13BC3 +<U00013BC4> /xf0/x93/xaf/x84 EGYPTIAN HIEROGLYPH-13BC4 +<U00013BC5> /xf0/x93/xaf/x85 EGYPTIAN HIEROGLYPH-13BC5 +<U00013BC6> /xf0/x93/xaf/x86 EGYPTIAN HIEROGLYPH-13BC6 +<U00013BC7> /xf0/x93/xaf/x87 EGYPTIAN HIEROGLYPH-13BC7 +<U00013BC8> /xf0/x93/xaf/x88 EGYPTIAN HIEROGLYPH-13BC8 +<U00013BC9> /xf0/x93/xaf/x89 EGYPTIAN HIEROGLYPH-13BC9 +<U00013BCA> /xf0/x93/xaf/x8a EGYPTIAN HIEROGLYPH-13BCA +<U00013BCB> /xf0/x93/xaf/x8b EGYPTIAN HIEROGLYPH-13BCB +<U00013BCC> /xf0/x93/xaf/x8c EGYPTIAN HIEROGLYPH-13BCC +<U00013BCD> /xf0/x93/xaf/x8d EGYPTIAN HIEROGLYPH-13BCD +<U00013BCE> /xf0/x93/xaf/x8e EGYPTIAN HIEROGLYPH-13BCE +<U00013BCF> /xf0/x93/xaf/x8f EGYPTIAN HIEROGLYPH-13BCF +<U00013BD0> /xf0/x93/xaf/x90 EGYPTIAN HIEROGLYPH-13BD0 +<U00013BD1> /xf0/x93/xaf/x91 EGYPTIAN HIEROGLYPH-13BD1 +<U00013BD2> /xf0/x93/xaf/x92 EGYPTIAN HIEROGLYPH-13BD2 +<U00013BD3> /xf0/x93/xaf/x93 EGYPTIAN HIEROGLYPH-13BD3 +<U00013BD4> /xf0/x93/xaf/x94 EGYPTIAN HIEROGLYPH-13BD4 +<U00013BD5> /xf0/x93/xaf/x95 EGYPTIAN HIEROGLYPH-13BD5 +<U00013BD6> /xf0/x93/xaf/x96 EGYPTIAN HIEROGLYPH-13BD6 +<U00013BD7> /xf0/x93/xaf/x97 EGYPTIAN HIEROGLYPH-13BD7 +<U00013BD8> /xf0/x93/xaf/x98 EGYPTIAN HIEROGLYPH-13BD8 +<U00013BD9> /xf0/x93/xaf/x99 EGYPTIAN HIEROGLYPH-13BD9 +<U00013BDA> /xf0/x93/xaf/x9a EGYPTIAN HIEROGLYPH-13BDA +<U00013BDB> /xf0/x93/xaf/x9b EGYPTIAN HIEROGLYPH-13BDB +<U00013BDC> /xf0/x93/xaf/x9c EGYPTIAN HIEROGLYPH-13BDC +<U00013BDD> /xf0/x93/xaf/x9d EGYPTIAN HIEROGLYPH-13BDD +<U00013BDE> /xf0/x93/xaf/x9e EGYPTIAN HIEROGLYPH-13BDE +<U00013BDF> /xf0/x93/xaf/x9f EGYPTIAN HIEROGLYPH-13BDF +<U00013BE0> /xf0/x93/xaf/xa0 EGYPTIAN HIEROGLYPH-13BE0 +<U00013BE1> /xf0/x93/xaf/xa1 EGYPTIAN HIEROGLYPH-13BE1 +<U00013BE2> /xf0/x93/xaf/xa2 EGYPTIAN HIEROGLYPH-13BE2 +<U00013BE3> /xf0/x93/xaf/xa3 EGYPTIAN HIEROGLYPH-13BE3 +<U00013BE4> /xf0/x93/xaf/xa4 EGYPTIAN HIEROGLYPH-13BE4 +<U00013BE5> /xf0/x93/xaf/xa5 EGYPTIAN HIEROGLYPH-13BE5 +<U00013BE6> /xf0/x93/xaf/xa6 EGYPTIAN HIEROGLYPH-13BE6 +<U00013BE7> /xf0/x93/xaf/xa7 EGYPTIAN HIEROGLYPH-13BE7 +<U00013BE8> /xf0/x93/xaf/xa8 EGYPTIAN HIEROGLYPH-13BE8 +<U00013BE9> /xf0/x93/xaf/xa9 EGYPTIAN HIEROGLYPH-13BE9 +<U00013BEA> /xf0/x93/xaf/xaa EGYPTIAN HIEROGLYPH-13BEA +<U00013BEB> /xf0/x93/xaf/xab EGYPTIAN HIEROGLYPH-13BEB +<U00013BEC> /xf0/x93/xaf/xac EGYPTIAN HIEROGLYPH-13BEC +<U00013BED> /xf0/x93/xaf/xad EGYPTIAN HIEROGLYPH-13BED +<U00013BEE> /xf0/x93/xaf/xae EGYPTIAN HIEROGLYPH-13BEE +<U00013BEF> /xf0/x93/xaf/xaf EGYPTIAN HIEROGLYPH-13BEF +<U00013BF0> /xf0/x93/xaf/xb0 EGYPTIAN HIEROGLYPH-13BF0 +<U00013BF1> /xf0/x93/xaf/xb1 EGYPTIAN HIEROGLYPH-13BF1 +<U00013BF2> /xf0/x93/xaf/xb2 EGYPTIAN HIEROGLYPH-13BF2 +<U00013BF3> /xf0/x93/xaf/xb3 EGYPTIAN HIEROGLYPH-13BF3 +<U00013BF4> /xf0/x93/xaf/xb4 EGYPTIAN HIEROGLYPH-13BF4 +<U00013BF5> /xf0/x93/xaf/xb5 EGYPTIAN HIEROGLYPH-13BF5 +<U00013BF6> /xf0/x93/xaf/xb6 EGYPTIAN HIEROGLYPH-13BF6 +<U00013BF7> /xf0/x93/xaf/xb7 EGYPTIAN HIEROGLYPH-13BF7 +<U00013BF8> /xf0/x93/xaf/xb8 EGYPTIAN HIEROGLYPH-13BF8 +<U00013BF9> /xf0/x93/xaf/xb9 EGYPTIAN HIEROGLYPH-13BF9 +<U00013BFA> /xf0/x93/xaf/xba EGYPTIAN HIEROGLYPH-13BFA +<U00013BFB> /xf0/x93/xaf/xbb EGYPTIAN HIEROGLYPH-13BFB +<U00013BFC> /xf0/x93/xaf/xbc EGYPTIAN HIEROGLYPH-13BFC +<U00013BFD> /xf0/x93/xaf/xbd EGYPTIAN HIEROGLYPH-13BFD +<U00013BFE> /xf0/x93/xaf/xbe EGYPTIAN HIEROGLYPH-13BFE +<U00013BFF> /xf0/x93/xaf/xbf EGYPTIAN HIEROGLYPH-13BFF +<U00013C00> /xf0/x93/xb0/x80 EGYPTIAN HIEROGLYPH-13C00 +<U00013C01> /xf0/x93/xb0/x81 EGYPTIAN HIEROGLYPH-13C01 +<U00013C02> /xf0/x93/xb0/x82 EGYPTIAN HIEROGLYPH-13C02 +<U00013C03> /xf0/x93/xb0/x83 EGYPTIAN HIEROGLYPH-13C03 +<U00013C04> /xf0/x93/xb0/x84 EGYPTIAN HIEROGLYPH-13C04 +<U00013C05> /xf0/x93/xb0/x85 EGYPTIAN HIEROGLYPH-13C05 +<U00013C06> /xf0/x93/xb0/x86 EGYPTIAN HIEROGLYPH-13C06 +<U00013C07> /xf0/x93/xb0/x87 EGYPTIAN HIEROGLYPH-13C07 +<U00013C08> /xf0/x93/xb0/x88 EGYPTIAN HIEROGLYPH-13C08 +<U00013C09> /xf0/x93/xb0/x89 EGYPTIAN HIEROGLYPH-13C09 +<U00013C0A> /xf0/x93/xb0/x8a EGYPTIAN HIEROGLYPH-13C0A +<U00013C0B> /xf0/x93/xb0/x8b EGYPTIAN HIEROGLYPH-13C0B +<U00013C0C> /xf0/x93/xb0/x8c EGYPTIAN HIEROGLYPH-13C0C +<U00013C0D> /xf0/x93/xb0/x8d EGYPTIAN HIEROGLYPH-13C0D +<U00013C0E> /xf0/x93/xb0/x8e EGYPTIAN HIEROGLYPH-13C0E +<U00013C0F> /xf0/x93/xb0/x8f EGYPTIAN HIEROGLYPH-13C0F +<U00013C10> /xf0/x93/xb0/x90 EGYPTIAN HIEROGLYPH-13C10 +<U00013C11> /xf0/x93/xb0/x91 EGYPTIAN HIEROGLYPH-13C11 +<U00013C12> /xf0/x93/xb0/x92 EGYPTIAN HIEROGLYPH-13C12 +<U00013C13> /xf0/x93/xb0/x93 EGYPTIAN HIEROGLYPH-13C13 +<U00013C14> /xf0/x93/xb0/x94 EGYPTIAN HIEROGLYPH-13C14 +<U00013C15> /xf0/x93/xb0/x95 EGYPTIAN HIEROGLYPH-13C15 +<U00013C16> /xf0/x93/xb0/x96 EGYPTIAN HIEROGLYPH-13C16 +<U00013C17> /xf0/x93/xb0/x97 EGYPTIAN HIEROGLYPH-13C17 +<U00013C18> /xf0/x93/xb0/x98 EGYPTIAN HIEROGLYPH-13C18 +<U00013C19> /xf0/x93/xb0/x99 EGYPTIAN HIEROGLYPH-13C19 +<U00013C1A> /xf0/x93/xb0/x9a EGYPTIAN HIEROGLYPH-13C1A +<U00013C1B> /xf0/x93/xb0/x9b EGYPTIAN HIEROGLYPH-13C1B +<U00013C1C> /xf0/x93/xb0/x9c EGYPTIAN HIEROGLYPH-13C1C +<U00013C1D> /xf0/x93/xb0/x9d EGYPTIAN HIEROGLYPH-13C1D +<U00013C1E> /xf0/x93/xb0/x9e EGYPTIAN HIEROGLYPH-13C1E +<U00013C1F> /xf0/x93/xb0/x9f EGYPTIAN HIEROGLYPH-13C1F +<U00013C20> /xf0/x93/xb0/xa0 EGYPTIAN HIEROGLYPH-13C20 +<U00013C21> /xf0/x93/xb0/xa1 EGYPTIAN HIEROGLYPH-13C21 +<U00013C22> /xf0/x93/xb0/xa2 EGYPTIAN HIEROGLYPH-13C22 +<U00013C23> /xf0/x93/xb0/xa3 EGYPTIAN HIEROGLYPH-13C23 +<U00013C24> /xf0/x93/xb0/xa4 EGYPTIAN HIEROGLYPH-13C24 +<U00013C25> /xf0/x93/xb0/xa5 EGYPTIAN HIEROGLYPH-13C25 +<U00013C26> /xf0/x93/xb0/xa6 EGYPTIAN HIEROGLYPH-13C26 +<U00013C27> /xf0/x93/xb0/xa7 EGYPTIAN HIEROGLYPH-13C27 +<U00013C28> /xf0/x93/xb0/xa8 EGYPTIAN HIEROGLYPH-13C28 +<U00013C29> /xf0/x93/xb0/xa9 EGYPTIAN HIEROGLYPH-13C29 +<U00013C2A> /xf0/x93/xb0/xaa EGYPTIAN HIEROGLYPH-13C2A +<U00013C2B> /xf0/x93/xb0/xab EGYPTIAN HIEROGLYPH-13C2B +<U00013C2C> /xf0/x93/xb0/xac EGYPTIAN HIEROGLYPH-13C2C +<U00013C2D> /xf0/x93/xb0/xad EGYPTIAN HIEROGLYPH-13C2D +<U00013C2E> /xf0/x93/xb0/xae EGYPTIAN HIEROGLYPH-13C2E +<U00013C2F> /xf0/x93/xb0/xaf EGYPTIAN HIEROGLYPH-13C2F +<U00013C30> /xf0/x93/xb0/xb0 EGYPTIAN HIEROGLYPH-13C30 +<U00013C31> /xf0/x93/xb0/xb1 EGYPTIAN HIEROGLYPH-13C31 +<U00013C32> /xf0/x93/xb0/xb2 EGYPTIAN HIEROGLYPH-13C32 +<U00013C33> /xf0/x93/xb0/xb3 EGYPTIAN HIEROGLYPH-13C33 +<U00013C34> /xf0/x93/xb0/xb4 EGYPTIAN HIEROGLYPH-13C34 +<U00013C35> /xf0/x93/xb0/xb5 EGYPTIAN HIEROGLYPH-13C35 +<U00013C36> /xf0/x93/xb0/xb6 EGYPTIAN HIEROGLYPH-13C36 +<U00013C37> /xf0/x93/xb0/xb7 EGYPTIAN HIEROGLYPH-13C37 +<U00013C38> /xf0/x93/xb0/xb8 EGYPTIAN HIEROGLYPH-13C38 +<U00013C39> /xf0/x93/xb0/xb9 EGYPTIAN HIEROGLYPH-13C39 +<U00013C3A> /xf0/x93/xb0/xba EGYPTIAN HIEROGLYPH-13C3A +<U00013C3B> /xf0/x93/xb0/xbb EGYPTIAN HIEROGLYPH-13C3B +<U00013C3C> /xf0/x93/xb0/xbc EGYPTIAN HIEROGLYPH-13C3C +<U00013C3D> /xf0/x93/xb0/xbd EGYPTIAN HIEROGLYPH-13C3D +<U00013C3E> /xf0/x93/xb0/xbe EGYPTIAN HIEROGLYPH-13C3E +<U00013C3F> /xf0/x93/xb0/xbf EGYPTIAN HIEROGLYPH-13C3F +<U00013C40> /xf0/x93/xb1/x80 EGYPTIAN HIEROGLYPH-13C40 +<U00013C41> /xf0/x93/xb1/x81 EGYPTIAN HIEROGLYPH-13C41 +<U00013C42> /xf0/x93/xb1/x82 EGYPTIAN HIEROGLYPH-13C42 +<U00013C43> /xf0/x93/xb1/x83 EGYPTIAN HIEROGLYPH-13C43 +<U00013C44> /xf0/x93/xb1/x84 EGYPTIAN HIEROGLYPH-13C44 +<U00013C45> /xf0/x93/xb1/x85 EGYPTIAN HIEROGLYPH-13C45 +<U00013C46> /xf0/x93/xb1/x86 EGYPTIAN HIEROGLYPH-13C46 +<U00013C47> /xf0/x93/xb1/x87 EGYPTIAN HIEROGLYPH-13C47 +<U00013C48> /xf0/x93/xb1/x88 EGYPTIAN HIEROGLYPH-13C48 +<U00013C49> /xf0/x93/xb1/x89 EGYPTIAN HIEROGLYPH-13C49 +<U00013C4A> /xf0/x93/xb1/x8a EGYPTIAN HIEROGLYPH-13C4A +<U00013C4B> /xf0/x93/xb1/x8b EGYPTIAN HIEROGLYPH-13C4B +<U00013C4C> /xf0/x93/xb1/x8c EGYPTIAN HIEROGLYPH-13C4C +<U00013C4D> /xf0/x93/xb1/x8d EGYPTIAN HIEROGLYPH-13C4D +<U00013C4E> /xf0/x93/xb1/x8e EGYPTIAN HIEROGLYPH-13C4E +<U00013C4F> /xf0/x93/xb1/x8f EGYPTIAN HIEROGLYPH-13C4F +<U00013C50> /xf0/x93/xb1/x90 EGYPTIAN HIEROGLYPH-13C50 +<U00013C51> /xf0/x93/xb1/x91 EGYPTIAN HIEROGLYPH-13C51 +<U00013C52> /xf0/x93/xb1/x92 EGYPTIAN HIEROGLYPH-13C52 +<U00013C53> /xf0/x93/xb1/x93 EGYPTIAN HIEROGLYPH-13C53 +<U00013C54> /xf0/x93/xb1/x94 EGYPTIAN HIEROGLYPH-13C54 +<U00013C55> /xf0/x93/xb1/x95 EGYPTIAN HIEROGLYPH-13C55 +<U00013C56> /xf0/x93/xb1/x96 EGYPTIAN HIEROGLYPH-13C56 +<U00013C57> /xf0/x93/xb1/x97 EGYPTIAN HIEROGLYPH-13C57 +<U00013C58> /xf0/x93/xb1/x98 EGYPTIAN HIEROGLYPH-13C58 +<U00013C59> /xf0/x93/xb1/x99 EGYPTIAN HIEROGLYPH-13C59 +<U00013C5A> /xf0/x93/xb1/x9a EGYPTIAN HIEROGLYPH-13C5A +<U00013C5B> /xf0/x93/xb1/x9b EGYPTIAN HIEROGLYPH-13C5B +<U00013C5C> /xf0/x93/xb1/x9c EGYPTIAN HIEROGLYPH-13C5C +<U00013C5D> /xf0/x93/xb1/x9d EGYPTIAN HIEROGLYPH-13C5D +<U00013C5E> /xf0/x93/xb1/x9e EGYPTIAN HIEROGLYPH-13C5E +<U00013C5F> /xf0/x93/xb1/x9f EGYPTIAN HIEROGLYPH-13C5F +<U00013C60> /xf0/x93/xb1/xa0 EGYPTIAN HIEROGLYPH-13C60 +<U00013C61> /xf0/x93/xb1/xa1 EGYPTIAN HIEROGLYPH-13C61 +<U00013C62> /xf0/x93/xb1/xa2 EGYPTIAN HIEROGLYPH-13C62 +<U00013C63> /xf0/x93/xb1/xa3 EGYPTIAN HIEROGLYPH-13C63 +<U00013C64> /xf0/x93/xb1/xa4 EGYPTIAN HIEROGLYPH-13C64 +<U00013C65> /xf0/x93/xb1/xa5 EGYPTIAN HIEROGLYPH-13C65 +<U00013C66> /xf0/x93/xb1/xa6 EGYPTIAN HIEROGLYPH-13C66 +<U00013C67> /xf0/x93/xb1/xa7 EGYPTIAN HIEROGLYPH-13C67 +<U00013C68> /xf0/x93/xb1/xa8 EGYPTIAN HIEROGLYPH-13C68 +<U00013C69> /xf0/x93/xb1/xa9 EGYPTIAN HIEROGLYPH-13C69 +<U00013C6A> /xf0/x93/xb1/xaa EGYPTIAN HIEROGLYPH-13C6A +<U00013C6B> /xf0/x93/xb1/xab EGYPTIAN HIEROGLYPH-13C6B +<U00013C6C> /xf0/x93/xb1/xac EGYPTIAN HIEROGLYPH-13C6C +<U00013C6D> /xf0/x93/xb1/xad EGYPTIAN HIEROGLYPH-13C6D +<U00013C6E> /xf0/x93/xb1/xae EGYPTIAN HIEROGLYPH-13C6E +<U00013C6F> /xf0/x93/xb1/xaf EGYPTIAN HIEROGLYPH-13C6F +<U00013C70> /xf0/x93/xb1/xb0 EGYPTIAN HIEROGLYPH-13C70 +<U00013C71> /xf0/x93/xb1/xb1 EGYPTIAN HIEROGLYPH-13C71 +<U00013C72> /xf0/x93/xb1/xb2 EGYPTIAN HIEROGLYPH-13C72 +<U00013C73> /xf0/x93/xb1/xb3 EGYPTIAN HIEROGLYPH-13C73 +<U00013C74> /xf0/x93/xb1/xb4 EGYPTIAN HIEROGLYPH-13C74 +<U00013C75> /xf0/x93/xb1/xb5 EGYPTIAN HIEROGLYPH-13C75 +<U00013C76> /xf0/x93/xb1/xb6 EGYPTIAN HIEROGLYPH-13C76 +<U00013C77> /xf0/x93/xb1/xb7 EGYPTIAN HIEROGLYPH-13C77 +<U00013C78> /xf0/x93/xb1/xb8 EGYPTIAN HIEROGLYPH-13C78 +<U00013C79> /xf0/x93/xb1/xb9 EGYPTIAN HIEROGLYPH-13C79 +<U00013C7A> /xf0/x93/xb1/xba EGYPTIAN HIEROGLYPH-13C7A +<U00013C7B> /xf0/x93/xb1/xbb EGYPTIAN HIEROGLYPH-13C7B +<U00013C7C> /xf0/x93/xb1/xbc EGYPTIAN HIEROGLYPH-13C7C +<U00013C7D> /xf0/x93/xb1/xbd EGYPTIAN HIEROGLYPH-13C7D +<U00013C7E> /xf0/x93/xb1/xbe EGYPTIAN HIEROGLYPH-13C7E +<U00013C7F> /xf0/x93/xb1/xbf EGYPTIAN HIEROGLYPH-13C7F +<U00013C80> /xf0/x93/xb2/x80 EGYPTIAN HIEROGLYPH-13C80 +<U00013C81> /xf0/x93/xb2/x81 EGYPTIAN HIEROGLYPH-13C81 +<U00013C82> /xf0/x93/xb2/x82 EGYPTIAN HIEROGLYPH-13C82 +<U00013C83> /xf0/x93/xb2/x83 EGYPTIAN HIEROGLYPH-13C83 +<U00013C84> /xf0/x93/xb2/x84 EGYPTIAN HIEROGLYPH-13C84 +<U00013C85> /xf0/x93/xb2/x85 EGYPTIAN HIEROGLYPH-13C85 +<U00013C86> /xf0/x93/xb2/x86 EGYPTIAN HIEROGLYPH-13C86 +<U00013C87> /xf0/x93/xb2/x87 EGYPTIAN HIEROGLYPH-13C87 +<U00013C88> /xf0/x93/xb2/x88 EGYPTIAN HIEROGLYPH-13C88 +<U00013C89> /xf0/x93/xb2/x89 EGYPTIAN HIEROGLYPH-13C89 +<U00013C8A> /xf0/x93/xb2/x8a EGYPTIAN HIEROGLYPH-13C8A +<U00013C8B> /xf0/x93/xb2/x8b EGYPTIAN HIEROGLYPH-13C8B +<U00013C8C> /xf0/x93/xb2/x8c EGYPTIAN HIEROGLYPH-13C8C +<U00013C8D> /xf0/x93/xb2/x8d EGYPTIAN HIEROGLYPH-13C8D +<U00013C8E> /xf0/x93/xb2/x8e EGYPTIAN HIEROGLYPH-13C8E +<U00013C8F> /xf0/x93/xb2/x8f EGYPTIAN HIEROGLYPH-13C8F +<U00013C90> /xf0/x93/xb2/x90 EGYPTIAN HIEROGLYPH-13C90 +<U00013C91> /xf0/x93/xb2/x91 EGYPTIAN HIEROGLYPH-13C91 +<U00013C92> /xf0/x93/xb2/x92 EGYPTIAN HIEROGLYPH-13C92 +<U00013C93> /xf0/x93/xb2/x93 EGYPTIAN HIEROGLYPH-13C93 +<U00013C94> /xf0/x93/xb2/x94 EGYPTIAN HIEROGLYPH-13C94 +<U00013C95> /xf0/x93/xb2/x95 EGYPTIAN HIEROGLYPH-13C95 +<U00013C96> /xf0/x93/xb2/x96 EGYPTIAN HIEROGLYPH-13C96 +<U00013C97> /xf0/x93/xb2/x97 EGYPTIAN HIEROGLYPH-13C97 +<U00013C98> /xf0/x93/xb2/x98 EGYPTIAN HIEROGLYPH-13C98 +<U00013C99> /xf0/x93/xb2/x99 EGYPTIAN HIEROGLYPH-13C99 +<U00013C9A> /xf0/x93/xb2/x9a EGYPTIAN HIEROGLYPH-13C9A +<U00013C9B> /xf0/x93/xb2/x9b EGYPTIAN HIEROGLYPH-13C9B +<U00013C9C> /xf0/x93/xb2/x9c EGYPTIAN HIEROGLYPH-13C9C +<U00013C9D> /xf0/x93/xb2/x9d EGYPTIAN HIEROGLYPH-13C9D +<U00013C9E> /xf0/x93/xb2/x9e EGYPTIAN HIEROGLYPH-13C9E +<U00013C9F> /xf0/x93/xb2/x9f EGYPTIAN HIEROGLYPH-13C9F +<U00013CA0> /xf0/x93/xb2/xa0 EGYPTIAN HIEROGLYPH-13CA0 +<U00013CA1> /xf0/x93/xb2/xa1 EGYPTIAN HIEROGLYPH-13CA1 +<U00013CA2> /xf0/x93/xb2/xa2 EGYPTIAN HIEROGLYPH-13CA2 +<U00013CA3> /xf0/x93/xb2/xa3 EGYPTIAN HIEROGLYPH-13CA3 +<U00013CA4> /xf0/x93/xb2/xa4 EGYPTIAN HIEROGLYPH-13CA4 +<U00013CA5> /xf0/x93/xb2/xa5 EGYPTIAN HIEROGLYPH-13CA5 +<U00013CA6> /xf0/x93/xb2/xa6 EGYPTIAN HIEROGLYPH-13CA6 +<U00013CA7> /xf0/x93/xb2/xa7 EGYPTIAN HIEROGLYPH-13CA7 +<U00013CA8> /xf0/x93/xb2/xa8 EGYPTIAN HIEROGLYPH-13CA8 +<U00013CA9> /xf0/x93/xb2/xa9 EGYPTIAN HIEROGLYPH-13CA9 +<U00013CAA> /xf0/x93/xb2/xaa EGYPTIAN HIEROGLYPH-13CAA +<U00013CAB> /xf0/x93/xb2/xab EGYPTIAN HIEROGLYPH-13CAB +<U00013CAC> /xf0/x93/xb2/xac EGYPTIAN HIEROGLYPH-13CAC +<U00013CAD> /xf0/x93/xb2/xad EGYPTIAN HIEROGLYPH-13CAD +<U00013CAE> /xf0/x93/xb2/xae EGYPTIAN HIEROGLYPH-13CAE +<U00013CAF> /xf0/x93/xb2/xaf EGYPTIAN HIEROGLYPH-13CAF +<U00013CB0> /xf0/x93/xb2/xb0 EGYPTIAN HIEROGLYPH-13CB0 +<U00013CB1> /xf0/x93/xb2/xb1 EGYPTIAN HIEROGLYPH-13CB1 +<U00013CB2> /xf0/x93/xb2/xb2 EGYPTIAN HIEROGLYPH-13CB2 +<U00013CB3> /xf0/x93/xb2/xb3 EGYPTIAN HIEROGLYPH-13CB3 +<U00013CB4> /xf0/x93/xb2/xb4 EGYPTIAN HIEROGLYPH-13CB4 +<U00013CB5> /xf0/x93/xb2/xb5 EGYPTIAN HIEROGLYPH-13CB5 +<U00013CB6> /xf0/x93/xb2/xb6 EGYPTIAN HIEROGLYPH-13CB6 +<U00013CB7> /xf0/x93/xb2/xb7 EGYPTIAN HIEROGLYPH-13CB7 +<U00013CB8> /xf0/x93/xb2/xb8 EGYPTIAN HIEROGLYPH-13CB8 +<U00013CB9> /xf0/x93/xb2/xb9 EGYPTIAN HIEROGLYPH-13CB9 +<U00013CBA> /xf0/x93/xb2/xba EGYPTIAN HIEROGLYPH-13CBA +<U00013CBB> /xf0/x93/xb2/xbb EGYPTIAN HIEROGLYPH-13CBB +<U00013CBC> /xf0/x93/xb2/xbc EGYPTIAN HIEROGLYPH-13CBC +<U00013CBD> /xf0/x93/xb2/xbd EGYPTIAN HIEROGLYPH-13CBD +<U00013CBE> /xf0/x93/xb2/xbe EGYPTIAN HIEROGLYPH-13CBE +<U00013CBF> /xf0/x93/xb2/xbf EGYPTIAN HIEROGLYPH-13CBF +<U00013CC0> /xf0/x93/xb3/x80 EGYPTIAN HIEROGLYPH-13CC0 +<U00013CC1> /xf0/x93/xb3/x81 EGYPTIAN HIEROGLYPH-13CC1 +<U00013CC2> /xf0/x93/xb3/x82 EGYPTIAN HIEROGLYPH-13CC2 +<U00013CC3> /xf0/x93/xb3/x83 EGYPTIAN HIEROGLYPH-13CC3 +<U00013CC4> /xf0/x93/xb3/x84 EGYPTIAN HIEROGLYPH-13CC4 +<U00013CC5> /xf0/x93/xb3/x85 EGYPTIAN HIEROGLYPH-13CC5 +<U00013CC6> /xf0/x93/xb3/x86 EGYPTIAN HIEROGLYPH-13CC6 +<U00013CC7> /xf0/x93/xb3/x87 EGYPTIAN HIEROGLYPH-13CC7 +<U00013CC8> /xf0/x93/xb3/x88 EGYPTIAN HIEROGLYPH-13CC8 +<U00013CC9> /xf0/x93/xb3/x89 EGYPTIAN HIEROGLYPH-13CC9 +<U00013CCA> /xf0/x93/xb3/x8a EGYPTIAN HIEROGLYPH-13CCA +<U00013CCB> /xf0/x93/xb3/x8b EGYPTIAN HIEROGLYPH-13CCB +<U00013CCC> /xf0/x93/xb3/x8c EGYPTIAN HIEROGLYPH-13CCC +<U00013CCD> /xf0/x93/xb3/x8d EGYPTIAN HIEROGLYPH-13CCD +<U00013CCE> /xf0/x93/xb3/x8e EGYPTIAN HIEROGLYPH-13CCE +<U00013CCF> /xf0/x93/xb3/x8f EGYPTIAN HIEROGLYPH-13CCF +<U00013CD0> /xf0/x93/xb3/x90 EGYPTIAN HIEROGLYPH-13CD0 +<U00013CD1> /xf0/x93/xb3/x91 EGYPTIAN HIEROGLYPH-13CD1 +<U00013CD2> /xf0/x93/xb3/x92 EGYPTIAN HIEROGLYPH-13CD2 +<U00013CD3> /xf0/x93/xb3/x93 EGYPTIAN HIEROGLYPH-13CD3 +<U00013CD4> /xf0/x93/xb3/x94 EGYPTIAN HIEROGLYPH-13CD4 +<U00013CD5> /xf0/x93/xb3/x95 EGYPTIAN HIEROGLYPH-13CD5 +<U00013CD6> /xf0/x93/xb3/x96 EGYPTIAN HIEROGLYPH-13CD6 +<U00013CD7> /xf0/x93/xb3/x97 EGYPTIAN HIEROGLYPH-13CD7 +<U00013CD8> /xf0/x93/xb3/x98 EGYPTIAN HIEROGLYPH-13CD8 +<U00013CD9> /xf0/x93/xb3/x99 EGYPTIAN HIEROGLYPH-13CD9 +<U00013CDA> /xf0/x93/xb3/x9a EGYPTIAN HIEROGLYPH-13CDA +<U00013CDB> /xf0/x93/xb3/x9b EGYPTIAN HIEROGLYPH-13CDB +<U00013CDC> /xf0/x93/xb3/x9c EGYPTIAN HIEROGLYPH-13CDC +<U00013CDD> /xf0/x93/xb3/x9d EGYPTIAN HIEROGLYPH-13CDD +<U00013CDE> /xf0/x93/xb3/x9e EGYPTIAN HIEROGLYPH-13CDE +<U00013CDF> /xf0/x93/xb3/x9f EGYPTIAN HIEROGLYPH-13CDF +<U00013CE0> /xf0/x93/xb3/xa0 EGYPTIAN HIEROGLYPH-13CE0 +<U00013CE1> /xf0/x93/xb3/xa1 EGYPTIAN HIEROGLYPH-13CE1 +<U00013CE2> /xf0/x93/xb3/xa2 EGYPTIAN HIEROGLYPH-13CE2 +<U00013CE3> /xf0/x93/xb3/xa3 EGYPTIAN HIEROGLYPH-13CE3 +<U00013CE4> /xf0/x93/xb3/xa4 EGYPTIAN HIEROGLYPH-13CE4 +<U00013CE5> /xf0/x93/xb3/xa5 EGYPTIAN HIEROGLYPH-13CE5 +<U00013CE6> /xf0/x93/xb3/xa6 EGYPTIAN HIEROGLYPH-13CE6 +<U00013CE7> /xf0/x93/xb3/xa7 EGYPTIAN HIEROGLYPH-13CE7 +<U00013CE8> /xf0/x93/xb3/xa8 EGYPTIAN HIEROGLYPH-13CE8 +<U00013CE9> /xf0/x93/xb3/xa9 EGYPTIAN HIEROGLYPH-13CE9 +<U00013CEA> /xf0/x93/xb3/xaa EGYPTIAN HIEROGLYPH-13CEA +<U00013CEB> /xf0/x93/xb3/xab EGYPTIAN HIEROGLYPH-13CEB +<U00013CEC> /xf0/x93/xb3/xac EGYPTIAN HIEROGLYPH-13CEC +<U00013CED> /xf0/x93/xb3/xad EGYPTIAN HIEROGLYPH-13CED +<U00013CEE> /xf0/x93/xb3/xae EGYPTIAN HIEROGLYPH-13CEE +<U00013CEF> /xf0/x93/xb3/xaf EGYPTIAN HIEROGLYPH-13CEF +<U00013CF0> /xf0/x93/xb3/xb0 EGYPTIAN HIEROGLYPH-13CF0 +<U00013CF1> /xf0/x93/xb3/xb1 EGYPTIAN HIEROGLYPH-13CF1 +<U00013CF2> /xf0/x93/xb3/xb2 EGYPTIAN HIEROGLYPH-13CF2 +<U00013CF3> /xf0/x93/xb3/xb3 EGYPTIAN HIEROGLYPH-13CF3 +<U00013CF4> /xf0/x93/xb3/xb4 EGYPTIAN HIEROGLYPH-13CF4 +<U00013CF5> /xf0/x93/xb3/xb5 EGYPTIAN HIEROGLYPH-13CF5 +<U00013CF6> /xf0/x93/xb3/xb6 EGYPTIAN HIEROGLYPH-13CF6 +<U00013CF7> /xf0/x93/xb3/xb7 EGYPTIAN HIEROGLYPH-13CF7 +<U00013CF8> /xf0/x93/xb3/xb8 EGYPTIAN HIEROGLYPH-13CF8 +<U00013CF9> /xf0/x93/xb3/xb9 EGYPTIAN HIEROGLYPH-13CF9 +<U00013CFA> /xf0/x93/xb3/xba EGYPTIAN HIEROGLYPH-13CFA +<U00013CFB> /xf0/x93/xb3/xbb EGYPTIAN HIEROGLYPH-13CFB +<U00013CFC> /xf0/x93/xb3/xbc EGYPTIAN HIEROGLYPH-13CFC +<U00013CFD> /xf0/x93/xb3/xbd EGYPTIAN HIEROGLYPH-13CFD +<U00013CFE> /xf0/x93/xb3/xbe EGYPTIAN HIEROGLYPH-13CFE +<U00013CFF> /xf0/x93/xb3/xbf EGYPTIAN HIEROGLYPH-13CFF +<U00013D00> /xf0/x93/xb4/x80 EGYPTIAN HIEROGLYPH-13D00 +<U00013D01> /xf0/x93/xb4/x81 EGYPTIAN HIEROGLYPH-13D01 +<U00013D02> /xf0/x93/xb4/x82 EGYPTIAN HIEROGLYPH-13D02 +<U00013D03> /xf0/x93/xb4/x83 EGYPTIAN HIEROGLYPH-13D03 +<U00013D04> /xf0/x93/xb4/x84 EGYPTIAN HIEROGLYPH-13D04 +<U00013D05> /xf0/x93/xb4/x85 EGYPTIAN HIEROGLYPH-13D05 +<U00013D06> /xf0/x93/xb4/x86 EGYPTIAN HIEROGLYPH-13D06 +<U00013D07> /xf0/x93/xb4/x87 EGYPTIAN HIEROGLYPH-13D07 +<U00013D08> /xf0/x93/xb4/x88 EGYPTIAN HIEROGLYPH-13D08 +<U00013D09> /xf0/x93/xb4/x89 EGYPTIAN HIEROGLYPH-13D09 +<U00013D0A> /xf0/x93/xb4/x8a EGYPTIAN HIEROGLYPH-13D0A +<U00013D0B> /xf0/x93/xb4/x8b EGYPTIAN HIEROGLYPH-13D0B +<U00013D0C> /xf0/x93/xb4/x8c EGYPTIAN HIEROGLYPH-13D0C +<U00013D0D> /xf0/x93/xb4/x8d EGYPTIAN HIEROGLYPH-13D0D +<U00013D0E> /xf0/x93/xb4/x8e EGYPTIAN HIEROGLYPH-13D0E +<U00013D0F> /xf0/x93/xb4/x8f EGYPTIAN HIEROGLYPH-13D0F +<U00013D10> /xf0/x93/xb4/x90 EGYPTIAN HIEROGLYPH-13D10 +<U00013D11> /xf0/x93/xb4/x91 EGYPTIAN HIEROGLYPH-13D11 +<U00013D12> /xf0/x93/xb4/x92 EGYPTIAN HIEROGLYPH-13D12 +<U00013D13> /xf0/x93/xb4/x93 EGYPTIAN HIEROGLYPH-13D13 +<U00013D14> /xf0/x93/xb4/x94 EGYPTIAN HIEROGLYPH-13D14 +<U00013D15> /xf0/x93/xb4/x95 EGYPTIAN HIEROGLYPH-13D15 +<U00013D16> /xf0/x93/xb4/x96 EGYPTIAN HIEROGLYPH-13D16 +<U00013D17> /xf0/x93/xb4/x97 EGYPTIAN HIEROGLYPH-13D17 +<U00013D18> /xf0/x93/xb4/x98 EGYPTIAN HIEROGLYPH-13D18 +<U00013D19> /xf0/x93/xb4/x99 EGYPTIAN HIEROGLYPH-13D19 +<U00013D1A> /xf0/x93/xb4/x9a EGYPTIAN HIEROGLYPH-13D1A +<U00013D1B> /xf0/x93/xb4/x9b EGYPTIAN HIEROGLYPH-13D1B +<U00013D1C> /xf0/x93/xb4/x9c EGYPTIAN HIEROGLYPH-13D1C +<U00013D1D> /xf0/x93/xb4/x9d EGYPTIAN HIEROGLYPH-13D1D +<U00013D1E> /xf0/x93/xb4/x9e EGYPTIAN HIEROGLYPH-13D1E +<U00013D1F> /xf0/x93/xb4/x9f EGYPTIAN HIEROGLYPH-13D1F +<U00013D20> /xf0/x93/xb4/xa0 EGYPTIAN HIEROGLYPH-13D20 +<U00013D21> /xf0/x93/xb4/xa1 EGYPTIAN HIEROGLYPH-13D21 +<U00013D22> /xf0/x93/xb4/xa2 EGYPTIAN HIEROGLYPH-13D22 +<U00013D23> /xf0/x93/xb4/xa3 EGYPTIAN HIEROGLYPH-13D23 +<U00013D24> /xf0/x93/xb4/xa4 EGYPTIAN HIEROGLYPH-13D24 +<U00013D25> /xf0/x93/xb4/xa5 EGYPTIAN HIEROGLYPH-13D25 +<U00013D26> /xf0/x93/xb4/xa6 EGYPTIAN HIEROGLYPH-13D26 +<U00013D27> /xf0/x93/xb4/xa7 EGYPTIAN HIEROGLYPH-13D27 +<U00013D28> /xf0/x93/xb4/xa8 EGYPTIAN HIEROGLYPH-13D28 +<U00013D29> /xf0/x93/xb4/xa9 EGYPTIAN HIEROGLYPH-13D29 +<U00013D2A> /xf0/x93/xb4/xaa EGYPTIAN HIEROGLYPH-13D2A +<U00013D2B> /xf0/x93/xb4/xab EGYPTIAN HIEROGLYPH-13D2B +<U00013D2C> /xf0/x93/xb4/xac EGYPTIAN HIEROGLYPH-13D2C +<U00013D2D> /xf0/x93/xb4/xad EGYPTIAN HIEROGLYPH-13D2D +<U00013D2E> /xf0/x93/xb4/xae EGYPTIAN HIEROGLYPH-13D2E +<U00013D2F> /xf0/x93/xb4/xaf EGYPTIAN HIEROGLYPH-13D2F +<U00013D30> /xf0/x93/xb4/xb0 EGYPTIAN HIEROGLYPH-13D30 +<U00013D31> /xf0/x93/xb4/xb1 EGYPTIAN HIEROGLYPH-13D31 +<U00013D32> /xf0/x93/xb4/xb2 EGYPTIAN HIEROGLYPH-13D32 +<U00013D33> /xf0/x93/xb4/xb3 EGYPTIAN HIEROGLYPH-13D33 +<U00013D34> /xf0/x93/xb4/xb4 EGYPTIAN HIEROGLYPH-13D34 +<U00013D35> /xf0/x93/xb4/xb5 EGYPTIAN HIEROGLYPH-13D35 +<U00013D36> /xf0/x93/xb4/xb6 EGYPTIAN HIEROGLYPH-13D36 +<U00013D37> /xf0/x93/xb4/xb7 EGYPTIAN HIEROGLYPH-13D37 +<U00013D38> /xf0/x93/xb4/xb8 EGYPTIAN HIEROGLYPH-13D38 +<U00013D39> /xf0/x93/xb4/xb9 EGYPTIAN HIEROGLYPH-13D39 +<U00013D3A> /xf0/x93/xb4/xba EGYPTIAN HIEROGLYPH-13D3A +<U00013D3B> /xf0/x93/xb4/xbb EGYPTIAN HIEROGLYPH-13D3B +<U00013D3C> /xf0/x93/xb4/xbc EGYPTIAN HIEROGLYPH-13D3C +<U00013D3D> /xf0/x93/xb4/xbd EGYPTIAN HIEROGLYPH-13D3D +<U00013D3E> /xf0/x93/xb4/xbe EGYPTIAN HIEROGLYPH-13D3E +<U00013D3F> /xf0/x93/xb4/xbf EGYPTIAN HIEROGLYPH-13D3F +<U00013D40> /xf0/x93/xb5/x80 EGYPTIAN HIEROGLYPH-13D40 +<U00013D41> /xf0/x93/xb5/x81 EGYPTIAN HIEROGLYPH-13D41 +<U00013D42> /xf0/x93/xb5/x82 EGYPTIAN HIEROGLYPH-13D42 +<U00013D43> /xf0/x93/xb5/x83 EGYPTIAN HIEROGLYPH-13D43 +<U00013D44> /xf0/x93/xb5/x84 EGYPTIAN HIEROGLYPH-13D44 +<U00013D45> /xf0/x93/xb5/x85 EGYPTIAN HIEROGLYPH-13D45 +<U00013D46> /xf0/x93/xb5/x86 EGYPTIAN HIEROGLYPH-13D46 +<U00013D47> /xf0/x93/xb5/x87 EGYPTIAN HIEROGLYPH-13D47 +<U00013D48> /xf0/x93/xb5/x88 EGYPTIAN HIEROGLYPH-13D48 +<U00013D49> /xf0/x93/xb5/x89 EGYPTIAN HIEROGLYPH-13D49 +<U00013D4A> /xf0/x93/xb5/x8a EGYPTIAN HIEROGLYPH-13D4A +<U00013D4B> /xf0/x93/xb5/x8b EGYPTIAN HIEROGLYPH-13D4B +<U00013D4C> /xf0/x93/xb5/x8c EGYPTIAN HIEROGLYPH-13D4C +<U00013D4D> /xf0/x93/xb5/x8d EGYPTIAN HIEROGLYPH-13D4D +<U00013D4E> /xf0/x93/xb5/x8e EGYPTIAN HIEROGLYPH-13D4E +<U00013D4F> /xf0/x93/xb5/x8f EGYPTIAN HIEROGLYPH-13D4F +<U00013D50> /xf0/x93/xb5/x90 EGYPTIAN HIEROGLYPH-13D50 +<U00013D51> /xf0/x93/xb5/x91 EGYPTIAN HIEROGLYPH-13D51 +<U00013D52> /xf0/x93/xb5/x92 EGYPTIAN HIEROGLYPH-13D52 +<U00013D53> /xf0/x93/xb5/x93 EGYPTIAN HIEROGLYPH-13D53 +<U00013D54> /xf0/x93/xb5/x94 EGYPTIAN HIEROGLYPH-13D54 +<U00013D55> /xf0/x93/xb5/x95 EGYPTIAN HIEROGLYPH-13D55 +<U00013D56> /xf0/x93/xb5/x96 EGYPTIAN HIEROGLYPH-13D56 +<U00013D57> /xf0/x93/xb5/x97 EGYPTIAN HIEROGLYPH-13D57 +<U00013D58> /xf0/x93/xb5/x98 EGYPTIAN HIEROGLYPH-13D58 +<U00013D59> /xf0/x93/xb5/x99 EGYPTIAN HIEROGLYPH-13D59 +<U00013D5A> /xf0/x93/xb5/x9a EGYPTIAN HIEROGLYPH-13D5A +<U00013D5B> /xf0/x93/xb5/x9b EGYPTIAN HIEROGLYPH-13D5B +<U00013D5C> /xf0/x93/xb5/x9c EGYPTIAN HIEROGLYPH-13D5C +<U00013D5D> /xf0/x93/xb5/x9d EGYPTIAN HIEROGLYPH-13D5D +<U00013D5E> /xf0/x93/xb5/x9e EGYPTIAN HIEROGLYPH-13D5E +<U00013D5F> /xf0/x93/xb5/x9f EGYPTIAN HIEROGLYPH-13D5F +<U00013D60> /xf0/x93/xb5/xa0 EGYPTIAN HIEROGLYPH-13D60 +<U00013D61> /xf0/x93/xb5/xa1 EGYPTIAN HIEROGLYPH-13D61 +<U00013D62> /xf0/x93/xb5/xa2 EGYPTIAN HIEROGLYPH-13D62 +<U00013D63> /xf0/x93/xb5/xa3 EGYPTIAN HIEROGLYPH-13D63 +<U00013D64> /xf0/x93/xb5/xa4 EGYPTIAN HIEROGLYPH-13D64 +<U00013D65> /xf0/x93/xb5/xa5 EGYPTIAN HIEROGLYPH-13D65 +<U00013D66> /xf0/x93/xb5/xa6 EGYPTIAN HIEROGLYPH-13D66 +<U00013D67> /xf0/x93/xb5/xa7 EGYPTIAN HIEROGLYPH-13D67 +<U00013D68> /xf0/x93/xb5/xa8 EGYPTIAN HIEROGLYPH-13D68 +<U00013D69> /xf0/x93/xb5/xa9 EGYPTIAN HIEROGLYPH-13D69 +<U00013D6A> /xf0/x93/xb5/xaa EGYPTIAN HIEROGLYPH-13D6A +<U00013D6B> /xf0/x93/xb5/xab EGYPTIAN HIEROGLYPH-13D6B +<U00013D6C> /xf0/x93/xb5/xac EGYPTIAN HIEROGLYPH-13D6C +<U00013D6D> /xf0/x93/xb5/xad EGYPTIAN HIEROGLYPH-13D6D +<U00013D6E> /xf0/x93/xb5/xae EGYPTIAN HIEROGLYPH-13D6E +<U00013D6F> /xf0/x93/xb5/xaf EGYPTIAN HIEROGLYPH-13D6F +<U00013D70> /xf0/x93/xb5/xb0 EGYPTIAN HIEROGLYPH-13D70 +<U00013D71> /xf0/x93/xb5/xb1 EGYPTIAN HIEROGLYPH-13D71 +<U00013D72> /xf0/x93/xb5/xb2 EGYPTIAN HIEROGLYPH-13D72 +<U00013D73> /xf0/x93/xb5/xb3 EGYPTIAN HIEROGLYPH-13D73 +<U00013D74> /xf0/x93/xb5/xb4 EGYPTIAN HIEROGLYPH-13D74 +<U00013D75> /xf0/x93/xb5/xb5 EGYPTIAN HIEROGLYPH-13D75 +<U00013D76> /xf0/x93/xb5/xb6 EGYPTIAN HIEROGLYPH-13D76 +<U00013D77> /xf0/x93/xb5/xb7 EGYPTIAN HIEROGLYPH-13D77 +<U00013D78> /xf0/x93/xb5/xb8 EGYPTIAN HIEROGLYPH-13D78 +<U00013D79> /xf0/x93/xb5/xb9 EGYPTIAN HIEROGLYPH-13D79 +<U00013D7A> /xf0/x93/xb5/xba EGYPTIAN HIEROGLYPH-13D7A +<U00013D7B> /xf0/x93/xb5/xbb EGYPTIAN HIEROGLYPH-13D7B +<U00013D7C> /xf0/x93/xb5/xbc EGYPTIAN HIEROGLYPH-13D7C +<U00013D7D> /xf0/x93/xb5/xbd EGYPTIAN HIEROGLYPH-13D7D +<U00013D7E> /xf0/x93/xb5/xbe EGYPTIAN HIEROGLYPH-13D7E +<U00013D7F> /xf0/x93/xb5/xbf EGYPTIAN HIEROGLYPH-13D7F +<U00013D80> /xf0/x93/xb6/x80 EGYPTIAN HIEROGLYPH-13D80 +<U00013D81> /xf0/x93/xb6/x81 EGYPTIAN HIEROGLYPH-13D81 +<U00013D82> /xf0/x93/xb6/x82 EGYPTIAN HIEROGLYPH-13D82 +<U00013D83> /xf0/x93/xb6/x83 EGYPTIAN HIEROGLYPH-13D83 +<U00013D84> /xf0/x93/xb6/x84 EGYPTIAN HIEROGLYPH-13D84 +<U00013D85> /xf0/x93/xb6/x85 EGYPTIAN HIEROGLYPH-13D85 +<U00013D86> /xf0/x93/xb6/x86 EGYPTIAN HIEROGLYPH-13D86 +<U00013D87> /xf0/x93/xb6/x87 EGYPTIAN HIEROGLYPH-13D87 +<U00013D88> /xf0/x93/xb6/x88 EGYPTIAN HIEROGLYPH-13D88 +<U00013D89> /xf0/x93/xb6/x89 EGYPTIAN HIEROGLYPH-13D89 +<U00013D8A> /xf0/x93/xb6/x8a EGYPTIAN HIEROGLYPH-13D8A +<U00013D8B> /xf0/x93/xb6/x8b EGYPTIAN HIEROGLYPH-13D8B +<U00013D8C> /xf0/x93/xb6/x8c EGYPTIAN HIEROGLYPH-13D8C +<U00013D8D> /xf0/x93/xb6/x8d EGYPTIAN HIEROGLYPH-13D8D +<U00013D8E> /xf0/x93/xb6/x8e EGYPTIAN HIEROGLYPH-13D8E +<U00013D8F> /xf0/x93/xb6/x8f EGYPTIAN HIEROGLYPH-13D8F +<U00013D90> /xf0/x93/xb6/x90 EGYPTIAN HIEROGLYPH-13D90 +<U00013D91> /xf0/x93/xb6/x91 EGYPTIAN HIEROGLYPH-13D91 +<U00013D92> /xf0/x93/xb6/x92 EGYPTIAN HIEROGLYPH-13D92 +<U00013D93> /xf0/x93/xb6/x93 EGYPTIAN HIEROGLYPH-13D93 +<U00013D94> /xf0/x93/xb6/x94 EGYPTIAN HIEROGLYPH-13D94 +<U00013D95> /xf0/x93/xb6/x95 EGYPTIAN HIEROGLYPH-13D95 +<U00013D96> /xf0/x93/xb6/x96 EGYPTIAN HIEROGLYPH-13D96 +<U00013D97> /xf0/x93/xb6/x97 EGYPTIAN HIEROGLYPH-13D97 +<U00013D98> /xf0/x93/xb6/x98 EGYPTIAN HIEROGLYPH-13D98 +<U00013D99> /xf0/x93/xb6/x99 EGYPTIAN HIEROGLYPH-13D99 +<U00013D9A> /xf0/x93/xb6/x9a EGYPTIAN HIEROGLYPH-13D9A +<U00013D9B> /xf0/x93/xb6/x9b EGYPTIAN HIEROGLYPH-13D9B +<U00013D9C> /xf0/x93/xb6/x9c EGYPTIAN HIEROGLYPH-13D9C +<U00013D9D> /xf0/x93/xb6/x9d EGYPTIAN HIEROGLYPH-13D9D +<U00013D9E> /xf0/x93/xb6/x9e EGYPTIAN HIEROGLYPH-13D9E +<U00013D9F> /xf0/x93/xb6/x9f EGYPTIAN HIEROGLYPH-13D9F +<U00013DA0> /xf0/x93/xb6/xa0 EGYPTIAN HIEROGLYPH-13DA0 +<U00013DA1> /xf0/x93/xb6/xa1 EGYPTIAN HIEROGLYPH-13DA1 +<U00013DA2> /xf0/x93/xb6/xa2 EGYPTIAN HIEROGLYPH-13DA2 +<U00013DA3> /xf0/x93/xb6/xa3 EGYPTIAN HIEROGLYPH-13DA3 +<U00013DA4> /xf0/x93/xb6/xa4 EGYPTIAN HIEROGLYPH-13DA4 +<U00013DA5> /xf0/x93/xb6/xa5 EGYPTIAN HIEROGLYPH-13DA5 +<U00013DA6> /xf0/x93/xb6/xa6 EGYPTIAN HIEROGLYPH-13DA6 +<U00013DA7> /xf0/x93/xb6/xa7 EGYPTIAN HIEROGLYPH-13DA7 +<U00013DA8> /xf0/x93/xb6/xa8 EGYPTIAN HIEROGLYPH-13DA8 +<U00013DA9> /xf0/x93/xb6/xa9 EGYPTIAN HIEROGLYPH-13DA9 +<U00013DAA> /xf0/x93/xb6/xaa EGYPTIAN HIEROGLYPH-13DAA +<U00013DAB> /xf0/x93/xb6/xab EGYPTIAN HIEROGLYPH-13DAB +<U00013DAC> /xf0/x93/xb6/xac EGYPTIAN HIEROGLYPH-13DAC +<U00013DAD> /xf0/x93/xb6/xad EGYPTIAN HIEROGLYPH-13DAD +<U00013DAE> /xf0/x93/xb6/xae EGYPTIAN HIEROGLYPH-13DAE +<U00013DAF> /xf0/x93/xb6/xaf EGYPTIAN HIEROGLYPH-13DAF +<U00013DB0> /xf0/x93/xb6/xb0 EGYPTIAN HIEROGLYPH-13DB0 +<U00013DB1> /xf0/x93/xb6/xb1 EGYPTIAN HIEROGLYPH-13DB1 +<U00013DB2> /xf0/x93/xb6/xb2 EGYPTIAN HIEROGLYPH-13DB2 +<U00013DB3> /xf0/x93/xb6/xb3 EGYPTIAN HIEROGLYPH-13DB3 +<U00013DB4> /xf0/x93/xb6/xb4 EGYPTIAN HIEROGLYPH-13DB4 +<U00013DB5> /xf0/x93/xb6/xb5 EGYPTIAN HIEROGLYPH-13DB5 +<U00013DB6> /xf0/x93/xb6/xb6 EGYPTIAN HIEROGLYPH-13DB6 +<U00013DB7> /xf0/x93/xb6/xb7 EGYPTIAN HIEROGLYPH-13DB7 +<U00013DB8> /xf0/x93/xb6/xb8 EGYPTIAN HIEROGLYPH-13DB8 +<U00013DB9> /xf0/x93/xb6/xb9 EGYPTIAN HIEROGLYPH-13DB9 +<U00013DBA> /xf0/x93/xb6/xba EGYPTIAN HIEROGLYPH-13DBA +<U00013DBB> /xf0/x93/xb6/xbb EGYPTIAN HIEROGLYPH-13DBB +<U00013DBC> /xf0/x93/xb6/xbc EGYPTIAN HIEROGLYPH-13DBC +<U00013DBD> /xf0/x93/xb6/xbd EGYPTIAN HIEROGLYPH-13DBD +<U00013DBE> /xf0/x93/xb6/xbe EGYPTIAN HIEROGLYPH-13DBE +<U00013DBF> /xf0/x93/xb6/xbf EGYPTIAN HIEROGLYPH-13DBF +<U00013DC0> /xf0/x93/xb7/x80 EGYPTIAN HIEROGLYPH-13DC0 +<U00013DC1> /xf0/x93/xb7/x81 EGYPTIAN HIEROGLYPH-13DC1 +<U00013DC2> /xf0/x93/xb7/x82 EGYPTIAN HIEROGLYPH-13DC2 +<U00013DC3> /xf0/x93/xb7/x83 EGYPTIAN HIEROGLYPH-13DC3 +<U00013DC4> /xf0/x93/xb7/x84 EGYPTIAN HIEROGLYPH-13DC4 +<U00013DC5> /xf0/x93/xb7/x85 EGYPTIAN HIEROGLYPH-13DC5 +<U00013DC6> /xf0/x93/xb7/x86 EGYPTIAN HIEROGLYPH-13DC6 +<U00013DC7> /xf0/x93/xb7/x87 EGYPTIAN HIEROGLYPH-13DC7 +<U00013DC8> /xf0/x93/xb7/x88 EGYPTIAN HIEROGLYPH-13DC8 +<U00013DC9> /xf0/x93/xb7/x89 EGYPTIAN HIEROGLYPH-13DC9 +<U00013DCA> /xf0/x93/xb7/x8a EGYPTIAN HIEROGLYPH-13DCA +<U00013DCB> /xf0/x93/xb7/x8b EGYPTIAN HIEROGLYPH-13DCB +<U00013DCC> /xf0/x93/xb7/x8c EGYPTIAN HIEROGLYPH-13DCC +<U00013DCD> /xf0/x93/xb7/x8d EGYPTIAN HIEROGLYPH-13DCD +<U00013DCE> /xf0/x93/xb7/x8e EGYPTIAN HIEROGLYPH-13DCE +<U00013DCF> /xf0/x93/xb7/x8f EGYPTIAN HIEROGLYPH-13DCF +<U00013DD0> /xf0/x93/xb7/x90 EGYPTIAN HIEROGLYPH-13DD0 +<U00013DD1> /xf0/x93/xb7/x91 EGYPTIAN HIEROGLYPH-13DD1 +<U00013DD2> /xf0/x93/xb7/x92 EGYPTIAN HIEROGLYPH-13DD2 +<U00013DD3> /xf0/x93/xb7/x93 EGYPTIAN HIEROGLYPH-13DD3 +<U00013DD4> /xf0/x93/xb7/x94 EGYPTIAN HIEROGLYPH-13DD4 +<U00013DD5> /xf0/x93/xb7/x95 EGYPTIAN HIEROGLYPH-13DD5 +<U00013DD6> /xf0/x93/xb7/x96 EGYPTIAN HIEROGLYPH-13DD6 +<U00013DD7> /xf0/x93/xb7/x97 EGYPTIAN HIEROGLYPH-13DD7 +<U00013DD8> /xf0/x93/xb7/x98 EGYPTIAN HIEROGLYPH-13DD8 +<U00013DD9> /xf0/x93/xb7/x99 EGYPTIAN HIEROGLYPH-13DD9 +<U00013DDA> /xf0/x93/xb7/x9a EGYPTIAN HIEROGLYPH-13DDA +<U00013DDB> /xf0/x93/xb7/x9b EGYPTIAN HIEROGLYPH-13DDB +<U00013DDC> /xf0/x93/xb7/x9c EGYPTIAN HIEROGLYPH-13DDC +<U00013DDD> /xf0/x93/xb7/x9d EGYPTIAN HIEROGLYPH-13DDD +<U00013DDE> /xf0/x93/xb7/x9e EGYPTIAN HIEROGLYPH-13DDE +<U00013DDF> /xf0/x93/xb7/x9f EGYPTIAN HIEROGLYPH-13DDF +<U00013DE0> /xf0/x93/xb7/xa0 EGYPTIAN HIEROGLYPH-13DE0 +<U00013DE1> /xf0/x93/xb7/xa1 EGYPTIAN HIEROGLYPH-13DE1 +<U00013DE2> /xf0/x93/xb7/xa2 EGYPTIAN HIEROGLYPH-13DE2 +<U00013DE3> /xf0/x93/xb7/xa3 EGYPTIAN HIEROGLYPH-13DE3 +<U00013DE4> /xf0/x93/xb7/xa4 EGYPTIAN HIEROGLYPH-13DE4 +<U00013DE5> /xf0/x93/xb7/xa5 EGYPTIAN HIEROGLYPH-13DE5 +<U00013DE6> /xf0/x93/xb7/xa6 EGYPTIAN HIEROGLYPH-13DE6 +<U00013DE7> /xf0/x93/xb7/xa7 EGYPTIAN HIEROGLYPH-13DE7 +<U00013DE8> /xf0/x93/xb7/xa8 EGYPTIAN HIEROGLYPH-13DE8 +<U00013DE9> /xf0/x93/xb7/xa9 EGYPTIAN HIEROGLYPH-13DE9 +<U00013DEA> /xf0/x93/xb7/xaa EGYPTIAN HIEROGLYPH-13DEA +<U00013DEB> /xf0/x93/xb7/xab EGYPTIAN HIEROGLYPH-13DEB +<U00013DEC> /xf0/x93/xb7/xac EGYPTIAN HIEROGLYPH-13DEC +<U00013DED> /xf0/x93/xb7/xad EGYPTIAN HIEROGLYPH-13DED +<U00013DEE> /xf0/x93/xb7/xae EGYPTIAN HIEROGLYPH-13DEE +<U00013DEF> /xf0/x93/xb7/xaf EGYPTIAN HIEROGLYPH-13DEF +<U00013DF0> /xf0/x93/xb7/xb0 EGYPTIAN HIEROGLYPH-13DF0 +<U00013DF1> /xf0/x93/xb7/xb1 EGYPTIAN HIEROGLYPH-13DF1 +<U00013DF2> /xf0/x93/xb7/xb2 EGYPTIAN HIEROGLYPH-13DF2 +<U00013DF3> /xf0/x93/xb7/xb3 EGYPTIAN HIEROGLYPH-13DF3 +<U00013DF4> /xf0/x93/xb7/xb4 EGYPTIAN HIEROGLYPH-13DF4 +<U00013DF5> /xf0/x93/xb7/xb5 EGYPTIAN HIEROGLYPH-13DF5 +<U00013DF6> /xf0/x93/xb7/xb6 EGYPTIAN HIEROGLYPH-13DF6 +<U00013DF7> /xf0/x93/xb7/xb7 EGYPTIAN HIEROGLYPH-13DF7 +<U00013DF8> /xf0/x93/xb7/xb8 EGYPTIAN HIEROGLYPH-13DF8 +<U00013DF9> /xf0/x93/xb7/xb9 EGYPTIAN HIEROGLYPH-13DF9 +<U00013DFA> /xf0/x93/xb7/xba EGYPTIAN HIEROGLYPH-13DFA +<U00013DFB> /xf0/x93/xb7/xbb EGYPTIAN HIEROGLYPH-13DFB +<U00013DFC> /xf0/x93/xb7/xbc EGYPTIAN HIEROGLYPH-13DFC +<U00013DFD> /xf0/x93/xb7/xbd EGYPTIAN HIEROGLYPH-13DFD +<U00013DFE> /xf0/x93/xb7/xbe EGYPTIAN HIEROGLYPH-13DFE +<U00013DFF> /xf0/x93/xb7/xbf EGYPTIAN HIEROGLYPH-13DFF +<U00013E00> /xf0/x93/xb8/x80 EGYPTIAN HIEROGLYPH-13E00 +<U00013E01> /xf0/x93/xb8/x81 EGYPTIAN HIEROGLYPH-13E01 +<U00013E02> /xf0/x93/xb8/x82 EGYPTIAN HIEROGLYPH-13E02 +<U00013E03> /xf0/x93/xb8/x83 EGYPTIAN HIEROGLYPH-13E03 +<U00013E04> /xf0/x93/xb8/x84 EGYPTIAN HIEROGLYPH-13E04 +<U00013E05> /xf0/x93/xb8/x85 EGYPTIAN HIEROGLYPH-13E05 +<U00013E06> /xf0/x93/xb8/x86 EGYPTIAN HIEROGLYPH-13E06 +<U00013E07> /xf0/x93/xb8/x87 EGYPTIAN HIEROGLYPH-13E07 +<U00013E08> /xf0/x93/xb8/x88 EGYPTIAN HIEROGLYPH-13E08 +<U00013E09> /xf0/x93/xb8/x89 EGYPTIAN HIEROGLYPH-13E09 +<U00013E0A> /xf0/x93/xb8/x8a EGYPTIAN HIEROGLYPH-13E0A +<U00013E0B> /xf0/x93/xb8/x8b EGYPTIAN HIEROGLYPH-13E0B +<U00013E0C> /xf0/x93/xb8/x8c EGYPTIAN HIEROGLYPH-13E0C +<U00013E0D> /xf0/x93/xb8/x8d EGYPTIAN HIEROGLYPH-13E0D +<U00013E0E> /xf0/x93/xb8/x8e EGYPTIAN HIEROGLYPH-13E0E +<U00013E0F> /xf0/x93/xb8/x8f EGYPTIAN HIEROGLYPH-13E0F +<U00013E10> /xf0/x93/xb8/x90 EGYPTIAN HIEROGLYPH-13E10 +<U00013E11> /xf0/x93/xb8/x91 EGYPTIAN HIEROGLYPH-13E11 +<U00013E12> /xf0/x93/xb8/x92 EGYPTIAN HIEROGLYPH-13E12 +<U00013E13> /xf0/x93/xb8/x93 EGYPTIAN HIEROGLYPH-13E13 +<U00013E14> /xf0/x93/xb8/x94 EGYPTIAN HIEROGLYPH-13E14 +<U00013E15> /xf0/x93/xb8/x95 EGYPTIAN HIEROGLYPH-13E15 +<U00013E16> /xf0/x93/xb8/x96 EGYPTIAN HIEROGLYPH-13E16 +<U00013E17> /xf0/x93/xb8/x97 EGYPTIAN HIEROGLYPH-13E17 +<U00013E18> /xf0/x93/xb8/x98 EGYPTIAN HIEROGLYPH-13E18 +<U00013E19> /xf0/x93/xb8/x99 EGYPTIAN HIEROGLYPH-13E19 +<U00013E1A> /xf0/x93/xb8/x9a EGYPTIAN HIEROGLYPH-13E1A +<U00013E1B> /xf0/x93/xb8/x9b EGYPTIAN HIEROGLYPH-13E1B +<U00013E1C> /xf0/x93/xb8/x9c EGYPTIAN HIEROGLYPH-13E1C +<U00013E1D> /xf0/x93/xb8/x9d EGYPTIAN HIEROGLYPH-13E1D +<U00013E1E> /xf0/x93/xb8/x9e EGYPTIAN HIEROGLYPH-13E1E +<U00013E1F> /xf0/x93/xb8/x9f EGYPTIAN HIEROGLYPH-13E1F +<U00013E20> /xf0/x93/xb8/xa0 EGYPTIAN HIEROGLYPH-13E20 +<U00013E21> /xf0/x93/xb8/xa1 EGYPTIAN HIEROGLYPH-13E21 +<U00013E22> /xf0/x93/xb8/xa2 EGYPTIAN HIEROGLYPH-13E22 +<U00013E23> /xf0/x93/xb8/xa3 EGYPTIAN HIEROGLYPH-13E23 +<U00013E24> /xf0/x93/xb8/xa4 EGYPTIAN HIEROGLYPH-13E24 +<U00013E25> /xf0/x93/xb8/xa5 EGYPTIAN HIEROGLYPH-13E25 +<U00013E26> /xf0/x93/xb8/xa6 EGYPTIAN HIEROGLYPH-13E26 +<U00013E27> /xf0/x93/xb8/xa7 EGYPTIAN HIEROGLYPH-13E27 +<U00013E28> /xf0/x93/xb8/xa8 EGYPTIAN HIEROGLYPH-13E28 +<U00013E29> /xf0/x93/xb8/xa9 EGYPTIAN HIEROGLYPH-13E29 +<U00013E2A> /xf0/x93/xb8/xaa EGYPTIAN HIEROGLYPH-13E2A +<U00013E2B> /xf0/x93/xb8/xab EGYPTIAN HIEROGLYPH-13E2B +<U00013E2C> /xf0/x93/xb8/xac EGYPTIAN HIEROGLYPH-13E2C +<U00013E2D> /xf0/x93/xb8/xad EGYPTIAN HIEROGLYPH-13E2D +<U00013E2E> /xf0/x93/xb8/xae EGYPTIAN HIEROGLYPH-13E2E +<U00013E2F> /xf0/x93/xb8/xaf EGYPTIAN HIEROGLYPH-13E2F +<U00013E30> /xf0/x93/xb8/xb0 EGYPTIAN HIEROGLYPH-13E30 +<U00013E31> /xf0/x93/xb8/xb1 EGYPTIAN HIEROGLYPH-13E31 +<U00013E32> /xf0/x93/xb8/xb2 EGYPTIAN HIEROGLYPH-13E32 +<U00013E33> /xf0/x93/xb8/xb3 EGYPTIAN HIEROGLYPH-13E33 +<U00013E34> /xf0/x93/xb8/xb4 EGYPTIAN HIEROGLYPH-13E34 +<U00013E35> /xf0/x93/xb8/xb5 EGYPTIAN HIEROGLYPH-13E35 +<U00013E36> /xf0/x93/xb8/xb6 EGYPTIAN HIEROGLYPH-13E36 +<U00013E37> /xf0/x93/xb8/xb7 EGYPTIAN HIEROGLYPH-13E37 +<U00013E38> /xf0/x93/xb8/xb8 EGYPTIAN HIEROGLYPH-13E38 +<U00013E39> /xf0/x93/xb8/xb9 EGYPTIAN HIEROGLYPH-13E39 +<U00013E3A> /xf0/x93/xb8/xba EGYPTIAN HIEROGLYPH-13E3A +<U00013E3B> /xf0/x93/xb8/xbb EGYPTIAN HIEROGLYPH-13E3B +<U00013E3C> /xf0/x93/xb8/xbc EGYPTIAN HIEROGLYPH-13E3C +<U00013E3D> /xf0/x93/xb8/xbd EGYPTIAN HIEROGLYPH-13E3D +<U00013E3E> /xf0/x93/xb8/xbe EGYPTIAN HIEROGLYPH-13E3E +<U00013E3F> /xf0/x93/xb8/xbf EGYPTIAN HIEROGLYPH-13E3F +<U00013E40> /xf0/x93/xb9/x80 EGYPTIAN HIEROGLYPH-13E40 +<U00013E41> /xf0/x93/xb9/x81 EGYPTIAN HIEROGLYPH-13E41 +<U00013E42> /xf0/x93/xb9/x82 EGYPTIAN HIEROGLYPH-13E42 +<U00013E43> /xf0/x93/xb9/x83 EGYPTIAN HIEROGLYPH-13E43 +<U00013E44> /xf0/x93/xb9/x84 EGYPTIAN HIEROGLYPH-13E44 +<U00013E45> /xf0/x93/xb9/x85 EGYPTIAN HIEROGLYPH-13E45 +<U00013E46> /xf0/x93/xb9/x86 EGYPTIAN HIEROGLYPH-13E46 +<U00013E47> /xf0/x93/xb9/x87 EGYPTIAN HIEROGLYPH-13E47 +<U00013E48> /xf0/x93/xb9/x88 EGYPTIAN HIEROGLYPH-13E48 +<U00013E49> /xf0/x93/xb9/x89 EGYPTIAN HIEROGLYPH-13E49 +<U00013E4A> /xf0/x93/xb9/x8a EGYPTIAN HIEROGLYPH-13E4A +<U00013E4B> /xf0/x93/xb9/x8b EGYPTIAN HIEROGLYPH-13E4B +<U00013E4C> /xf0/x93/xb9/x8c EGYPTIAN HIEROGLYPH-13E4C +<U00013E4D> /xf0/x93/xb9/x8d EGYPTIAN HIEROGLYPH-13E4D +<U00013E4E> /xf0/x93/xb9/x8e EGYPTIAN HIEROGLYPH-13E4E +<U00013E4F> /xf0/x93/xb9/x8f EGYPTIAN HIEROGLYPH-13E4F +<U00013E50> /xf0/x93/xb9/x90 EGYPTIAN HIEROGLYPH-13E50 +<U00013E51> /xf0/x93/xb9/x91 EGYPTIAN HIEROGLYPH-13E51 +<U00013E52> /xf0/x93/xb9/x92 EGYPTIAN HIEROGLYPH-13E52 +<U00013E53> /xf0/x93/xb9/x93 EGYPTIAN HIEROGLYPH-13E53 +<U00013E54> /xf0/x93/xb9/x94 EGYPTIAN HIEROGLYPH-13E54 +<U00013E55> /xf0/x93/xb9/x95 EGYPTIAN HIEROGLYPH-13E55 +<U00013E56> /xf0/x93/xb9/x96 EGYPTIAN HIEROGLYPH-13E56 +<U00013E57> /xf0/x93/xb9/x97 EGYPTIAN HIEROGLYPH-13E57 +<U00013E58> /xf0/x93/xb9/x98 EGYPTIAN HIEROGLYPH-13E58 +<U00013E59> /xf0/x93/xb9/x99 EGYPTIAN HIEROGLYPH-13E59 +<U00013E5A> /xf0/x93/xb9/x9a EGYPTIAN HIEROGLYPH-13E5A +<U00013E5B> /xf0/x93/xb9/x9b EGYPTIAN HIEROGLYPH-13E5B +<U00013E5C> /xf0/x93/xb9/x9c EGYPTIAN HIEROGLYPH-13E5C +<U00013E5D> /xf0/x93/xb9/x9d EGYPTIAN HIEROGLYPH-13E5D +<U00013E5E> /xf0/x93/xb9/x9e EGYPTIAN HIEROGLYPH-13E5E +<U00013E5F> /xf0/x93/xb9/x9f EGYPTIAN HIEROGLYPH-13E5F +<U00013E60> /xf0/x93/xb9/xa0 EGYPTIAN HIEROGLYPH-13E60 +<U00013E61> /xf0/x93/xb9/xa1 EGYPTIAN HIEROGLYPH-13E61 +<U00013E62> /xf0/x93/xb9/xa2 EGYPTIAN HIEROGLYPH-13E62 +<U00013E63> /xf0/x93/xb9/xa3 EGYPTIAN HIEROGLYPH-13E63 +<U00013E64> /xf0/x93/xb9/xa4 EGYPTIAN HIEROGLYPH-13E64 +<U00013E65> /xf0/x93/xb9/xa5 EGYPTIAN HIEROGLYPH-13E65 +<U00013E66> /xf0/x93/xb9/xa6 EGYPTIAN HIEROGLYPH-13E66 +<U00013E67> /xf0/x93/xb9/xa7 EGYPTIAN HIEROGLYPH-13E67 +<U00013E68> /xf0/x93/xb9/xa8 EGYPTIAN HIEROGLYPH-13E68 +<U00013E69> /xf0/x93/xb9/xa9 EGYPTIAN HIEROGLYPH-13E69 +<U00013E6A> /xf0/x93/xb9/xaa EGYPTIAN HIEROGLYPH-13E6A +<U00013E6B> /xf0/x93/xb9/xab EGYPTIAN HIEROGLYPH-13E6B +<U00013E6C> /xf0/x93/xb9/xac EGYPTIAN HIEROGLYPH-13E6C +<U00013E6D> /xf0/x93/xb9/xad EGYPTIAN HIEROGLYPH-13E6D +<U00013E6E> /xf0/x93/xb9/xae EGYPTIAN HIEROGLYPH-13E6E +<U00013E6F> /xf0/x93/xb9/xaf EGYPTIAN HIEROGLYPH-13E6F +<U00013E70> /xf0/x93/xb9/xb0 EGYPTIAN HIEROGLYPH-13E70 +<U00013E71> /xf0/x93/xb9/xb1 EGYPTIAN HIEROGLYPH-13E71 +<U00013E72> /xf0/x93/xb9/xb2 EGYPTIAN HIEROGLYPH-13E72 +<U00013E73> /xf0/x93/xb9/xb3 EGYPTIAN HIEROGLYPH-13E73 +<U00013E74> /xf0/x93/xb9/xb4 EGYPTIAN HIEROGLYPH-13E74 +<U00013E75> /xf0/x93/xb9/xb5 EGYPTIAN HIEROGLYPH-13E75 +<U00013E76> /xf0/x93/xb9/xb6 EGYPTIAN HIEROGLYPH-13E76 +<U00013E77> /xf0/x93/xb9/xb7 EGYPTIAN HIEROGLYPH-13E77 +<U00013E78> /xf0/x93/xb9/xb8 EGYPTIAN HIEROGLYPH-13E78 +<U00013E79> /xf0/x93/xb9/xb9 EGYPTIAN HIEROGLYPH-13E79 +<U00013E7A> /xf0/x93/xb9/xba EGYPTIAN HIEROGLYPH-13E7A +<U00013E7B> /xf0/x93/xb9/xbb EGYPTIAN HIEROGLYPH-13E7B +<U00013E7C> /xf0/x93/xb9/xbc EGYPTIAN HIEROGLYPH-13E7C +<U00013E7D> /xf0/x93/xb9/xbd EGYPTIAN HIEROGLYPH-13E7D +<U00013E7E> /xf0/x93/xb9/xbe EGYPTIAN HIEROGLYPH-13E7E +<U00013E7F> /xf0/x93/xb9/xbf EGYPTIAN HIEROGLYPH-13E7F +<U00013E80> /xf0/x93/xba/x80 EGYPTIAN HIEROGLYPH-13E80 +<U00013E81> /xf0/x93/xba/x81 EGYPTIAN HIEROGLYPH-13E81 +<U00013E82> /xf0/x93/xba/x82 EGYPTIAN HIEROGLYPH-13E82 +<U00013E83> /xf0/x93/xba/x83 EGYPTIAN HIEROGLYPH-13E83 +<U00013E84> /xf0/x93/xba/x84 EGYPTIAN HIEROGLYPH-13E84 +<U00013E85> /xf0/x93/xba/x85 EGYPTIAN HIEROGLYPH-13E85 +<U00013E86> /xf0/x93/xba/x86 EGYPTIAN HIEROGLYPH-13E86 +<U00013E87> /xf0/x93/xba/x87 EGYPTIAN HIEROGLYPH-13E87 +<U00013E88> /xf0/x93/xba/x88 EGYPTIAN HIEROGLYPH-13E88 +<U00013E89> /xf0/x93/xba/x89 EGYPTIAN HIEROGLYPH-13E89 +<U00013E8A> /xf0/x93/xba/x8a EGYPTIAN HIEROGLYPH-13E8A +<U00013E8B> /xf0/x93/xba/x8b EGYPTIAN HIEROGLYPH-13E8B +<U00013E8C> /xf0/x93/xba/x8c EGYPTIAN HIEROGLYPH-13E8C +<U00013E8D> /xf0/x93/xba/x8d EGYPTIAN HIEROGLYPH-13E8D +<U00013E8E> /xf0/x93/xba/x8e EGYPTIAN HIEROGLYPH-13E8E +<U00013E8F> /xf0/x93/xba/x8f EGYPTIAN HIEROGLYPH-13E8F +<U00013E90> /xf0/x93/xba/x90 EGYPTIAN HIEROGLYPH-13E90 +<U00013E91> /xf0/x93/xba/x91 EGYPTIAN HIEROGLYPH-13E91 +<U00013E92> /xf0/x93/xba/x92 EGYPTIAN HIEROGLYPH-13E92 +<U00013E93> /xf0/x93/xba/x93 EGYPTIAN HIEROGLYPH-13E93 +<U00013E94> /xf0/x93/xba/x94 EGYPTIAN HIEROGLYPH-13E94 +<U00013E95> /xf0/x93/xba/x95 EGYPTIAN HIEROGLYPH-13E95 +<U00013E96> /xf0/x93/xba/x96 EGYPTIAN HIEROGLYPH-13E96 +<U00013E97> /xf0/x93/xba/x97 EGYPTIAN HIEROGLYPH-13E97 +<U00013E98> /xf0/x93/xba/x98 EGYPTIAN HIEROGLYPH-13E98 +<U00013E99> /xf0/x93/xba/x99 EGYPTIAN HIEROGLYPH-13E99 +<U00013E9A> /xf0/x93/xba/x9a EGYPTIAN HIEROGLYPH-13E9A +<U00013E9B> /xf0/x93/xba/x9b EGYPTIAN HIEROGLYPH-13E9B +<U00013E9C> /xf0/x93/xba/x9c EGYPTIAN HIEROGLYPH-13E9C +<U00013E9D> /xf0/x93/xba/x9d EGYPTIAN HIEROGLYPH-13E9D +<U00013E9E> /xf0/x93/xba/x9e EGYPTIAN HIEROGLYPH-13E9E +<U00013E9F> /xf0/x93/xba/x9f EGYPTIAN HIEROGLYPH-13E9F +<U00013EA0> /xf0/x93/xba/xa0 EGYPTIAN HIEROGLYPH-13EA0 +<U00013EA1> /xf0/x93/xba/xa1 EGYPTIAN HIEROGLYPH-13EA1 +<U00013EA2> /xf0/x93/xba/xa2 EGYPTIAN HIEROGLYPH-13EA2 +<U00013EA3> /xf0/x93/xba/xa3 EGYPTIAN HIEROGLYPH-13EA3 +<U00013EA4> /xf0/x93/xba/xa4 EGYPTIAN HIEROGLYPH-13EA4 +<U00013EA5> /xf0/x93/xba/xa5 EGYPTIAN HIEROGLYPH-13EA5 +<U00013EA6> /xf0/x93/xba/xa6 EGYPTIAN HIEROGLYPH-13EA6 +<U00013EA7> /xf0/x93/xba/xa7 EGYPTIAN HIEROGLYPH-13EA7 +<U00013EA8> /xf0/x93/xba/xa8 EGYPTIAN HIEROGLYPH-13EA8 +<U00013EA9> /xf0/x93/xba/xa9 EGYPTIAN HIEROGLYPH-13EA9 +<U00013EAA> /xf0/x93/xba/xaa EGYPTIAN HIEROGLYPH-13EAA +<U00013EAB> /xf0/x93/xba/xab EGYPTIAN HIEROGLYPH-13EAB +<U00013EAC> /xf0/x93/xba/xac EGYPTIAN HIEROGLYPH-13EAC +<U00013EAD> /xf0/x93/xba/xad EGYPTIAN HIEROGLYPH-13EAD +<U00013EAE> /xf0/x93/xba/xae EGYPTIAN HIEROGLYPH-13EAE +<U00013EAF> /xf0/x93/xba/xaf EGYPTIAN HIEROGLYPH-13EAF +<U00013EB0> /xf0/x93/xba/xb0 EGYPTIAN HIEROGLYPH-13EB0 +<U00013EB1> /xf0/x93/xba/xb1 EGYPTIAN HIEROGLYPH-13EB1 +<U00013EB2> /xf0/x93/xba/xb2 EGYPTIAN HIEROGLYPH-13EB2 +<U00013EB3> /xf0/x93/xba/xb3 EGYPTIAN HIEROGLYPH-13EB3 +<U00013EB4> /xf0/x93/xba/xb4 EGYPTIAN HIEROGLYPH-13EB4 +<U00013EB5> /xf0/x93/xba/xb5 EGYPTIAN HIEROGLYPH-13EB5 +<U00013EB6> /xf0/x93/xba/xb6 EGYPTIAN HIEROGLYPH-13EB6 +<U00013EB7> /xf0/x93/xba/xb7 EGYPTIAN HIEROGLYPH-13EB7 +<U00013EB8> /xf0/x93/xba/xb8 EGYPTIAN HIEROGLYPH-13EB8 +<U00013EB9> /xf0/x93/xba/xb9 EGYPTIAN HIEROGLYPH-13EB9 +<U00013EBA> /xf0/x93/xba/xba EGYPTIAN HIEROGLYPH-13EBA +<U00013EBB> /xf0/x93/xba/xbb EGYPTIAN HIEROGLYPH-13EBB +<U00013EBC> /xf0/x93/xba/xbc EGYPTIAN HIEROGLYPH-13EBC +<U00013EBD> /xf0/x93/xba/xbd EGYPTIAN HIEROGLYPH-13EBD +<U00013EBE> /xf0/x93/xba/xbe EGYPTIAN HIEROGLYPH-13EBE +<U00013EBF> /xf0/x93/xba/xbf EGYPTIAN HIEROGLYPH-13EBF +<U00013EC0> /xf0/x93/xbb/x80 EGYPTIAN HIEROGLYPH-13EC0 +<U00013EC1> /xf0/x93/xbb/x81 EGYPTIAN HIEROGLYPH-13EC1 +<U00013EC2> /xf0/x93/xbb/x82 EGYPTIAN HIEROGLYPH-13EC2 +<U00013EC3> /xf0/x93/xbb/x83 EGYPTIAN HIEROGLYPH-13EC3 +<U00013EC4> /xf0/x93/xbb/x84 EGYPTIAN HIEROGLYPH-13EC4 +<U00013EC5> /xf0/x93/xbb/x85 EGYPTIAN HIEROGLYPH-13EC5 +<U00013EC6> /xf0/x93/xbb/x86 EGYPTIAN HIEROGLYPH-13EC6 +<U00013EC7> /xf0/x93/xbb/x87 EGYPTIAN HIEROGLYPH-13EC7 +<U00013EC8> /xf0/x93/xbb/x88 EGYPTIAN HIEROGLYPH-13EC8 +<U00013EC9> /xf0/x93/xbb/x89 EGYPTIAN HIEROGLYPH-13EC9 +<U00013ECA> /xf0/x93/xbb/x8a EGYPTIAN HIEROGLYPH-13ECA +<U00013ECB> /xf0/x93/xbb/x8b EGYPTIAN HIEROGLYPH-13ECB +<U00013ECC> /xf0/x93/xbb/x8c EGYPTIAN HIEROGLYPH-13ECC +<U00013ECD> /xf0/x93/xbb/x8d EGYPTIAN HIEROGLYPH-13ECD +<U00013ECE> /xf0/x93/xbb/x8e EGYPTIAN HIEROGLYPH-13ECE +<U00013ECF> /xf0/x93/xbb/x8f EGYPTIAN HIEROGLYPH-13ECF +<U00013ED0> /xf0/x93/xbb/x90 EGYPTIAN HIEROGLYPH-13ED0 +<U00013ED1> /xf0/x93/xbb/x91 EGYPTIAN HIEROGLYPH-13ED1 +<U00013ED2> /xf0/x93/xbb/x92 EGYPTIAN HIEROGLYPH-13ED2 +<U00013ED3> /xf0/x93/xbb/x93 EGYPTIAN HIEROGLYPH-13ED3 +<U00013ED4> /xf0/x93/xbb/x94 EGYPTIAN HIEROGLYPH-13ED4 +<U00013ED5> /xf0/x93/xbb/x95 EGYPTIAN HIEROGLYPH-13ED5 +<U00013ED6> /xf0/x93/xbb/x96 EGYPTIAN HIEROGLYPH-13ED6 +<U00013ED7> /xf0/x93/xbb/x97 EGYPTIAN HIEROGLYPH-13ED7 +<U00013ED8> /xf0/x93/xbb/x98 EGYPTIAN HIEROGLYPH-13ED8 +<U00013ED9> /xf0/x93/xbb/x99 EGYPTIAN HIEROGLYPH-13ED9 +<U00013EDA> /xf0/x93/xbb/x9a EGYPTIAN HIEROGLYPH-13EDA +<U00013EDB> /xf0/x93/xbb/x9b EGYPTIAN HIEROGLYPH-13EDB +<U00013EDC> /xf0/x93/xbb/x9c EGYPTIAN HIEROGLYPH-13EDC +<U00013EDD> /xf0/x93/xbb/x9d EGYPTIAN HIEROGLYPH-13EDD +<U00013EDE> /xf0/x93/xbb/x9e EGYPTIAN HIEROGLYPH-13EDE +<U00013EDF> /xf0/x93/xbb/x9f EGYPTIAN HIEROGLYPH-13EDF +<U00013EE0> /xf0/x93/xbb/xa0 EGYPTIAN HIEROGLYPH-13EE0 +<U00013EE1> /xf0/x93/xbb/xa1 EGYPTIAN HIEROGLYPH-13EE1 +<U00013EE2> /xf0/x93/xbb/xa2 EGYPTIAN HIEROGLYPH-13EE2 +<U00013EE3> /xf0/x93/xbb/xa3 EGYPTIAN HIEROGLYPH-13EE3 +<U00013EE4> /xf0/x93/xbb/xa4 EGYPTIAN HIEROGLYPH-13EE4 +<U00013EE5> /xf0/x93/xbb/xa5 EGYPTIAN HIEROGLYPH-13EE5 +<U00013EE6> /xf0/x93/xbb/xa6 EGYPTIAN HIEROGLYPH-13EE6 +<U00013EE7> /xf0/x93/xbb/xa7 EGYPTIAN HIEROGLYPH-13EE7 +<U00013EE8> /xf0/x93/xbb/xa8 EGYPTIAN HIEROGLYPH-13EE8 +<U00013EE9> /xf0/x93/xbb/xa9 EGYPTIAN HIEROGLYPH-13EE9 +<U00013EEA> /xf0/x93/xbb/xaa EGYPTIAN HIEROGLYPH-13EEA +<U00013EEB> /xf0/x93/xbb/xab EGYPTIAN HIEROGLYPH-13EEB +<U00013EEC> /xf0/x93/xbb/xac EGYPTIAN HIEROGLYPH-13EEC +<U00013EED> /xf0/x93/xbb/xad EGYPTIAN HIEROGLYPH-13EED +<U00013EEE> /xf0/x93/xbb/xae EGYPTIAN HIEROGLYPH-13EEE +<U00013EEF> /xf0/x93/xbb/xaf EGYPTIAN HIEROGLYPH-13EEF +<U00013EF0> /xf0/x93/xbb/xb0 EGYPTIAN HIEROGLYPH-13EF0 +<U00013EF1> /xf0/x93/xbb/xb1 EGYPTIAN HIEROGLYPH-13EF1 +<U00013EF2> /xf0/x93/xbb/xb2 EGYPTIAN HIEROGLYPH-13EF2 +<U00013EF3> /xf0/x93/xbb/xb3 EGYPTIAN HIEROGLYPH-13EF3 +<U00013EF4> /xf0/x93/xbb/xb4 EGYPTIAN HIEROGLYPH-13EF4 +<U00013EF5> /xf0/x93/xbb/xb5 EGYPTIAN HIEROGLYPH-13EF5 +<U00013EF6> /xf0/x93/xbb/xb6 EGYPTIAN HIEROGLYPH-13EF6 +<U00013EF7> /xf0/x93/xbb/xb7 EGYPTIAN HIEROGLYPH-13EF7 +<U00013EF8> /xf0/x93/xbb/xb8 EGYPTIAN HIEROGLYPH-13EF8 +<U00013EF9> /xf0/x93/xbb/xb9 EGYPTIAN HIEROGLYPH-13EF9 +<U00013EFA> /xf0/x93/xbb/xba EGYPTIAN HIEROGLYPH-13EFA +<U00013EFB> /xf0/x93/xbb/xbb EGYPTIAN HIEROGLYPH-13EFB +<U00013EFC> /xf0/x93/xbb/xbc EGYPTIAN HIEROGLYPH-13EFC +<U00013EFD> /xf0/x93/xbb/xbd EGYPTIAN HIEROGLYPH-13EFD +<U00013EFE> /xf0/x93/xbb/xbe EGYPTIAN HIEROGLYPH-13EFE +<U00013EFF> /xf0/x93/xbb/xbf EGYPTIAN HIEROGLYPH-13EFF +<U00013F00> /xf0/x93/xbc/x80 EGYPTIAN HIEROGLYPH-13F00 +<U00013F01> /xf0/x93/xbc/x81 EGYPTIAN HIEROGLYPH-13F01 +<U00013F02> /xf0/x93/xbc/x82 EGYPTIAN HIEROGLYPH-13F02 +<U00013F03> /xf0/x93/xbc/x83 EGYPTIAN HIEROGLYPH-13F03 +<U00013F04> /xf0/x93/xbc/x84 EGYPTIAN HIEROGLYPH-13F04 +<U00013F05> /xf0/x93/xbc/x85 EGYPTIAN HIEROGLYPH-13F05 +<U00013F06> /xf0/x93/xbc/x86 EGYPTIAN HIEROGLYPH-13F06 +<U00013F07> /xf0/x93/xbc/x87 EGYPTIAN HIEROGLYPH-13F07 +<U00013F08> /xf0/x93/xbc/x88 EGYPTIAN HIEROGLYPH-13F08 +<U00013F09> /xf0/x93/xbc/x89 EGYPTIAN HIEROGLYPH-13F09 +<U00013F0A> /xf0/x93/xbc/x8a EGYPTIAN HIEROGLYPH-13F0A +<U00013F0B> /xf0/x93/xbc/x8b EGYPTIAN HIEROGLYPH-13F0B +<U00013F0C> /xf0/x93/xbc/x8c EGYPTIAN HIEROGLYPH-13F0C +<U00013F0D> /xf0/x93/xbc/x8d EGYPTIAN HIEROGLYPH-13F0D +<U00013F0E> /xf0/x93/xbc/x8e EGYPTIAN HIEROGLYPH-13F0E +<U00013F0F> /xf0/x93/xbc/x8f EGYPTIAN HIEROGLYPH-13F0F +<U00013F10> /xf0/x93/xbc/x90 EGYPTIAN HIEROGLYPH-13F10 +<U00013F11> /xf0/x93/xbc/x91 EGYPTIAN HIEROGLYPH-13F11 +<U00013F12> /xf0/x93/xbc/x92 EGYPTIAN HIEROGLYPH-13F12 +<U00013F13> /xf0/x93/xbc/x93 EGYPTIAN HIEROGLYPH-13F13 +<U00013F14> /xf0/x93/xbc/x94 EGYPTIAN HIEROGLYPH-13F14 +<U00013F15> /xf0/x93/xbc/x95 EGYPTIAN HIEROGLYPH-13F15 +<U00013F16> /xf0/x93/xbc/x96 EGYPTIAN HIEROGLYPH-13F16 +<U00013F17> /xf0/x93/xbc/x97 EGYPTIAN HIEROGLYPH-13F17 +<U00013F18> /xf0/x93/xbc/x98 EGYPTIAN HIEROGLYPH-13F18 +<U00013F19> /xf0/x93/xbc/x99 EGYPTIAN HIEROGLYPH-13F19 +<U00013F1A> /xf0/x93/xbc/x9a EGYPTIAN HIEROGLYPH-13F1A +<U00013F1B> /xf0/x93/xbc/x9b EGYPTIAN HIEROGLYPH-13F1B +<U00013F1C> /xf0/x93/xbc/x9c EGYPTIAN HIEROGLYPH-13F1C +<U00013F1D> /xf0/x93/xbc/x9d EGYPTIAN HIEROGLYPH-13F1D +<U00013F1E> /xf0/x93/xbc/x9e EGYPTIAN HIEROGLYPH-13F1E +<U00013F1F> /xf0/x93/xbc/x9f EGYPTIAN HIEROGLYPH-13F1F +<U00013F20> /xf0/x93/xbc/xa0 EGYPTIAN HIEROGLYPH-13F20 +<U00013F21> /xf0/x93/xbc/xa1 EGYPTIAN HIEROGLYPH-13F21 +<U00013F22> /xf0/x93/xbc/xa2 EGYPTIAN HIEROGLYPH-13F22 +<U00013F23> /xf0/x93/xbc/xa3 EGYPTIAN HIEROGLYPH-13F23 +<U00013F24> /xf0/x93/xbc/xa4 EGYPTIAN HIEROGLYPH-13F24 +<U00013F25> /xf0/x93/xbc/xa5 EGYPTIAN HIEROGLYPH-13F25 +<U00013F26> /xf0/x93/xbc/xa6 EGYPTIAN HIEROGLYPH-13F26 +<U00013F27> /xf0/x93/xbc/xa7 EGYPTIAN HIEROGLYPH-13F27 +<U00013F28> /xf0/x93/xbc/xa8 EGYPTIAN HIEROGLYPH-13F28 +<U00013F29> /xf0/x93/xbc/xa9 EGYPTIAN HIEROGLYPH-13F29 +<U00013F2A> /xf0/x93/xbc/xaa EGYPTIAN HIEROGLYPH-13F2A +<U00013F2B> /xf0/x93/xbc/xab EGYPTIAN HIEROGLYPH-13F2B +<U00013F2C> /xf0/x93/xbc/xac EGYPTIAN HIEROGLYPH-13F2C +<U00013F2D> /xf0/x93/xbc/xad EGYPTIAN HIEROGLYPH-13F2D +<U00013F2E> /xf0/x93/xbc/xae EGYPTIAN HIEROGLYPH-13F2E +<U00013F2F> /xf0/x93/xbc/xaf EGYPTIAN HIEROGLYPH-13F2F +<U00013F30> /xf0/x93/xbc/xb0 EGYPTIAN HIEROGLYPH-13F30 +<U00013F31> /xf0/x93/xbc/xb1 EGYPTIAN HIEROGLYPH-13F31 +<U00013F32> /xf0/x93/xbc/xb2 EGYPTIAN HIEROGLYPH-13F32 +<U00013F33> /xf0/x93/xbc/xb3 EGYPTIAN HIEROGLYPH-13F33 +<U00013F34> /xf0/x93/xbc/xb4 EGYPTIAN HIEROGLYPH-13F34 +<U00013F35> /xf0/x93/xbc/xb5 EGYPTIAN HIEROGLYPH-13F35 +<U00013F36> /xf0/x93/xbc/xb6 EGYPTIAN HIEROGLYPH-13F36 +<U00013F37> /xf0/x93/xbc/xb7 EGYPTIAN HIEROGLYPH-13F37 +<U00013F38> /xf0/x93/xbc/xb8 EGYPTIAN HIEROGLYPH-13F38 +<U00013F39> /xf0/x93/xbc/xb9 EGYPTIAN HIEROGLYPH-13F39 +<U00013F3A> /xf0/x93/xbc/xba EGYPTIAN HIEROGLYPH-13F3A +<U00013F3B> /xf0/x93/xbc/xbb EGYPTIAN HIEROGLYPH-13F3B +<U00013F3C> /xf0/x93/xbc/xbc EGYPTIAN HIEROGLYPH-13F3C +<U00013F3D> /xf0/x93/xbc/xbd EGYPTIAN HIEROGLYPH-13F3D +<U00013F3E> /xf0/x93/xbc/xbe EGYPTIAN HIEROGLYPH-13F3E +<U00013F3F> /xf0/x93/xbc/xbf EGYPTIAN HIEROGLYPH-13F3F +<U00013F40> /xf0/x93/xbd/x80 EGYPTIAN HIEROGLYPH-13F40 +<U00013F41> /xf0/x93/xbd/x81 EGYPTIAN HIEROGLYPH-13F41 +<U00013F42> /xf0/x93/xbd/x82 EGYPTIAN HIEROGLYPH-13F42 +<U00013F43> /xf0/x93/xbd/x83 EGYPTIAN HIEROGLYPH-13F43 +<U00013F44> /xf0/x93/xbd/x84 EGYPTIAN HIEROGLYPH-13F44 +<U00013F45> /xf0/x93/xbd/x85 EGYPTIAN HIEROGLYPH-13F45 +<U00013F46> /xf0/x93/xbd/x86 EGYPTIAN HIEROGLYPH-13F46 +<U00013F47> /xf0/x93/xbd/x87 EGYPTIAN HIEROGLYPH-13F47 +<U00013F48> /xf0/x93/xbd/x88 EGYPTIAN HIEROGLYPH-13F48 +<U00013F49> /xf0/x93/xbd/x89 EGYPTIAN HIEROGLYPH-13F49 +<U00013F4A> /xf0/x93/xbd/x8a EGYPTIAN HIEROGLYPH-13F4A +<U00013F4B> /xf0/x93/xbd/x8b EGYPTIAN HIEROGLYPH-13F4B +<U00013F4C> /xf0/x93/xbd/x8c EGYPTIAN HIEROGLYPH-13F4C +<U00013F4D> /xf0/x93/xbd/x8d EGYPTIAN HIEROGLYPH-13F4D +<U00013F4E> /xf0/x93/xbd/x8e EGYPTIAN HIEROGLYPH-13F4E +<U00013F4F> /xf0/x93/xbd/x8f EGYPTIAN HIEROGLYPH-13F4F +<U00013F50> /xf0/x93/xbd/x90 EGYPTIAN HIEROGLYPH-13F50 +<U00013F51> /xf0/x93/xbd/x91 EGYPTIAN HIEROGLYPH-13F51 +<U00013F52> /xf0/x93/xbd/x92 EGYPTIAN HIEROGLYPH-13F52 +<U00013F53> /xf0/x93/xbd/x93 EGYPTIAN HIEROGLYPH-13F53 +<U00013F54> /xf0/x93/xbd/x94 EGYPTIAN HIEROGLYPH-13F54 +<U00013F55> /xf0/x93/xbd/x95 EGYPTIAN HIEROGLYPH-13F55 +<U00013F56> /xf0/x93/xbd/x96 EGYPTIAN HIEROGLYPH-13F56 +<U00013F57> /xf0/x93/xbd/x97 EGYPTIAN HIEROGLYPH-13F57 +<U00013F58> /xf0/x93/xbd/x98 EGYPTIAN HIEROGLYPH-13F58 +<U00013F59> /xf0/x93/xbd/x99 EGYPTIAN HIEROGLYPH-13F59 +<U00013F5A> /xf0/x93/xbd/x9a EGYPTIAN HIEROGLYPH-13F5A +<U00013F5B> /xf0/x93/xbd/x9b EGYPTIAN HIEROGLYPH-13F5B +<U00013F5C> /xf0/x93/xbd/x9c EGYPTIAN HIEROGLYPH-13F5C +<U00013F5D> /xf0/x93/xbd/x9d EGYPTIAN HIEROGLYPH-13F5D +<U00013F5E> /xf0/x93/xbd/x9e EGYPTIAN HIEROGLYPH-13F5E +<U00013F5F> /xf0/x93/xbd/x9f EGYPTIAN HIEROGLYPH-13F5F +<U00013F60> /xf0/x93/xbd/xa0 EGYPTIAN HIEROGLYPH-13F60 +<U00013F61> /xf0/x93/xbd/xa1 EGYPTIAN HIEROGLYPH-13F61 +<U00013F62> /xf0/x93/xbd/xa2 EGYPTIAN HIEROGLYPH-13F62 +<U00013F63> /xf0/x93/xbd/xa3 EGYPTIAN HIEROGLYPH-13F63 +<U00013F64> /xf0/x93/xbd/xa4 EGYPTIAN HIEROGLYPH-13F64 +<U00013F65> /xf0/x93/xbd/xa5 EGYPTIAN HIEROGLYPH-13F65 +<U00013F66> /xf0/x93/xbd/xa6 EGYPTIAN HIEROGLYPH-13F66 +<U00013F67> /xf0/x93/xbd/xa7 EGYPTIAN HIEROGLYPH-13F67 +<U00013F68> /xf0/x93/xbd/xa8 EGYPTIAN HIEROGLYPH-13F68 +<U00013F69> /xf0/x93/xbd/xa9 EGYPTIAN HIEROGLYPH-13F69 +<U00013F6A> /xf0/x93/xbd/xaa EGYPTIAN HIEROGLYPH-13F6A +<U00013F6B> /xf0/x93/xbd/xab EGYPTIAN HIEROGLYPH-13F6B +<U00013F6C> /xf0/x93/xbd/xac EGYPTIAN HIEROGLYPH-13F6C +<U00013F6D> /xf0/x93/xbd/xad EGYPTIAN HIEROGLYPH-13F6D +<U00013F6E> /xf0/x93/xbd/xae EGYPTIAN HIEROGLYPH-13F6E +<U00013F6F> /xf0/x93/xbd/xaf EGYPTIAN HIEROGLYPH-13F6F +<U00013F70> /xf0/x93/xbd/xb0 EGYPTIAN HIEROGLYPH-13F70 +<U00013F71> /xf0/x93/xbd/xb1 EGYPTIAN HIEROGLYPH-13F71 +<U00013F72> /xf0/x93/xbd/xb2 EGYPTIAN HIEROGLYPH-13F72 +<U00013F73> /xf0/x93/xbd/xb3 EGYPTIAN HIEROGLYPH-13F73 +<U00013F74> /xf0/x93/xbd/xb4 EGYPTIAN HIEROGLYPH-13F74 +<U00013F75> /xf0/x93/xbd/xb5 EGYPTIAN HIEROGLYPH-13F75 +<U00013F76> /xf0/x93/xbd/xb6 EGYPTIAN HIEROGLYPH-13F76 +<U00013F77> /xf0/x93/xbd/xb7 EGYPTIAN HIEROGLYPH-13F77 +<U00013F78> /xf0/x93/xbd/xb8 EGYPTIAN HIEROGLYPH-13F78 +<U00013F79> /xf0/x93/xbd/xb9 EGYPTIAN HIEROGLYPH-13F79 +<U00013F7A> /xf0/x93/xbd/xba EGYPTIAN HIEROGLYPH-13F7A +<U00013F7B> /xf0/x93/xbd/xbb EGYPTIAN HIEROGLYPH-13F7B +<U00013F7C> /xf0/x93/xbd/xbc EGYPTIAN HIEROGLYPH-13F7C +<U00013F7D> /xf0/x93/xbd/xbd EGYPTIAN HIEROGLYPH-13F7D +<U00013F7E> /xf0/x93/xbd/xbe EGYPTIAN HIEROGLYPH-13F7E +<U00013F7F> /xf0/x93/xbd/xbf EGYPTIAN HIEROGLYPH-13F7F +<U00013F80> /xf0/x93/xbe/x80 EGYPTIAN HIEROGLYPH-13F80 +<U00013F81> /xf0/x93/xbe/x81 EGYPTIAN HIEROGLYPH-13F81 +<U00013F82> /xf0/x93/xbe/x82 EGYPTIAN HIEROGLYPH-13F82 +<U00013F83> /xf0/x93/xbe/x83 EGYPTIAN HIEROGLYPH-13F83 +<U00013F84> /xf0/x93/xbe/x84 EGYPTIAN HIEROGLYPH-13F84 +<U00013F85> /xf0/x93/xbe/x85 EGYPTIAN HIEROGLYPH-13F85 +<U00013F86> /xf0/x93/xbe/x86 EGYPTIAN HIEROGLYPH-13F86 +<U00013F87> /xf0/x93/xbe/x87 EGYPTIAN HIEROGLYPH-13F87 +<U00013F88> /xf0/x93/xbe/x88 EGYPTIAN HIEROGLYPH-13F88 +<U00013F89> /xf0/x93/xbe/x89 EGYPTIAN HIEROGLYPH-13F89 +<U00013F8A> /xf0/x93/xbe/x8a EGYPTIAN HIEROGLYPH-13F8A +<U00013F8B> /xf0/x93/xbe/x8b EGYPTIAN HIEROGLYPH-13F8B +<U00013F8C> /xf0/x93/xbe/x8c EGYPTIAN HIEROGLYPH-13F8C +<U00013F8D> /xf0/x93/xbe/x8d EGYPTIAN HIEROGLYPH-13F8D +<U00013F8E> /xf0/x93/xbe/x8e EGYPTIAN HIEROGLYPH-13F8E +<U00013F8F> /xf0/x93/xbe/x8f EGYPTIAN HIEROGLYPH-13F8F +<U00013F90> /xf0/x93/xbe/x90 EGYPTIAN HIEROGLYPH-13F90 +<U00013F91> /xf0/x93/xbe/x91 EGYPTIAN HIEROGLYPH-13F91 +<U00013F92> /xf0/x93/xbe/x92 EGYPTIAN HIEROGLYPH-13F92 +<U00013F93> /xf0/x93/xbe/x93 EGYPTIAN HIEROGLYPH-13F93 +<U00013F94> /xf0/x93/xbe/x94 EGYPTIAN HIEROGLYPH-13F94 +<U00013F95> /xf0/x93/xbe/x95 EGYPTIAN HIEROGLYPH-13F95 +<U00013F96> /xf0/x93/xbe/x96 EGYPTIAN HIEROGLYPH-13F96 +<U00013F97> /xf0/x93/xbe/x97 EGYPTIAN HIEROGLYPH-13F97 +<U00013F98> /xf0/x93/xbe/x98 EGYPTIAN HIEROGLYPH-13F98 +<U00013F99> /xf0/x93/xbe/x99 EGYPTIAN HIEROGLYPH-13F99 +<U00013F9A> /xf0/x93/xbe/x9a EGYPTIAN HIEROGLYPH-13F9A +<U00013F9B> /xf0/x93/xbe/x9b EGYPTIAN HIEROGLYPH-13F9B +<U00013F9C> /xf0/x93/xbe/x9c EGYPTIAN HIEROGLYPH-13F9C +<U00013F9D> /xf0/x93/xbe/x9d EGYPTIAN HIEROGLYPH-13F9D +<U00013F9E> /xf0/x93/xbe/x9e EGYPTIAN HIEROGLYPH-13F9E +<U00013F9F> /xf0/x93/xbe/x9f EGYPTIAN HIEROGLYPH-13F9F +<U00013FA0> /xf0/x93/xbe/xa0 EGYPTIAN HIEROGLYPH-13FA0 +<U00013FA1> /xf0/x93/xbe/xa1 EGYPTIAN HIEROGLYPH-13FA1 +<U00013FA2> /xf0/x93/xbe/xa2 EGYPTIAN HIEROGLYPH-13FA2 +<U00013FA3> /xf0/x93/xbe/xa3 EGYPTIAN HIEROGLYPH-13FA3 +<U00013FA4> /xf0/x93/xbe/xa4 EGYPTIAN HIEROGLYPH-13FA4 +<U00013FA5> /xf0/x93/xbe/xa5 EGYPTIAN HIEROGLYPH-13FA5 +<U00013FA6> /xf0/x93/xbe/xa6 EGYPTIAN HIEROGLYPH-13FA6 +<U00013FA7> /xf0/x93/xbe/xa7 EGYPTIAN HIEROGLYPH-13FA7 +<U00013FA8> /xf0/x93/xbe/xa8 EGYPTIAN HIEROGLYPH-13FA8 +<U00013FA9> /xf0/x93/xbe/xa9 EGYPTIAN HIEROGLYPH-13FA9 +<U00013FAA> /xf0/x93/xbe/xaa EGYPTIAN HIEROGLYPH-13FAA +<U00013FAB> /xf0/x93/xbe/xab EGYPTIAN HIEROGLYPH-13FAB +<U00013FAC> /xf0/x93/xbe/xac EGYPTIAN HIEROGLYPH-13FAC +<U00013FAD> /xf0/x93/xbe/xad EGYPTIAN HIEROGLYPH-13FAD +<U00013FAE> /xf0/x93/xbe/xae EGYPTIAN HIEROGLYPH-13FAE +<U00013FAF> /xf0/x93/xbe/xaf EGYPTIAN HIEROGLYPH-13FAF +<U00013FB0> /xf0/x93/xbe/xb0 EGYPTIAN HIEROGLYPH-13FB0 +<U00013FB1> /xf0/x93/xbe/xb1 EGYPTIAN HIEROGLYPH-13FB1 +<U00013FB2> /xf0/x93/xbe/xb2 EGYPTIAN HIEROGLYPH-13FB2 +<U00013FB3> /xf0/x93/xbe/xb3 EGYPTIAN HIEROGLYPH-13FB3 +<U00013FB4> /xf0/x93/xbe/xb4 EGYPTIAN HIEROGLYPH-13FB4 +<U00013FB5> /xf0/x93/xbe/xb5 EGYPTIAN HIEROGLYPH-13FB5 +<U00013FB6> /xf0/x93/xbe/xb6 EGYPTIAN HIEROGLYPH-13FB6 +<U00013FB7> /xf0/x93/xbe/xb7 EGYPTIAN HIEROGLYPH-13FB7 +<U00013FB8> /xf0/x93/xbe/xb8 EGYPTIAN HIEROGLYPH-13FB8 +<U00013FB9> /xf0/x93/xbe/xb9 EGYPTIAN HIEROGLYPH-13FB9 +<U00013FBA> /xf0/x93/xbe/xba EGYPTIAN HIEROGLYPH-13FBA +<U00013FBB> /xf0/x93/xbe/xbb EGYPTIAN HIEROGLYPH-13FBB +<U00013FBC> /xf0/x93/xbe/xbc EGYPTIAN HIEROGLYPH-13FBC +<U00013FBD> /xf0/x93/xbe/xbd EGYPTIAN HIEROGLYPH-13FBD +<U00013FBE> /xf0/x93/xbe/xbe EGYPTIAN HIEROGLYPH-13FBE +<U00013FBF> /xf0/x93/xbe/xbf EGYPTIAN HIEROGLYPH-13FBF +<U00013FC0> /xf0/x93/xbf/x80 EGYPTIAN HIEROGLYPH-13FC0 +<U00013FC1> /xf0/x93/xbf/x81 EGYPTIAN HIEROGLYPH-13FC1 +<U00013FC2> /xf0/x93/xbf/x82 EGYPTIAN HIEROGLYPH-13FC2 +<U00013FC3> /xf0/x93/xbf/x83 EGYPTIAN HIEROGLYPH-13FC3 +<U00013FC4> /xf0/x93/xbf/x84 EGYPTIAN HIEROGLYPH-13FC4 +<U00013FC5> /xf0/x93/xbf/x85 EGYPTIAN HIEROGLYPH-13FC5 +<U00013FC6> /xf0/x93/xbf/x86 EGYPTIAN HIEROGLYPH-13FC6 +<U00013FC7> /xf0/x93/xbf/x87 EGYPTIAN HIEROGLYPH-13FC7 +<U00013FC8> /xf0/x93/xbf/x88 EGYPTIAN HIEROGLYPH-13FC8 +<U00013FC9> /xf0/x93/xbf/x89 EGYPTIAN HIEROGLYPH-13FC9 +<U00013FCA> /xf0/x93/xbf/x8a EGYPTIAN HIEROGLYPH-13FCA +<U00013FCB> /xf0/x93/xbf/x8b EGYPTIAN HIEROGLYPH-13FCB +<U00013FCC> /xf0/x93/xbf/x8c EGYPTIAN HIEROGLYPH-13FCC +<U00013FCD> /xf0/x93/xbf/x8d EGYPTIAN HIEROGLYPH-13FCD +<U00013FCE> /xf0/x93/xbf/x8e EGYPTIAN HIEROGLYPH-13FCE +<U00013FCF> /xf0/x93/xbf/x8f EGYPTIAN HIEROGLYPH-13FCF +<U00013FD0> /xf0/x93/xbf/x90 EGYPTIAN HIEROGLYPH-13FD0 +<U00013FD1> /xf0/x93/xbf/x91 EGYPTIAN HIEROGLYPH-13FD1 +<U00013FD2> /xf0/x93/xbf/x92 EGYPTIAN HIEROGLYPH-13FD2 +<U00013FD3> /xf0/x93/xbf/x93 EGYPTIAN HIEROGLYPH-13FD3 +<U00013FD4> /xf0/x93/xbf/x94 EGYPTIAN HIEROGLYPH-13FD4 +<U00013FD5> /xf0/x93/xbf/x95 EGYPTIAN HIEROGLYPH-13FD5 +<U00013FD6> /xf0/x93/xbf/x96 EGYPTIAN HIEROGLYPH-13FD6 +<U00013FD7> /xf0/x93/xbf/x97 EGYPTIAN HIEROGLYPH-13FD7 +<U00013FD8> /xf0/x93/xbf/x98 EGYPTIAN HIEROGLYPH-13FD8 +<U00013FD9> /xf0/x93/xbf/x99 EGYPTIAN HIEROGLYPH-13FD9 +<U00013FDA> /xf0/x93/xbf/x9a EGYPTIAN HIEROGLYPH-13FDA +<U00013FDB> /xf0/x93/xbf/x9b EGYPTIAN HIEROGLYPH-13FDB +<U00013FDC> /xf0/x93/xbf/x9c EGYPTIAN HIEROGLYPH-13FDC +<U00013FDD> /xf0/x93/xbf/x9d EGYPTIAN HIEROGLYPH-13FDD +<U00013FDE> /xf0/x93/xbf/x9e EGYPTIAN HIEROGLYPH-13FDE +<U00013FDF> /xf0/x93/xbf/x9f EGYPTIAN HIEROGLYPH-13FDF +<U00013FE0> /xf0/x93/xbf/xa0 EGYPTIAN HIEROGLYPH-13FE0 +<U00013FE1> /xf0/x93/xbf/xa1 EGYPTIAN HIEROGLYPH-13FE1 +<U00013FE2> /xf0/x93/xbf/xa2 EGYPTIAN HIEROGLYPH-13FE2 +<U00013FE3> /xf0/x93/xbf/xa3 EGYPTIAN HIEROGLYPH-13FE3 +<U00013FE4> /xf0/x93/xbf/xa4 EGYPTIAN HIEROGLYPH-13FE4 +<U00013FE5> /xf0/x93/xbf/xa5 EGYPTIAN HIEROGLYPH-13FE5 +<U00013FE6> /xf0/x93/xbf/xa6 EGYPTIAN HIEROGLYPH-13FE6 +<U00013FE7> /xf0/x93/xbf/xa7 EGYPTIAN HIEROGLYPH-13FE7 +<U00013FE8> /xf0/x93/xbf/xa8 EGYPTIAN HIEROGLYPH-13FE8 +<U00013FE9> /xf0/x93/xbf/xa9 EGYPTIAN HIEROGLYPH-13FE9 +<U00013FEA> /xf0/x93/xbf/xaa EGYPTIAN HIEROGLYPH-13FEA +<U00013FEB> /xf0/x93/xbf/xab EGYPTIAN HIEROGLYPH-13FEB +<U00013FEC> /xf0/x93/xbf/xac EGYPTIAN HIEROGLYPH-13FEC +<U00013FED> /xf0/x93/xbf/xad EGYPTIAN HIEROGLYPH-13FED +<U00013FEE> /xf0/x93/xbf/xae EGYPTIAN HIEROGLYPH-13FEE +<U00013FEF> /xf0/x93/xbf/xaf EGYPTIAN HIEROGLYPH-13FEF +<U00013FF0> /xf0/x93/xbf/xb0 EGYPTIAN HIEROGLYPH-13FF0 +<U00013FF1> /xf0/x93/xbf/xb1 EGYPTIAN HIEROGLYPH-13FF1 +<U00013FF2> /xf0/x93/xbf/xb2 EGYPTIAN HIEROGLYPH-13FF2 +<U00013FF3> /xf0/x93/xbf/xb3 EGYPTIAN HIEROGLYPH-13FF3 +<U00013FF4> /xf0/x93/xbf/xb4 EGYPTIAN HIEROGLYPH-13FF4 +<U00013FF5> /xf0/x93/xbf/xb5 EGYPTIAN HIEROGLYPH-13FF5 +<U00013FF6> /xf0/x93/xbf/xb6 EGYPTIAN HIEROGLYPH-13FF6 +<U00013FF7> /xf0/x93/xbf/xb7 EGYPTIAN HIEROGLYPH-13FF7 +<U00013FF8> /xf0/x93/xbf/xb8 EGYPTIAN HIEROGLYPH-13FF8 +<U00013FF9> /xf0/x93/xbf/xb9 EGYPTIAN HIEROGLYPH-13FF9 +<U00013FFA> /xf0/x93/xbf/xba EGYPTIAN HIEROGLYPH-13FFA +<U00013FFB> /xf0/x93/xbf/xbb EGYPTIAN HIEROGLYPH-13FFB +<U00013FFC> /xf0/x93/xbf/xbc EGYPTIAN HIEROGLYPH-13FFC +<U00013FFD> /xf0/x93/xbf/xbd EGYPTIAN HIEROGLYPH-13FFD +<U00013FFE> /xf0/x93/xbf/xbe EGYPTIAN HIEROGLYPH-13FFE +<U00013FFF> /xf0/x93/xbf/xbf EGYPTIAN HIEROGLYPH-13FFF +<U00014000> /xf0/x94/x80/x80 EGYPTIAN HIEROGLYPH-14000 +<U00014001> /xf0/x94/x80/x81 EGYPTIAN HIEROGLYPH-14001 +<U00014002> /xf0/x94/x80/x82 EGYPTIAN HIEROGLYPH-14002 +<U00014003> /xf0/x94/x80/x83 EGYPTIAN HIEROGLYPH-14003 +<U00014004> /xf0/x94/x80/x84 EGYPTIAN HIEROGLYPH-14004 +<U00014005> /xf0/x94/x80/x85 EGYPTIAN HIEROGLYPH-14005 +<U00014006> /xf0/x94/x80/x86 EGYPTIAN HIEROGLYPH-14006 +<U00014007> /xf0/x94/x80/x87 EGYPTIAN HIEROGLYPH-14007 +<U00014008> /xf0/x94/x80/x88 EGYPTIAN HIEROGLYPH-14008 +<U00014009> /xf0/x94/x80/x89 EGYPTIAN HIEROGLYPH-14009 +<U0001400A> /xf0/x94/x80/x8a EGYPTIAN HIEROGLYPH-1400A +<U0001400B> /xf0/x94/x80/x8b EGYPTIAN HIEROGLYPH-1400B +<U0001400C> /xf0/x94/x80/x8c EGYPTIAN HIEROGLYPH-1400C +<U0001400D> /xf0/x94/x80/x8d EGYPTIAN HIEROGLYPH-1400D +<U0001400E> /xf0/x94/x80/x8e EGYPTIAN HIEROGLYPH-1400E +<U0001400F> /xf0/x94/x80/x8f EGYPTIAN HIEROGLYPH-1400F +<U00014010> /xf0/x94/x80/x90 EGYPTIAN HIEROGLYPH-14010 +<U00014011> /xf0/x94/x80/x91 EGYPTIAN HIEROGLYPH-14011 +<U00014012> /xf0/x94/x80/x92 EGYPTIAN HIEROGLYPH-14012 +<U00014013> /xf0/x94/x80/x93 EGYPTIAN HIEROGLYPH-14013 +<U00014014> /xf0/x94/x80/x94 EGYPTIAN HIEROGLYPH-14014 +<U00014015> /xf0/x94/x80/x95 EGYPTIAN HIEROGLYPH-14015 +<U00014016> /xf0/x94/x80/x96 EGYPTIAN HIEROGLYPH-14016 +<U00014017> /xf0/x94/x80/x97 EGYPTIAN HIEROGLYPH-14017 +<U00014018> /xf0/x94/x80/x98 EGYPTIAN HIEROGLYPH-14018 +<U00014019> /xf0/x94/x80/x99 EGYPTIAN HIEROGLYPH-14019 +<U0001401A> /xf0/x94/x80/x9a EGYPTIAN HIEROGLYPH-1401A +<U0001401B> /xf0/x94/x80/x9b EGYPTIAN HIEROGLYPH-1401B +<U0001401C> /xf0/x94/x80/x9c EGYPTIAN HIEROGLYPH-1401C +<U0001401D> /xf0/x94/x80/x9d EGYPTIAN HIEROGLYPH-1401D +<U0001401E> /xf0/x94/x80/x9e EGYPTIAN HIEROGLYPH-1401E +<U0001401F> /xf0/x94/x80/x9f EGYPTIAN HIEROGLYPH-1401F +<U00014020> /xf0/x94/x80/xa0 EGYPTIAN HIEROGLYPH-14020 +<U00014021> /xf0/x94/x80/xa1 EGYPTIAN HIEROGLYPH-14021 +<U00014022> /xf0/x94/x80/xa2 EGYPTIAN HIEROGLYPH-14022 +<U00014023> /xf0/x94/x80/xa3 EGYPTIAN HIEROGLYPH-14023 +<U00014024> /xf0/x94/x80/xa4 EGYPTIAN HIEROGLYPH-14024 +<U00014025> /xf0/x94/x80/xa5 EGYPTIAN HIEROGLYPH-14025 +<U00014026> /xf0/x94/x80/xa6 EGYPTIAN HIEROGLYPH-14026 +<U00014027> /xf0/x94/x80/xa7 EGYPTIAN HIEROGLYPH-14027 +<U00014028> /xf0/x94/x80/xa8 EGYPTIAN HIEROGLYPH-14028 +<U00014029> /xf0/x94/x80/xa9 EGYPTIAN HIEROGLYPH-14029 +<U0001402A> /xf0/x94/x80/xaa EGYPTIAN HIEROGLYPH-1402A +<U0001402B> /xf0/x94/x80/xab EGYPTIAN HIEROGLYPH-1402B +<U0001402C> /xf0/x94/x80/xac EGYPTIAN HIEROGLYPH-1402C +<U0001402D> /xf0/x94/x80/xad EGYPTIAN HIEROGLYPH-1402D +<U0001402E> /xf0/x94/x80/xae EGYPTIAN HIEROGLYPH-1402E +<U0001402F> /xf0/x94/x80/xaf EGYPTIAN HIEROGLYPH-1402F +<U00014030> /xf0/x94/x80/xb0 EGYPTIAN HIEROGLYPH-14030 +<U00014031> /xf0/x94/x80/xb1 EGYPTIAN HIEROGLYPH-14031 +<U00014032> /xf0/x94/x80/xb2 EGYPTIAN HIEROGLYPH-14032 +<U00014033> /xf0/x94/x80/xb3 EGYPTIAN HIEROGLYPH-14033 +<U00014034> /xf0/x94/x80/xb4 EGYPTIAN HIEROGLYPH-14034 +<U00014035> /xf0/x94/x80/xb5 EGYPTIAN HIEROGLYPH-14035 +<U00014036> /xf0/x94/x80/xb6 EGYPTIAN HIEROGLYPH-14036 +<U00014037> /xf0/x94/x80/xb7 EGYPTIAN HIEROGLYPH-14037 +<U00014038> /xf0/x94/x80/xb8 EGYPTIAN HIEROGLYPH-14038 +<U00014039> /xf0/x94/x80/xb9 EGYPTIAN HIEROGLYPH-14039 +<U0001403A> /xf0/x94/x80/xba EGYPTIAN HIEROGLYPH-1403A +<U0001403B> /xf0/x94/x80/xbb EGYPTIAN HIEROGLYPH-1403B +<U0001403C> /xf0/x94/x80/xbc EGYPTIAN HIEROGLYPH-1403C +<U0001403D> /xf0/x94/x80/xbd EGYPTIAN HIEROGLYPH-1403D +<U0001403E> /xf0/x94/x80/xbe EGYPTIAN HIEROGLYPH-1403E +<U0001403F> /xf0/x94/x80/xbf EGYPTIAN HIEROGLYPH-1403F +<U00014040> /xf0/x94/x81/x80 EGYPTIAN HIEROGLYPH-14040 +<U00014041> /xf0/x94/x81/x81 EGYPTIAN HIEROGLYPH-14041 +<U00014042> /xf0/x94/x81/x82 EGYPTIAN HIEROGLYPH-14042 +<U00014043> /xf0/x94/x81/x83 EGYPTIAN HIEROGLYPH-14043 +<U00014044> /xf0/x94/x81/x84 EGYPTIAN HIEROGLYPH-14044 +<U00014045> /xf0/x94/x81/x85 EGYPTIAN HIEROGLYPH-14045 +<U00014046> /xf0/x94/x81/x86 EGYPTIAN HIEROGLYPH-14046 +<U00014047> /xf0/x94/x81/x87 EGYPTIAN HIEROGLYPH-14047 +<U00014048> /xf0/x94/x81/x88 EGYPTIAN HIEROGLYPH-14048 +<U00014049> /xf0/x94/x81/x89 EGYPTIAN HIEROGLYPH-14049 +<U0001404A> /xf0/x94/x81/x8a EGYPTIAN HIEROGLYPH-1404A +<U0001404B> /xf0/x94/x81/x8b EGYPTIAN HIEROGLYPH-1404B +<U0001404C> /xf0/x94/x81/x8c EGYPTIAN HIEROGLYPH-1404C +<U0001404D> /xf0/x94/x81/x8d EGYPTIAN HIEROGLYPH-1404D +<U0001404E> /xf0/x94/x81/x8e EGYPTIAN HIEROGLYPH-1404E +<U0001404F> /xf0/x94/x81/x8f EGYPTIAN HIEROGLYPH-1404F +<U00014050> /xf0/x94/x81/x90 EGYPTIAN HIEROGLYPH-14050 +<U00014051> /xf0/x94/x81/x91 EGYPTIAN HIEROGLYPH-14051 +<U00014052> /xf0/x94/x81/x92 EGYPTIAN HIEROGLYPH-14052 +<U00014053> /xf0/x94/x81/x93 EGYPTIAN HIEROGLYPH-14053 +<U00014054> /xf0/x94/x81/x94 EGYPTIAN HIEROGLYPH-14054 +<U00014055> /xf0/x94/x81/x95 EGYPTIAN HIEROGLYPH-14055 +<U00014056> /xf0/x94/x81/x96 EGYPTIAN HIEROGLYPH-14056 +<U00014057> /xf0/x94/x81/x97 EGYPTIAN HIEROGLYPH-14057 +<U00014058> /xf0/x94/x81/x98 EGYPTIAN HIEROGLYPH-14058 +<U00014059> /xf0/x94/x81/x99 EGYPTIAN HIEROGLYPH-14059 +<U0001405A> /xf0/x94/x81/x9a EGYPTIAN HIEROGLYPH-1405A +<U0001405B> /xf0/x94/x81/x9b EGYPTIAN HIEROGLYPH-1405B +<U0001405C> /xf0/x94/x81/x9c EGYPTIAN HIEROGLYPH-1405C +<U0001405D> /xf0/x94/x81/x9d EGYPTIAN HIEROGLYPH-1405D +<U0001405E> /xf0/x94/x81/x9e EGYPTIAN HIEROGLYPH-1405E +<U0001405F> /xf0/x94/x81/x9f EGYPTIAN HIEROGLYPH-1405F +<U00014060> /xf0/x94/x81/xa0 EGYPTIAN HIEROGLYPH-14060 +<U00014061> /xf0/x94/x81/xa1 EGYPTIAN HIEROGLYPH-14061 +<U00014062> /xf0/x94/x81/xa2 EGYPTIAN HIEROGLYPH-14062 +<U00014063> /xf0/x94/x81/xa3 EGYPTIAN HIEROGLYPH-14063 +<U00014064> /xf0/x94/x81/xa4 EGYPTIAN HIEROGLYPH-14064 +<U00014065> /xf0/x94/x81/xa5 EGYPTIAN HIEROGLYPH-14065 +<U00014066> /xf0/x94/x81/xa6 EGYPTIAN HIEROGLYPH-14066 +<U00014067> /xf0/x94/x81/xa7 EGYPTIAN HIEROGLYPH-14067 +<U00014068> /xf0/x94/x81/xa8 EGYPTIAN HIEROGLYPH-14068 +<U00014069> /xf0/x94/x81/xa9 EGYPTIAN HIEROGLYPH-14069 +<U0001406A> /xf0/x94/x81/xaa EGYPTIAN HIEROGLYPH-1406A +<U0001406B> /xf0/x94/x81/xab EGYPTIAN HIEROGLYPH-1406B +<U0001406C> /xf0/x94/x81/xac EGYPTIAN HIEROGLYPH-1406C +<U0001406D> /xf0/x94/x81/xad EGYPTIAN HIEROGLYPH-1406D +<U0001406E> /xf0/x94/x81/xae EGYPTIAN HIEROGLYPH-1406E +<U0001406F> /xf0/x94/x81/xaf EGYPTIAN HIEROGLYPH-1406F +<U00014070> /xf0/x94/x81/xb0 EGYPTIAN HIEROGLYPH-14070 +<U00014071> /xf0/x94/x81/xb1 EGYPTIAN HIEROGLYPH-14071 +<U00014072> /xf0/x94/x81/xb2 EGYPTIAN HIEROGLYPH-14072 +<U00014073> /xf0/x94/x81/xb3 EGYPTIAN HIEROGLYPH-14073 +<U00014074> /xf0/x94/x81/xb4 EGYPTIAN HIEROGLYPH-14074 +<U00014075> /xf0/x94/x81/xb5 EGYPTIAN HIEROGLYPH-14075 +<U00014076> /xf0/x94/x81/xb6 EGYPTIAN HIEROGLYPH-14076 +<U00014077> /xf0/x94/x81/xb7 EGYPTIAN HIEROGLYPH-14077 +<U00014078> /xf0/x94/x81/xb8 EGYPTIAN HIEROGLYPH-14078 +<U00014079> /xf0/x94/x81/xb9 EGYPTIAN HIEROGLYPH-14079 +<U0001407A> /xf0/x94/x81/xba EGYPTIAN HIEROGLYPH-1407A +<U0001407B> /xf0/x94/x81/xbb EGYPTIAN HIEROGLYPH-1407B +<U0001407C> /xf0/x94/x81/xbc EGYPTIAN HIEROGLYPH-1407C +<U0001407D> /xf0/x94/x81/xbd EGYPTIAN HIEROGLYPH-1407D +<U0001407E> /xf0/x94/x81/xbe EGYPTIAN HIEROGLYPH-1407E +<U0001407F> /xf0/x94/x81/xbf EGYPTIAN HIEROGLYPH-1407F +<U00014080> /xf0/x94/x82/x80 EGYPTIAN HIEROGLYPH-14080 +<U00014081> /xf0/x94/x82/x81 EGYPTIAN HIEROGLYPH-14081 +<U00014082> /xf0/x94/x82/x82 EGYPTIAN HIEROGLYPH-14082 +<U00014083> /xf0/x94/x82/x83 EGYPTIAN HIEROGLYPH-14083 +<U00014084> /xf0/x94/x82/x84 EGYPTIAN HIEROGLYPH-14084 +<U00014085> /xf0/x94/x82/x85 EGYPTIAN HIEROGLYPH-14085 +<U00014086> /xf0/x94/x82/x86 EGYPTIAN HIEROGLYPH-14086 +<U00014087> /xf0/x94/x82/x87 EGYPTIAN HIEROGLYPH-14087 +<U00014088> /xf0/x94/x82/x88 EGYPTIAN HIEROGLYPH-14088 +<U00014089> /xf0/x94/x82/x89 EGYPTIAN HIEROGLYPH-14089 +<U0001408A> /xf0/x94/x82/x8a EGYPTIAN HIEROGLYPH-1408A +<U0001408B> /xf0/x94/x82/x8b EGYPTIAN HIEROGLYPH-1408B +<U0001408C> /xf0/x94/x82/x8c EGYPTIAN HIEROGLYPH-1408C +<U0001408D> /xf0/x94/x82/x8d EGYPTIAN HIEROGLYPH-1408D +<U0001408E> /xf0/x94/x82/x8e EGYPTIAN HIEROGLYPH-1408E +<U0001408F> /xf0/x94/x82/x8f EGYPTIAN HIEROGLYPH-1408F +<U00014090> /xf0/x94/x82/x90 EGYPTIAN HIEROGLYPH-14090 +<U00014091> /xf0/x94/x82/x91 EGYPTIAN HIEROGLYPH-14091 +<U00014092> /xf0/x94/x82/x92 EGYPTIAN HIEROGLYPH-14092 +<U00014093> /xf0/x94/x82/x93 EGYPTIAN HIEROGLYPH-14093 +<U00014094> /xf0/x94/x82/x94 EGYPTIAN HIEROGLYPH-14094 +<U00014095> /xf0/x94/x82/x95 EGYPTIAN HIEROGLYPH-14095 +<U00014096> /xf0/x94/x82/x96 EGYPTIAN HIEROGLYPH-14096 +<U00014097> /xf0/x94/x82/x97 EGYPTIAN HIEROGLYPH-14097 +<U00014098> /xf0/x94/x82/x98 EGYPTIAN HIEROGLYPH-14098 +<U00014099> /xf0/x94/x82/x99 EGYPTIAN HIEROGLYPH-14099 +<U0001409A> /xf0/x94/x82/x9a EGYPTIAN HIEROGLYPH-1409A +<U0001409B> /xf0/x94/x82/x9b EGYPTIAN HIEROGLYPH-1409B +<U0001409C> /xf0/x94/x82/x9c EGYPTIAN HIEROGLYPH-1409C +<U0001409D> /xf0/x94/x82/x9d EGYPTIAN HIEROGLYPH-1409D +<U0001409E> /xf0/x94/x82/x9e EGYPTIAN HIEROGLYPH-1409E +<U0001409F> /xf0/x94/x82/x9f EGYPTIAN HIEROGLYPH-1409F +<U000140A0> /xf0/x94/x82/xa0 EGYPTIAN HIEROGLYPH-140A0 +<U000140A1> /xf0/x94/x82/xa1 EGYPTIAN HIEROGLYPH-140A1 +<U000140A2> /xf0/x94/x82/xa2 EGYPTIAN HIEROGLYPH-140A2 +<U000140A3> /xf0/x94/x82/xa3 EGYPTIAN HIEROGLYPH-140A3 +<U000140A4> /xf0/x94/x82/xa4 EGYPTIAN HIEROGLYPH-140A4 +<U000140A5> /xf0/x94/x82/xa5 EGYPTIAN HIEROGLYPH-140A5 +<U000140A6> /xf0/x94/x82/xa6 EGYPTIAN HIEROGLYPH-140A6 +<U000140A7> /xf0/x94/x82/xa7 EGYPTIAN HIEROGLYPH-140A7 +<U000140A8> /xf0/x94/x82/xa8 EGYPTIAN HIEROGLYPH-140A8 +<U000140A9> /xf0/x94/x82/xa9 EGYPTIAN HIEROGLYPH-140A9 +<U000140AA> /xf0/x94/x82/xaa EGYPTIAN HIEROGLYPH-140AA +<U000140AB> /xf0/x94/x82/xab EGYPTIAN HIEROGLYPH-140AB +<U000140AC> /xf0/x94/x82/xac EGYPTIAN HIEROGLYPH-140AC +<U000140AD> /xf0/x94/x82/xad EGYPTIAN HIEROGLYPH-140AD +<U000140AE> /xf0/x94/x82/xae EGYPTIAN HIEROGLYPH-140AE +<U000140AF> /xf0/x94/x82/xaf EGYPTIAN HIEROGLYPH-140AF +<U000140B0> /xf0/x94/x82/xb0 EGYPTIAN HIEROGLYPH-140B0 +<U000140B1> /xf0/x94/x82/xb1 EGYPTIAN HIEROGLYPH-140B1 +<U000140B2> /xf0/x94/x82/xb2 EGYPTIAN HIEROGLYPH-140B2 +<U000140B3> /xf0/x94/x82/xb3 EGYPTIAN HIEROGLYPH-140B3 +<U000140B4> /xf0/x94/x82/xb4 EGYPTIAN HIEROGLYPH-140B4 +<U000140B5> /xf0/x94/x82/xb5 EGYPTIAN HIEROGLYPH-140B5 +<U000140B6> /xf0/x94/x82/xb6 EGYPTIAN HIEROGLYPH-140B6 +<U000140B7> /xf0/x94/x82/xb7 EGYPTIAN HIEROGLYPH-140B7 +<U000140B8> /xf0/x94/x82/xb8 EGYPTIAN HIEROGLYPH-140B8 +<U000140B9> /xf0/x94/x82/xb9 EGYPTIAN HIEROGLYPH-140B9 +<U000140BA> /xf0/x94/x82/xba EGYPTIAN HIEROGLYPH-140BA +<U000140BB> /xf0/x94/x82/xbb EGYPTIAN HIEROGLYPH-140BB +<U000140BC> /xf0/x94/x82/xbc EGYPTIAN HIEROGLYPH-140BC +<U000140BD> /xf0/x94/x82/xbd EGYPTIAN HIEROGLYPH-140BD +<U000140BE> /xf0/x94/x82/xbe EGYPTIAN HIEROGLYPH-140BE +<U000140BF> /xf0/x94/x82/xbf EGYPTIAN HIEROGLYPH-140BF +<U000140C0> /xf0/x94/x83/x80 EGYPTIAN HIEROGLYPH-140C0 +<U000140C1> /xf0/x94/x83/x81 EGYPTIAN HIEROGLYPH-140C1 +<U000140C2> /xf0/x94/x83/x82 EGYPTIAN HIEROGLYPH-140C2 +<U000140C3> /xf0/x94/x83/x83 EGYPTIAN HIEROGLYPH-140C3 +<U000140C4> /xf0/x94/x83/x84 EGYPTIAN HIEROGLYPH-140C4 +<U000140C5> /xf0/x94/x83/x85 EGYPTIAN HIEROGLYPH-140C5 +<U000140C6> /xf0/x94/x83/x86 EGYPTIAN HIEROGLYPH-140C6 +<U000140C7> /xf0/x94/x83/x87 EGYPTIAN HIEROGLYPH-140C7 +<U000140C8> /xf0/x94/x83/x88 EGYPTIAN HIEROGLYPH-140C8 +<U000140C9> /xf0/x94/x83/x89 EGYPTIAN HIEROGLYPH-140C9 +<U000140CA> /xf0/x94/x83/x8a EGYPTIAN HIEROGLYPH-140CA +<U000140CB> /xf0/x94/x83/x8b EGYPTIAN HIEROGLYPH-140CB +<U000140CC> /xf0/x94/x83/x8c EGYPTIAN HIEROGLYPH-140CC +<U000140CD> /xf0/x94/x83/x8d EGYPTIAN HIEROGLYPH-140CD +<U000140CE> /xf0/x94/x83/x8e EGYPTIAN HIEROGLYPH-140CE +<U000140CF> /xf0/x94/x83/x8f EGYPTIAN HIEROGLYPH-140CF +<U000140D0> /xf0/x94/x83/x90 EGYPTIAN HIEROGLYPH-140D0 +<U000140D1> /xf0/x94/x83/x91 EGYPTIAN HIEROGLYPH-140D1 +<U000140D2> /xf0/x94/x83/x92 EGYPTIAN HIEROGLYPH-140D2 +<U000140D3> /xf0/x94/x83/x93 EGYPTIAN HIEROGLYPH-140D3 +<U000140D4> /xf0/x94/x83/x94 EGYPTIAN HIEROGLYPH-140D4 +<U000140D5> /xf0/x94/x83/x95 EGYPTIAN HIEROGLYPH-140D5 +<U000140D6> /xf0/x94/x83/x96 EGYPTIAN HIEROGLYPH-140D6 +<U000140D7> /xf0/x94/x83/x97 EGYPTIAN HIEROGLYPH-140D7 +<U000140D8> /xf0/x94/x83/x98 EGYPTIAN HIEROGLYPH-140D8 +<U000140D9> /xf0/x94/x83/x99 EGYPTIAN HIEROGLYPH-140D9 +<U000140DA> /xf0/x94/x83/x9a EGYPTIAN HIEROGLYPH-140DA +<U000140DB> /xf0/x94/x83/x9b EGYPTIAN HIEROGLYPH-140DB +<U000140DC> /xf0/x94/x83/x9c EGYPTIAN HIEROGLYPH-140DC +<U000140DD> /xf0/x94/x83/x9d EGYPTIAN HIEROGLYPH-140DD +<U000140DE> /xf0/x94/x83/x9e EGYPTIAN HIEROGLYPH-140DE +<U000140DF> /xf0/x94/x83/x9f EGYPTIAN HIEROGLYPH-140DF +<U000140E0> /xf0/x94/x83/xa0 EGYPTIAN HIEROGLYPH-140E0 +<U000140E1> /xf0/x94/x83/xa1 EGYPTIAN HIEROGLYPH-140E1 +<U000140E2> /xf0/x94/x83/xa2 EGYPTIAN HIEROGLYPH-140E2 +<U000140E3> /xf0/x94/x83/xa3 EGYPTIAN HIEROGLYPH-140E3 +<U000140E4> /xf0/x94/x83/xa4 EGYPTIAN HIEROGLYPH-140E4 +<U000140E5> /xf0/x94/x83/xa5 EGYPTIAN HIEROGLYPH-140E5 +<U000140E6> /xf0/x94/x83/xa6 EGYPTIAN HIEROGLYPH-140E6 +<U000140E7> /xf0/x94/x83/xa7 EGYPTIAN HIEROGLYPH-140E7 +<U000140E8> /xf0/x94/x83/xa8 EGYPTIAN HIEROGLYPH-140E8 +<U000140E9> /xf0/x94/x83/xa9 EGYPTIAN HIEROGLYPH-140E9 +<U000140EA> /xf0/x94/x83/xaa EGYPTIAN HIEROGLYPH-140EA +<U000140EB> /xf0/x94/x83/xab EGYPTIAN HIEROGLYPH-140EB +<U000140EC> /xf0/x94/x83/xac EGYPTIAN HIEROGLYPH-140EC +<U000140ED> /xf0/x94/x83/xad EGYPTIAN HIEROGLYPH-140ED +<U000140EE> /xf0/x94/x83/xae EGYPTIAN HIEROGLYPH-140EE +<U000140EF> /xf0/x94/x83/xaf EGYPTIAN HIEROGLYPH-140EF +<U000140F0> /xf0/x94/x83/xb0 EGYPTIAN HIEROGLYPH-140F0 +<U000140F1> /xf0/x94/x83/xb1 EGYPTIAN HIEROGLYPH-140F1 +<U000140F2> /xf0/x94/x83/xb2 EGYPTIAN HIEROGLYPH-140F2 +<U000140F3> /xf0/x94/x83/xb3 EGYPTIAN HIEROGLYPH-140F3 +<U000140F4> /xf0/x94/x83/xb4 EGYPTIAN HIEROGLYPH-140F4 +<U000140F5> /xf0/x94/x83/xb5 EGYPTIAN HIEROGLYPH-140F5 +<U000140F6> /xf0/x94/x83/xb6 EGYPTIAN HIEROGLYPH-140F6 +<U000140F7> /xf0/x94/x83/xb7 EGYPTIAN HIEROGLYPH-140F7 +<U000140F8> /xf0/x94/x83/xb8 EGYPTIAN HIEROGLYPH-140F8 +<U000140F9> /xf0/x94/x83/xb9 EGYPTIAN HIEROGLYPH-140F9 +<U000140FA> /xf0/x94/x83/xba EGYPTIAN HIEROGLYPH-140FA +<U000140FB> /xf0/x94/x83/xbb EGYPTIAN HIEROGLYPH-140FB +<U000140FC> /xf0/x94/x83/xbc EGYPTIAN HIEROGLYPH-140FC +<U000140FD> /xf0/x94/x83/xbd EGYPTIAN HIEROGLYPH-140FD +<U000140FE> /xf0/x94/x83/xbe EGYPTIAN HIEROGLYPH-140FE +<U000140FF> /xf0/x94/x83/xbf EGYPTIAN HIEROGLYPH-140FF +<U00014100> /xf0/x94/x84/x80 EGYPTIAN HIEROGLYPH-14100 +<U00014101> /xf0/x94/x84/x81 EGYPTIAN HIEROGLYPH-14101 +<U00014102> /xf0/x94/x84/x82 EGYPTIAN HIEROGLYPH-14102 +<U00014103> /xf0/x94/x84/x83 EGYPTIAN HIEROGLYPH-14103 +<U00014104> /xf0/x94/x84/x84 EGYPTIAN HIEROGLYPH-14104 +<U00014105> /xf0/x94/x84/x85 EGYPTIAN HIEROGLYPH-14105 +<U00014106> /xf0/x94/x84/x86 EGYPTIAN HIEROGLYPH-14106 +<U00014107> /xf0/x94/x84/x87 EGYPTIAN HIEROGLYPH-14107 +<U00014108> /xf0/x94/x84/x88 EGYPTIAN HIEROGLYPH-14108 +<U00014109> /xf0/x94/x84/x89 EGYPTIAN HIEROGLYPH-14109 +<U0001410A> /xf0/x94/x84/x8a EGYPTIAN HIEROGLYPH-1410A +<U0001410B> /xf0/x94/x84/x8b EGYPTIAN HIEROGLYPH-1410B +<U0001410C> /xf0/x94/x84/x8c EGYPTIAN HIEROGLYPH-1410C +<U0001410D> /xf0/x94/x84/x8d EGYPTIAN HIEROGLYPH-1410D +<U0001410E> /xf0/x94/x84/x8e EGYPTIAN HIEROGLYPH-1410E +<U0001410F> /xf0/x94/x84/x8f EGYPTIAN HIEROGLYPH-1410F +<U00014110> /xf0/x94/x84/x90 EGYPTIAN HIEROGLYPH-14110 +<U00014111> /xf0/x94/x84/x91 EGYPTIAN HIEROGLYPH-14111 +<U00014112> /xf0/x94/x84/x92 EGYPTIAN HIEROGLYPH-14112 +<U00014113> /xf0/x94/x84/x93 EGYPTIAN HIEROGLYPH-14113 +<U00014114> /xf0/x94/x84/x94 EGYPTIAN HIEROGLYPH-14114 +<U00014115> /xf0/x94/x84/x95 EGYPTIAN HIEROGLYPH-14115 +<U00014116> /xf0/x94/x84/x96 EGYPTIAN HIEROGLYPH-14116 +<U00014117> /xf0/x94/x84/x97 EGYPTIAN HIEROGLYPH-14117 +<U00014118> /xf0/x94/x84/x98 EGYPTIAN HIEROGLYPH-14118 +<U00014119> /xf0/x94/x84/x99 EGYPTIAN HIEROGLYPH-14119 +<U0001411A> /xf0/x94/x84/x9a EGYPTIAN HIEROGLYPH-1411A +<U0001411B> /xf0/x94/x84/x9b EGYPTIAN HIEROGLYPH-1411B +<U0001411C> /xf0/x94/x84/x9c EGYPTIAN HIEROGLYPH-1411C +<U0001411D> /xf0/x94/x84/x9d EGYPTIAN HIEROGLYPH-1411D +<U0001411E> /xf0/x94/x84/x9e EGYPTIAN HIEROGLYPH-1411E +<U0001411F> /xf0/x94/x84/x9f EGYPTIAN HIEROGLYPH-1411F +<U00014120> /xf0/x94/x84/xa0 EGYPTIAN HIEROGLYPH-14120 +<U00014121> /xf0/x94/x84/xa1 EGYPTIAN HIEROGLYPH-14121 +<U00014122> /xf0/x94/x84/xa2 EGYPTIAN HIEROGLYPH-14122 +<U00014123> /xf0/x94/x84/xa3 EGYPTIAN HIEROGLYPH-14123 +<U00014124> /xf0/x94/x84/xa4 EGYPTIAN HIEROGLYPH-14124 +<U00014125> /xf0/x94/x84/xa5 EGYPTIAN HIEROGLYPH-14125 +<U00014126> /xf0/x94/x84/xa6 EGYPTIAN HIEROGLYPH-14126 +<U00014127> /xf0/x94/x84/xa7 EGYPTIAN HIEROGLYPH-14127 +<U00014128> /xf0/x94/x84/xa8 EGYPTIAN HIEROGLYPH-14128 +<U00014129> /xf0/x94/x84/xa9 EGYPTIAN HIEROGLYPH-14129 +<U0001412A> /xf0/x94/x84/xaa EGYPTIAN HIEROGLYPH-1412A +<U0001412B> /xf0/x94/x84/xab EGYPTIAN HIEROGLYPH-1412B +<U0001412C> /xf0/x94/x84/xac EGYPTIAN HIEROGLYPH-1412C +<U0001412D> /xf0/x94/x84/xad EGYPTIAN HIEROGLYPH-1412D +<U0001412E> /xf0/x94/x84/xae EGYPTIAN HIEROGLYPH-1412E +<U0001412F> /xf0/x94/x84/xaf EGYPTIAN HIEROGLYPH-1412F +<U00014130> /xf0/x94/x84/xb0 EGYPTIAN HIEROGLYPH-14130 +<U00014131> /xf0/x94/x84/xb1 EGYPTIAN HIEROGLYPH-14131 +<U00014132> /xf0/x94/x84/xb2 EGYPTIAN HIEROGLYPH-14132 +<U00014133> /xf0/x94/x84/xb3 EGYPTIAN HIEROGLYPH-14133 +<U00014134> /xf0/x94/x84/xb4 EGYPTIAN HIEROGLYPH-14134 +<U00014135> /xf0/x94/x84/xb5 EGYPTIAN HIEROGLYPH-14135 +<U00014136> /xf0/x94/x84/xb6 EGYPTIAN HIEROGLYPH-14136 +<U00014137> /xf0/x94/x84/xb7 EGYPTIAN HIEROGLYPH-14137 +<U00014138> /xf0/x94/x84/xb8 EGYPTIAN HIEROGLYPH-14138 +<U00014139> /xf0/x94/x84/xb9 EGYPTIAN HIEROGLYPH-14139 +<U0001413A> /xf0/x94/x84/xba EGYPTIAN HIEROGLYPH-1413A +<U0001413B> /xf0/x94/x84/xbb EGYPTIAN HIEROGLYPH-1413B +<U0001413C> /xf0/x94/x84/xbc EGYPTIAN HIEROGLYPH-1413C +<U0001413D> /xf0/x94/x84/xbd EGYPTIAN HIEROGLYPH-1413D +<U0001413E> /xf0/x94/x84/xbe EGYPTIAN HIEROGLYPH-1413E +<U0001413F> /xf0/x94/x84/xbf EGYPTIAN HIEROGLYPH-1413F +<U00014140> /xf0/x94/x85/x80 EGYPTIAN HIEROGLYPH-14140 +<U00014141> /xf0/x94/x85/x81 EGYPTIAN HIEROGLYPH-14141 +<U00014142> /xf0/x94/x85/x82 EGYPTIAN HIEROGLYPH-14142 +<U00014143> /xf0/x94/x85/x83 EGYPTIAN HIEROGLYPH-14143 +<U00014144> /xf0/x94/x85/x84 EGYPTIAN HIEROGLYPH-14144 +<U00014145> /xf0/x94/x85/x85 EGYPTIAN HIEROGLYPH-14145 +<U00014146> /xf0/x94/x85/x86 EGYPTIAN HIEROGLYPH-14146 +<U00014147> /xf0/x94/x85/x87 EGYPTIAN HIEROGLYPH-14147 +<U00014148> /xf0/x94/x85/x88 EGYPTIAN HIEROGLYPH-14148 +<U00014149> /xf0/x94/x85/x89 EGYPTIAN HIEROGLYPH-14149 +<U0001414A> /xf0/x94/x85/x8a EGYPTIAN HIEROGLYPH-1414A +<U0001414B> /xf0/x94/x85/x8b EGYPTIAN HIEROGLYPH-1414B +<U0001414C> /xf0/x94/x85/x8c EGYPTIAN HIEROGLYPH-1414C +<U0001414D> /xf0/x94/x85/x8d EGYPTIAN HIEROGLYPH-1414D +<U0001414E> /xf0/x94/x85/x8e EGYPTIAN HIEROGLYPH-1414E +<U0001414F> /xf0/x94/x85/x8f EGYPTIAN HIEROGLYPH-1414F +<U00014150> /xf0/x94/x85/x90 EGYPTIAN HIEROGLYPH-14150 +<U00014151> /xf0/x94/x85/x91 EGYPTIAN HIEROGLYPH-14151 +<U00014152> /xf0/x94/x85/x92 EGYPTIAN HIEROGLYPH-14152 +<U00014153> /xf0/x94/x85/x93 EGYPTIAN HIEROGLYPH-14153 +<U00014154> /xf0/x94/x85/x94 EGYPTIAN HIEROGLYPH-14154 +<U00014155> /xf0/x94/x85/x95 EGYPTIAN HIEROGLYPH-14155 +<U00014156> /xf0/x94/x85/x96 EGYPTIAN HIEROGLYPH-14156 +<U00014157> /xf0/x94/x85/x97 EGYPTIAN HIEROGLYPH-14157 +<U00014158> /xf0/x94/x85/x98 EGYPTIAN HIEROGLYPH-14158 +<U00014159> /xf0/x94/x85/x99 EGYPTIAN HIEROGLYPH-14159 +<U0001415A> /xf0/x94/x85/x9a EGYPTIAN HIEROGLYPH-1415A +<U0001415B> /xf0/x94/x85/x9b EGYPTIAN HIEROGLYPH-1415B +<U0001415C> /xf0/x94/x85/x9c EGYPTIAN HIEROGLYPH-1415C +<U0001415D> /xf0/x94/x85/x9d EGYPTIAN HIEROGLYPH-1415D +<U0001415E> /xf0/x94/x85/x9e EGYPTIAN HIEROGLYPH-1415E +<U0001415F> /xf0/x94/x85/x9f EGYPTIAN HIEROGLYPH-1415F +<U00014160> /xf0/x94/x85/xa0 EGYPTIAN HIEROGLYPH-14160 +<U00014161> /xf0/x94/x85/xa1 EGYPTIAN HIEROGLYPH-14161 +<U00014162> /xf0/x94/x85/xa2 EGYPTIAN HIEROGLYPH-14162 +<U00014163> /xf0/x94/x85/xa3 EGYPTIAN HIEROGLYPH-14163 +<U00014164> /xf0/x94/x85/xa4 EGYPTIAN HIEROGLYPH-14164 +<U00014165> /xf0/x94/x85/xa5 EGYPTIAN HIEROGLYPH-14165 +<U00014166> /xf0/x94/x85/xa6 EGYPTIAN HIEROGLYPH-14166 +<U00014167> /xf0/x94/x85/xa7 EGYPTIAN HIEROGLYPH-14167 +<U00014168> /xf0/x94/x85/xa8 EGYPTIAN HIEROGLYPH-14168 +<U00014169> /xf0/x94/x85/xa9 EGYPTIAN HIEROGLYPH-14169 +<U0001416A> /xf0/x94/x85/xaa EGYPTIAN HIEROGLYPH-1416A +<U0001416B> /xf0/x94/x85/xab EGYPTIAN HIEROGLYPH-1416B +<U0001416C> /xf0/x94/x85/xac EGYPTIAN HIEROGLYPH-1416C +<U0001416D> /xf0/x94/x85/xad EGYPTIAN HIEROGLYPH-1416D +<U0001416E> /xf0/x94/x85/xae EGYPTIAN HIEROGLYPH-1416E +<U0001416F> /xf0/x94/x85/xaf EGYPTIAN HIEROGLYPH-1416F +<U00014170> /xf0/x94/x85/xb0 EGYPTIAN HIEROGLYPH-14170 +<U00014171> /xf0/x94/x85/xb1 EGYPTIAN HIEROGLYPH-14171 +<U00014172> /xf0/x94/x85/xb2 EGYPTIAN HIEROGLYPH-14172 +<U00014173> /xf0/x94/x85/xb3 EGYPTIAN HIEROGLYPH-14173 +<U00014174> /xf0/x94/x85/xb4 EGYPTIAN HIEROGLYPH-14174 +<U00014175> /xf0/x94/x85/xb5 EGYPTIAN HIEROGLYPH-14175 +<U00014176> /xf0/x94/x85/xb6 EGYPTIAN HIEROGLYPH-14176 +<U00014177> /xf0/x94/x85/xb7 EGYPTIAN HIEROGLYPH-14177 +<U00014178> /xf0/x94/x85/xb8 EGYPTIAN HIEROGLYPH-14178 +<U00014179> /xf0/x94/x85/xb9 EGYPTIAN HIEROGLYPH-14179 +<U0001417A> /xf0/x94/x85/xba EGYPTIAN HIEROGLYPH-1417A +<U0001417B> /xf0/x94/x85/xbb EGYPTIAN HIEROGLYPH-1417B +<U0001417C> /xf0/x94/x85/xbc EGYPTIAN HIEROGLYPH-1417C +<U0001417D> /xf0/x94/x85/xbd EGYPTIAN HIEROGLYPH-1417D +<U0001417E> /xf0/x94/x85/xbe EGYPTIAN HIEROGLYPH-1417E +<U0001417F> /xf0/x94/x85/xbf EGYPTIAN HIEROGLYPH-1417F +<U00014180> /xf0/x94/x86/x80 EGYPTIAN HIEROGLYPH-14180 +<U00014181> /xf0/x94/x86/x81 EGYPTIAN HIEROGLYPH-14181 +<U00014182> /xf0/x94/x86/x82 EGYPTIAN HIEROGLYPH-14182 +<U00014183> /xf0/x94/x86/x83 EGYPTIAN HIEROGLYPH-14183 +<U00014184> /xf0/x94/x86/x84 EGYPTIAN HIEROGLYPH-14184 +<U00014185> /xf0/x94/x86/x85 EGYPTIAN HIEROGLYPH-14185 +<U00014186> /xf0/x94/x86/x86 EGYPTIAN HIEROGLYPH-14186 +<U00014187> /xf0/x94/x86/x87 EGYPTIAN HIEROGLYPH-14187 +<U00014188> /xf0/x94/x86/x88 EGYPTIAN HIEROGLYPH-14188 +<U00014189> /xf0/x94/x86/x89 EGYPTIAN HIEROGLYPH-14189 +<U0001418A> /xf0/x94/x86/x8a EGYPTIAN HIEROGLYPH-1418A +<U0001418B> /xf0/x94/x86/x8b EGYPTIAN HIEROGLYPH-1418B +<U0001418C> /xf0/x94/x86/x8c EGYPTIAN HIEROGLYPH-1418C +<U0001418D> /xf0/x94/x86/x8d EGYPTIAN HIEROGLYPH-1418D +<U0001418E> /xf0/x94/x86/x8e EGYPTIAN HIEROGLYPH-1418E +<U0001418F> /xf0/x94/x86/x8f EGYPTIAN HIEROGLYPH-1418F +<U00014190> /xf0/x94/x86/x90 EGYPTIAN HIEROGLYPH-14190 +<U00014191> /xf0/x94/x86/x91 EGYPTIAN HIEROGLYPH-14191 +<U00014192> /xf0/x94/x86/x92 EGYPTIAN HIEROGLYPH-14192 +<U00014193> /xf0/x94/x86/x93 EGYPTIAN HIEROGLYPH-14193 +<U00014194> /xf0/x94/x86/x94 EGYPTIAN HIEROGLYPH-14194 +<U00014195> /xf0/x94/x86/x95 EGYPTIAN HIEROGLYPH-14195 +<U00014196> /xf0/x94/x86/x96 EGYPTIAN HIEROGLYPH-14196 +<U00014197> /xf0/x94/x86/x97 EGYPTIAN HIEROGLYPH-14197 +<U00014198> /xf0/x94/x86/x98 EGYPTIAN HIEROGLYPH-14198 +<U00014199> /xf0/x94/x86/x99 EGYPTIAN HIEROGLYPH-14199 +<U0001419A> /xf0/x94/x86/x9a EGYPTIAN HIEROGLYPH-1419A +<U0001419B> /xf0/x94/x86/x9b EGYPTIAN HIEROGLYPH-1419B +<U0001419C> /xf0/x94/x86/x9c EGYPTIAN HIEROGLYPH-1419C +<U0001419D> /xf0/x94/x86/x9d EGYPTIAN HIEROGLYPH-1419D +<U0001419E> /xf0/x94/x86/x9e EGYPTIAN HIEROGLYPH-1419E +<U0001419F> /xf0/x94/x86/x9f EGYPTIAN HIEROGLYPH-1419F +<U000141A0> /xf0/x94/x86/xa0 EGYPTIAN HIEROGLYPH-141A0 +<U000141A1> /xf0/x94/x86/xa1 EGYPTIAN HIEROGLYPH-141A1 +<U000141A2> /xf0/x94/x86/xa2 EGYPTIAN HIEROGLYPH-141A2 +<U000141A3> /xf0/x94/x86/xa3 EGYPTIAN HIEROGLYPH-141A3 +<U000141A4> /xf0/x94/x86/xa4 EGYPTIAN HIEROGLYPH-141A4 +<U000141A5> /xf0/x94/x86/xa5 EGYPTIAN HIEROGLYPH-141A5 +<U000141A6> /xf0/x94/x86/xa6 EGYPTIAN HIEROGLYPH-141A6 +<U000141A7> /xf0/x94/x86/xa7 EGYPTIAN HIEROGLYPH-141A7 +<U000141A8> /xf0/x94/x86/xa8 EGYPTIAN HIEROGLYPH-141A8 +<U000141A9> /xf0/x94/x86/xa9 EGYPTIAN HIEROGLYPH-141A9 +<U000141AA> /xf0/x94/x86/xaa EGYPTIAN HIEROGLYPH-141AA +<U000141AB> /xf0/x94/x86/xab EGYPTIAN HIEROGLYPH-141AB +<U000141AC> /xf0/x94/x86/xac EGYPTIAN HIEROGLYPH-141AC +<U000141AD> /xf0/x94/x86/xad EGYPTIAN HIEROGLYPH-141AD +<U000141AE> /xf0/x94/x86/xae EGYPTIAN HIEROGLYPH-141AE +<U000141AF> /xf0/x94/x86/xaf EGYPTIAN HIEROGLYPH-141AF +<U000141B0> /xf0/x94/x86/xb0 EGYPTIAN HIEROGLYPH-141B0 +<U000141B1> /xf0/x94/x86/xb1 EGYPTIAN HIEROGLYPH-141B1 +<U000141B2> /xf0/x94/x86/xb2 EGYPTIAN HIEROGLYPH-141B2 +<U000141B3> /xf0/x94/x86/xb3 EGYPTIAN HIEROGLYPH-141B3 +<U000141B4> /xf0/x94/x86/xb4 EGYPTIAN HIEROGLYPH-141B4 +<U000141B5> /xf0/x94/x86/xb5 EGYPTIAN HIEROGLYPH-141B5 +<U000141B6> /xf0/x94/x86/xb6 EGYPTIAN HIEROGLYPH-141B6 +<U000141B7> /xf0/x94/x86/xb7 EGYPTIAN HIEROGLYPH-141B7 +<U000141B8> /xf0/x94/x86/xb8 EGYPTIAN HIEROGLYPH-141B8 +<U000141B9> /xf0/x94/x86/xb9 EGYPTIAN HIEROGLYPH-141B9 +<U000141BA> /xf0/x94/x86/xba EGYPTIAN HIEROGLYPH-141BA +<U000141BB> /xf0/x94/x86/xbb EGYPTIAN HIEROGLYPH-141BB +<U000141BC> /xf0/x94/x86/xbc EGYPTIAN HIEROGLYPH-141BC +<U000141BD> /xf0/x94/x86/xbd EGYPTIAN HIEROGLYPH-141BD +<U000141BE> /xf0/x94/x86/xbe EGYPTIAN HIEROGLYPH-141BE +<U000141BF> /xf0/x94/x86/xbf EGYPTIAN HIEROGLYPH-141BF +<U000141C0> /xf0/x94/x87/x80 EGYPTIAN HIEROGLYPH-141C0 +<U000141C1> /xf0/x94/x87/x81 EGYPTIAN HIEROGLYPH-141C1 +<U000141C2> /xf0/x94/x87/x82 EGYPTIAN HIEROGLYPH-141C2 +<U000141C3> /xf0/x94/x87/x83 EGYPTIAN HIEROGLYPH-141C3 +<U000141C4> /xf0/x94/x87/x84 EGYPTIAN HIEROGLYPH-141C4 +<U000141C5> /xf0/x94/x87/x85 EGYPTIAN HIEROGLYPH-141C5 +<U000141C6> /xf0/x94/x87/x86 EGYPTIAN HIEROGLYPH-141C6 +<U000141C7> /xf0/x94/x87/x87 EGYPTIAN HIEROGLYPH-141C7 +<U000141C8> /xf0/x94/x87/x88 EGYPTIAN HIEROGLYPH-141C8 +<U000141C9> /xf0/x94/x87/x89 EGYPTIAN HIEROGLYPH-141C9 +<U000141CA> /xf0/x94/x87/x8a EGYPTIAN HIEROGLYPH-141CA +<U000141CB> /xf0/x94/x87/x8b EGYPTIAN HIEROGLYPH-141CB +<U000141CC> /xf0/x94/x87/x8c EGYPTIAN HIEROGLYPH-141CC +<U000141CD> /xf0/x94/x87/x8d EGYPTIAN HIEROGLYPH-141CD +<U000141CE> /xf0/x94/x87/x8e EGYPTIAN HIEROGLYPH-141CE +<U000141CF> /xf0/x94/x87/x8f EGYPTIAN HIEROGLYPH-141CF +<U000141D0> /xf0/x94/x87/x90 EGYPTIAN HIEROGLYPH-141D0 +<U000141D1> /xf0/x94/x87/x91 EGYPTIAN HIEROGLYPH-141D1 +<U000141D2> /xf0/x94/x87/x92 EGYPTIAN HIEROGLYPH-141D2 +<U000141D3> /xf0/x94/x87/x93 EGYPTIAN HIEROGLYPH-141D3 +<U000141D4> /xf0/x94/x87/x94 EGYPTIAN HIEROGLYPH-141D4 +<U000141D5> /xf0/x94/x87/x95 EGYPTIAN HIEROGLYPH-141D5 +<U000141D6> /xf0/x94/x87/x96 EGYPTIAN HIEROGLYPH-141D6 +<U000141D7> /xf0/x94/x87/x97 EGYPTIAN HIEROGLYPH-141D7 +<U000141D8> /xf0/x94/x87/x98 EGYPTIAN HIEROGLYPH-141D8 +<U000141D9> /xf0/x94/x87/x99 EGYPTIAN HIEROGLYPH-141D9 +<U000141DA> /xf0/x94/x87/x9a EGYPTIAN HIEROGLYPH-141DA +<U000141DB> /xf0/x94/x87/x9b EGYPTIAN HIEROGLYPH-141DB +<U000141DC> /xf0/x94/x87/x9c EGYPTIAN HIEROGLYPH-141DC +<U000141DD> /xf0/x94/x87/x9d EGYPTIAN HIEROGLYPH-141DD +<U000141DE> /xf0/x94/x87/x9e EGYPTIAN HIEROGLYPH-141DE +<U000141DF> /xf0/x94/x87/x9f EGYPTIAN HIEROGLYPH-141DF +<U000141E0> /xf0/x94/x87/xa0 EGYPTIAN HIEROGLYPH-141E0 +<U000141E1> /xf0/x94/x87/xa1 EGYPTIAN HIEROGLYPH-141E1 +<U000141E2> /xf0/x94/x87/xa2 EGYPTIAN HIEROGLYPH-141E2 +<U000141E3> /xf0/x94/x87/xa3 EGYPTIAN HIEROGLYPH-141E3 +<U000141E4> /xf0/x94/x87/xa4 EGYPTIAN HIEROGLYPH-141E4 +<U000141E5> /xf0/x94/x87/xa5 EGYPTIAN HIEROGLYPH-141E5 +<U000141E6> /xf0/x94/x87/xa6 EGYPTIAN HIEROGLYPH-141E6 +<U000141E7> /xf0/x94/x87/xa7 EGYPTIAN HIEROGLYPH-141E7 +<U000141E8> /xf0/x94/x87/xa8 EGYPTIAN HIEROGLYPH-141E8 +<U000141E9> /xf0/x94/x87/xa9 EGYPTIAN HIEROGLYPH-141E9 +<U000141EA> /xf0/x94/x87/xaa EGYPTIAN HIEROGLYPH-141EA +<U000141EB> /xf0/x94/x87/xab EGYPTIAN HIEROGLYPH-141EB +<U000141EC> /xf0/x94/x87/xac EGYPTIAN HIEROGLYPH-141EC +<U000141ED> /xf0/x94/x87/xad EGYPTIAN HIEROGLYPH-141ED +<U000141EE> /xf0/x94/x87/xae EGYPTIAN HIEROGLYPH-141EE +<U000141EF> /xf0/x94/x87/xaf EGYPTIAN HIEROGLYPH-141EF +<U000141F0> /xf0/x94/x87/xb0 EGYPTIAN HIEROGLYPH-141F0 +<U000141F1> /xf0/x94/x87/xb1 EGYPTIAN HIEROGLYPH-141F1 +<U000141F2> /xf0/x94/x87/xb2 EGYPTIAN HIEROGLYPH-141F2 +<U000141F3> /xf0/x94/x87/xb3 EGYPTIAN HIEROGLYPH-141F3 +<U000141F4> /xf0/x94/x87/xb4 EGYPTIAN HIEROGLYPH-141F4 +<U000141F5> /xf0/x94/x87/xb5 EGYPTIAN HIEROGLYPH-141F5 +<U000141F6> /xf0/x94/x87/xb6 EGYPTIAN HIEROGLYPH-141F6 +<U000141F7> /xf0/x94/x87/xb7 EGYPTIAN HIEROGLYPH-141F7 +<U000141F8> /xf0/x94/x87/xb8 EGYPTIAN HIEROGLYPH-141F8 +<U000141F9> /xf0/x94/x87/xb9 EGYPTIAN HIEROGLYPH-141F9 +<U000141FA> /xf0/x94/x87/xba EGYPTIAN HIEROGLYPH-141FA +<U000141FB> /xf0/x94/x87/xbb EGYPTIAN HIEROGLYPH-141FB +<U000141FC> /xf0/x94/x87/xbc EGYPTIAN HIEROGLYPH-141FC +<U000141FD> /xf0/x94/x87/xbd EGYPTIAN HIEROGLYPH-141FD +<U000141FE> /xf0/x94/x87/xbe EGYPTIAN HIEROGLYPH-141FE +<U000141FF> /xf0/x94/x87/xbf EGYPTIAN HIEROGLYPH-141FF +<U00014200> /xf0/x94/x88/x80 EGYPTIAN HIEROGLYPH-14200 +<U00014201> /xf0/x94/x88/x81 EGYPTIAN HIEROGLYPH-14201 +<U00014202> /xf0/x94/x88/x82 EGYPTIAN HIEROGLYPH-14202 +<U00014203> /xf0/x94/x88/x83 EGYPTIAN HIEROGLYPH-14203 +<U00014204> /xf0/x94/x88/x84 EGYPTIAN HIEROGLYPH-14204 +<U00014205> /xf0/x94/x88/x85 EGYPTIAN HIEROGLYPH-14205 +<U00014206> /xf0/x94/x88/x86 EGYPTIAN HIEROGLYPH-14206 +<U00014207> /xf0/x94/x88/x87 EGYPTIAN HIEROGLYPH-14207 +<U00014208> /xf0/x94/x88/x88 EGYPTIAN HIEROGLYPH-14208 +<U00014209> /xf0/x94/x88/x89 EGYPTIAN HIEROGLYPH-14209 +<U0001420A> /xf0/x94/x88/x8a EGYPTIAN HIEROGLYPH-1420A +<U0001420B> /xf0/x94/x88/x8b EGYPTIAN HIEROGLYPH-1420B +<U0001420C> /xf0/x94/x88/x8c EGYPTIAN HIEROGLYPH-1420C +<U0001420D> /xf0/x94/x88/x8d EGYPTIAN HIEROGLYPH-1420D +<U0001420E> /xf0/x94/x88/x8e EGYPTIAN HIEROGLYPH-1420E +<U0001420F> /xf0/x94/x88/x8f EGYPTIAN HIEROGLYPH-1420F +<U00014210> /xf0/x94/x88/x90 EGYPTIAN HIEROGLYPH-14210 +<U00014211> /xf0/x94/x88/x91 EGYPTIAN HIEROGLYPH-14211 +<U00014212> /xf0/x94/x88/x92 EGYPTIAN HIEROGLYPH-14212 +<U00014213> /xf0/x94/x88/x93 EGYPTIAN HIEROGLYPH-14213 +<U00014214> /xf0/x94/x88/x94 EGYPTIAN HIEROGLYPH-14214 +<U00014215> /xf0/x94/x88/x95 EGYPTIAN HIEROGLYPH-14215 +<U00014216> /xf0/x94/x88/x96 EGYPTIAN HIEROGLYPH-14216 +<U00014217> /xf0/x94/x88/x97 EGYPTIAN HIEROGLYPH-14217 +<U00014218> /xf0/x94/x88/x98 EGYPTIAN HIEROGLYPH-14218 +<U00014219> /xf0/x94/x88/x99 EGYPTIAN HIEROGLYPH-14219 +<U0001421A> /xf0/x94/x88/x9a EGYPTIAN HIEROGLYPH-1421A +<U0001421B> /xf0/x94/x88/x9b EGYPTIAN HIEROGLYPH-1421B +<U0001421C> /xf0/x94/x88/x9c EGYPTIAN HIEROGLYPH-1421C +<U0001421D> /xf0/x94/x88/x9d EGYPTIAN HIEROGLYPH-1421D +<U0001421E> /xf0/x94/x88/x9e EGYPTIAN HIEROGLYPH-1421E +<U0001421F> /xf0/x94/x88/x9f EGYPTIAN HIEROGLYPH-1421F +<U00014220> /xf0/x94/x88/xa0 EGYPTIAN HIEROGLYPH-14220 +<U00014221> /xf0/x94/x88/xa1 EGYPTIAN HIEROGLYPH-14221 +<U00014222> /xf0/x94/x88/xa2 EGYPTIAN HIEROGLYPH-14222 +<U00014223> /xf0/x94/x88/xa3 EGYPTIAN HIEROGLYPH-14223 +<U00014224> /xf0/x94/x88/xa4 EGYPTIAN HIEROGLYPH-14224 +<U00014225> /xf0/x94/x88/xa5 EGYPTIAN HIEROGLYPH-14225 +<U00014226> /xf0/x94/x88/xa6 EGYPTIAN HIEROGLYPH-14226 +<U00014227> /xf0/x94/x88/xa7 EGYPTIAN HIEROGLYPH-14227 +<U00014228> /xf0/x94/x88/xa8 EGYPTIAN HIEROGLYPH-14228 +<U00014229> /xf0/x94/x88/xa9 EGYPTIAN HIEROGLYPH-14229 +<U0001422A> /xf0/x94/x88/xaa EGYPTIAN HIEROGLYPH-1422A +<U0001422B> /xf0/x94/x88/xab EGYPTIAN HIEROGLYPH-1422B +<U0001422C> /xf0/x94/x88/xac EGYPTIAN HIEROGLYPH-1422C +<U0001422D> /xf0/x94/x88/xad EGYPTIAN HIEROGLYPH-1422D +<U0001422E> /xf0/x94/x88/xae EGYPTIAN HIEROGLYPH-1422E +<U0001422F> /xf0/x94/x88/xaf EGYPTIAN HIEROGLYPH-1422F +<U00014230> /xf0/x94/x88/xb0 EGYPTIAN HIEROGLYPH-14230 +<U00014231> /xf0/x94/x88/xb1 EGYPTIAN HIEROGLYPH-14231 +<U00014232> /xf0/x94/x88/xb2 EGYPTIAN HIEROGLYPH-14232 +<U00014233> /xf0/x94/x88/xb3 EGYPTIAN HIEROGLYPH-14233 +<U00014234> /xf0/x94/x88/xb4 EGYPTIAN HIEROGLYPH-14234 +<U00014235> /xf0/x94/x88/xb5 EGYPTIAN HIEROGLYPH-14235 +<U00014236> /xf0/x94/x88/xb6 EGYPTIAN HIEROGLYPH-14236 +<U00014237> /xf0/x94/x88/xb7 EGYPTIAN HIEROGLYPH-14237 +<U00014238> /xf0/x94/x88/xb8 EGYPTIAN HIEROGLYPH-14238 +<U00014239> /xf0/x94/x88/xb9 EGYPTIAN HIEROGLYPH-14239 +<U0001423A> /xf0/x94/x88/xba EGYPTIAN HIEROGLYPH-1423A +<U0001423B> /xf0/x94/x88/xbb EGYPTIAN HIEROGLYPH-1423B +<U0001423C> /xf0/x94/x88/xbc EGYPTIAN HIEROGLYPH-1423C +<U0001423D> /xf0/x94/x88/xbd EGYPTIAN HIEROGLYPH-1423D +<U0001423E> /xf0/x94/x88/xbe EGYPTIAN HIEROGLYPH-1423E +<U0001423F> /xf0/x94/x88/xbf EGYPTIAN HIEROGLYPH-1423F +<U00014240> /xf0/x94/x89/x80 EGYPTIAN HIEROGLYPH-14240 +<U00014241> /xf0/x94/x89/x81 EGYPTIAN HIEROGLYPH-14241 +<U00014242> /xf0/x94/x89/x82 EGYPTIAN HIEROGLYPH-14242 +<U00014243> /xf0/x94/x89/x83 EGYPTIAN HIEROGLYPH-14243 +<U00014244> /xf0/x94/x89/x84 EGYPTIAN HIEROGLYPH-14244 +<U00014245> /xf0/x94/x89/x85 EGYPTIAN HIEROGLYPH-14245 +<U00014246> /xf0/x94/x89/x86 EGYPTIAN HIEROGLYPH-14246 +<U00014247> /xf0/x94/x89/x87 EGYPTIAN HIEROGLYPH-14247 +<U00014248> /xf0/x94/x89/x88 EGYPTIAN HIEROGLYPH-14248 +<U00014249> /xf0/x94/x89/x89 EGYPTIAN HIEROGLYPH-14249 +<U0001424A> /xf0/x94/x89/x8a EGYPTIAN HIEROGLYPH-1424A +<U0001424B> /xf0/x94/x89/x8b EGYPTIAN HIEROGLYPH-1424B +<U0001424C> /xf0/x94/x89/x8c EGYPTIAN HIEROGLYPH-1424C +<U0001424D> /xf0/x94/x89/x8d EGYPTIAN HIEROGLYPH-1424D +<U0001424E> /xf0/x94/x89/x8e EGYPTIAN HIEROGLYPH-1424E +<U0001424F> /xf0/x94/x89/x8f EGYPTIAN HIEROGLYPH-1424F +<U00014250> /xf0/x94/x89/x90 EGYPTIAN HIEROGLYPH-14250 +<U00014251> /xf0/x94/x89/x91 EGYPTIAN HIEROGLYPH-14251 +<U00014252> /xf0/x94/x89/x92 EGYPTIAN HIEROGLYPH-14252 +<U00014253> /xf0/x94/x89/x93 EGYPTIAN HIEROGLYPH-14253 +<U00014254> /xf0/x94/x89/x94 EGYPTIAN HIEROGLYPH-14254 +<U00014255> /xf0/x94/x89/x95 EGYPTIAN HIEROGLYPH-14255 +<U00014256> /xf0/x94/x89/x96 EGYPTIAN HIEROGLYPH-14256 +<U00014257> /xf0/x94/x89/x97 EGYPTIAN HIEROGLYPH-14257 +<U00014258> /xf0/x94/x89/x98 EGYPTIAN HIEROGLYPH-14258 +<U00014259> /xf0/x94/x89/x99 EGYPTIAN HIEROGLYPH-14259 +<U0001425A> /xf0/x94/x89/x9a EGYPTIAN HIEROGLYPH-1425A +<U0001425B> /xf0/x94/x89/x9b EGYPTIAN HIEROGLYPH-1425B +<U0001425C> /xf0/x94/x89/x9c EGYPTIAN HIEROGLYPH-1425C +<U0001425D> /xf0/x94/x89/x9d EGYPTIAN HIEROGLYPH-1425D +<U0001425E> /xf0/x94/x89/x9e EGYPTIAN HIEROGLYPH-1425E +<U0001425F> /xf0/x94/x89/x9f EGYPTIAN HIEROGLYPH-1425F +<U00014260> /xf0/x94/x89/xa0 EGYPTIAN HIEROGLYPH-14260 +<U00014261> /xf0/x94/x89/xa1 EGYPTIAN HIEROGLYPH-14261 +<U00014262> /xf0/x94/x89/xa2 EGYPTIAN HIEROGLYPH-14262 +<U00014263> /xf0/x94/x89/xa3 EGYPTIAN HIEROGLYPH-14263 +<U00014264> /xf0/x94/x89/xa4 EGYPTIAN HIEROGLYPH-14264 +<U00014265> /xf0/x94/x89/xa5 EGYPTIAN HIEROGLYPH-14265 +<U00014266> /xf0/x94/x89/xa6 EGYPTIAN HIEROGLYPH-14266 +<U00014267> /xf0/x94/x89/xa7 EGYPTIAN HIEROGLYPH-14267 +<U00014268> /xf0/x94/x89/xa8 EGYPTIAN HIEROGLYPH-14268 +<U00014269> /xf0/x94/x89/xa9 EGYPTIAN HIEROGLYPH-14269 +<U0001426A> /xf0/x94/x89/xaa EGYPTIAN HIEROGLYPH-1426A +<U0001426B> /xf0/x94/x89/xab EGYPTIAN HIEROGLYPH-1426B +<U0001426C> /xf0/x94/x89/xac EGYPTIAN HIEROGLYPH-1426C +<U0001426D> /xf0/x94/x89/xad EGYPTIAN HIEROGLYPH-1426D +<U0001426E> /xf0/x94/x89/xae EGYPTIAN HIEROGLYPH-1426E +<U0001426F> /xf0/x94/x89/xaf EGYPTIAN HIEROGLYPH-1426F +<U00014270> /xf0/x94/x89/xb0 EGYPTIAN HIEROGLYPH-14270 +<U00014271> /xf0/x94/x89/xb1 EGYPTIAN HIEROGLYPH-14271 +<U00014272> /xf0/x94/x89/xb2 EGYPTIAN HIEROGLYPH-14272 +<U00014273> /xf0/x94/x89/xb3 EGYPTIAN HIEROGLYPH-14273 +<U00014274> /xf0/x94/x89/xb4 EGYPTIAN HIEROGLYPH-14274 +<U00014275> /xf0/x94/x89/xb5 EGYPTIAN HIEROGLYPH-14275 +<U00014276> /xf0/x94/x89/xb6 EGYPTIAN HIEROGLYPH-14276 +<U00014277> /xf0/x94/x89/xb7 EGYPTIAN HIEROGLYPH-14277 +<U00014278> /xf0/x94/x89/xb8 EGYPTIAN HIEROGLYPH-14278 +<U00014279> /xf0/x94/x89/xb9 EGYPTIAN HIEROGLYPH-14279 +<U0001427A> /xf0/x94/x89/xba EGYPTIAN HIEROGLYPH-1427A +<U0001427B> /xf0/x94/x89/xbb EGYPTIAN HIEROGLYPH-1427B +<U0001427C> /xf0/x94/x89/xbc EGYPTIAN HIEROGLYPH-1427C +<U0001427D> /xf0/x94/x89/xbd EGYPTIAN HIEROGLYPH-1427D +<U0001427E> /xf0/x94/x89/xbe EGYPTIAN HIEROGLYPH-1427E +<U0001427F> /xf0/x94/x89/xbf EGYPTIAN HIEROGLYPH-1427F +<U00014280> /xf0/x94/x8a/x80 EGYPTIAN HIEROGLYPH-14280 +<U00014281> /xf0/x94/x8a/x81 EGYPTIAN HIEROGLYPH-14281 +<U00014282> /xf0/x94/x8a/x82 EGYPTIAN HIEROGLYPH-14282 +<U00014283> /xf0/x94/x8a/x83 EGYPTIAN HIEROGLYPH-14283 +<U00014284> /xf0/x94/x8a/x84 EGYPTIAN HIEROGLYPH-14284 +<U00014285> /xf0/x94/x8a/x85 EGYPTIAN HIEROGLYPH-14285 +<U00014286> /xf0/x94/x8a/x86 EGYPTIAN HIEROGLYPH-14286 +<U00014287> /xf0/x94/x8a/x87 EGYPTIAN HIEROGLYPH-14287 +<U00014288> /xf0/x94/x8a/x88 EGYPTIAN HIEROGLYPH-14288 +<U00014289> /xf0/x94/x8a/x89 EGYPTIAN HIEROGLYPH-14289 +<U0001428A> /xf0/x94/x8a/x8a EGYPTIAN HIEROGLYPH-1428A +<U0001428B> /xf0/x94/x8a/x8b EGYPTIAN HIEROGLYPH-1428B +<U0001428C> /xf0/x94/x8a/x8c EGYPTIAN HIEROGLYPH-1428C +<U0001428D> /xf0/x94/x8a/x8d EGYPTIAN HIEROGLYPH-1428D +<U0001428E> /xf0/x94/x8a/x8e EGYPTIAN HIEROGLYPH-1428E +<U0001428F> /xf0/x94/x8a/x8f EGYPTIAN HIEROGLYPH-1428F +<U00014290> /xf0/x94/x8a/x90 EGYPTIAN HIEROGLYPH-14290 +<U00014291> /xf0/x94/x8a/x91 EGYPTIAN HIEROGLYPH-14291 +<U00014292> /xf0/x94/x8a/x92 EGYPTIAN HIEROGLYPH-14292 +<U00014293> /xf0/x94/x8a/x93 EGYPTIAN HIEROGLYPH-14293 +<U00014294> /xf0/x94/x8a/x94 EGYPTIAN HIEROGLYPH-14294 +<U00014295> /xf0/x94/x8a/x95 EGYPTIAN HIEROGLYPH-14295 +<U00014296> /xf0/x94/x8a/x96 EGYPTIAN HIEROGLYPH-14296 +<U00014297> /xf0/x94/x8a/x97 EGYPTIAN HIEROGLYPH-14297 +<U00014298> /xf0/x94/x8a/x98 EGYPTIAN HIEROGLYPH-14298 +<U00014299> /xf0/x94/x8a/x99 EGYPTIAN HIEROGLYPH-14299 +<U0001429A> /xf0/x94/x8a/x9a EGYPTIAN HIEROGLYPH-1429A +<U0001429B> /xf0/x94/x8a/x9b EGYPTIAN HIEROGLYPH-1429B +<U0001429C> /xf0/x94/x8a/x9c EGYPTIAN HIEROGLYPH-1429C +<U0001429D> /xf0/x94/x8a/x9d EGYPTIAN HIEROGLYPH-1429D +<U0001429E> /xf0/x94/x8a/x9e EGYPTIAN HIEROGLYPH-1429E +<U0001429F> /xf0/x94/x8a/x9f EGYPTIAN HIEROGLYPH-1429F +<U000142A0> /xf0/x94/x8a/xa0 EGYPTIAN HIEROGLYPH-142A0 +<U000142A1> /xf0/x94/x8a/xa1 EGYPTIAN HIEROGLYPH-142A1 +<U000142A2> /xf0/x94/x8a/xa2 EGYPTIAN HIEROGLYPH-142A2 +<U000142A3> /xf0/x94/x8a/xa3 EGYPTIAN HIEROGLYPH-142A3 +<U000142A4> /xf0/x94/x8a/xa4 EGYPTIAN HIEROGLYPH-142A4 +<U000142A5> /xf0/x94/x8a/xa5 EGYPTIAN HIEROGLYPH-142A5 +<U000142A6> /xf0/x94/x8a/xa6 EGYPTIAN HIEROGLYPH-142A6 +<U000142A7> /xf0/x94/x8a/xa7 EGYPTIAN HIEROGLYPH-142A7 +<U000142A8> /xf0/x94/x8a/xa8 EGYPTIAN HIEROGLYPH-142A8 +<U000142A9> /xf0/x94/x8a/xa9 EGYPTIAN HIEROGLYPH-142A9 +<U000142AA> /xf0/x94/x8a/xaa EGYPTIAN HIEROGLYPH-142AA +<U000142AB> /xf0/x94/x8a/xab EGYPTIAN HIEROGLYPH-142AB +<U000142AC> /xf0/x94/x8a/xac EGYPTIAN HIEROGLYPH-142AC +<U000142AD> /xf0/x94/x8a/xad EGYPTIAN HIEROGLYPH-142AD +<U000142AE> /xf0/x94/x8a/xae EGYPTIAN HIEROGLYPH-142AE +<U000142AF> /xf0/x94/x8a/xaf EGYPTIAN HIEROGLYPH-142AF +<U000142B0> /xf0/x94/x8a/xb0 EGYPTIAN HIEROGLYPH-142B0 +<U000142B1> /xf0/x94/x8a/xb1 EGYPTIAN HIEROGLYPH-142B1 +<U000142B2> /xf0/x94/x8a/xb2 EGYPTIAN HIEROGLYPH-142B2 +<U000142B3> /xf0/x94/x8a/xb3 EGYPTIAN HIEROGLYPH-142B3 +<U000142B4> /xf0/x94/x8a/xb4 EGYPTIAN HIEROGLYPH-142B4 +<U000142B5> /xf0/x94/x8a/xb5 EGYPTIAN HIEROGLYPH-142B5 +<U000142B6> /xf0/x94/x8a/xb6 EGYPTIAN HIEROGLYPH-142B6 +<U000142B7> /xf0/x94/x8a/xb7 EGYPTIAN HIEROGLYPH-142B7 +<U000142B8> /xf0/x94/x8a/xb8 EGYPTIAN HIEROGLYPH-142B8 +<U000142B9> /xf0/x94/x8a/xb9 EGYPTIAN HIEROGLYPH-142B9 +<U000142BA> /xf0/x94/x8a/xba EGYPTIAN HIEROGLYPH-142BA +<U000142BB> /xf0/x94/x8a/xbb EGYPTIAN HIEROGLYPH-142BB +<U000142BC> /xf0/x94/x8a/xbc EGYPTIAN HIEROGLYPH-142BC +<U000142BD> /xf0/x94/x8a/xbd EGYPTIAN HIEROGLYPH-142BD +<U000142BE> /xf0/x94/x8a/xbe EGYPTIAN HIEROGLYPH-142BE +<U000142BF> /xf0/x94/x8a/xbf EGYPTIAN HIEROGLYPH-142BF +<U000142C0> /xf0/x94/x8b/x80 EGYPTIAN HIEROGLYPH-142C0 +<U000142C1> /xf0/x94/x8b/x81 EGYPTIAN HIEROGLYPH-142C1 +<U000142C2> /xf0/x94/x8b/x82 EGYPTIAN HIEROGLYPH-142C2 +<U000142C3> /xf0/x94/x8b/x83 EGYPTIAN HIEROGLYPH-142C3 +<U000142C4> /xf0/x94/x8b/x84 EGYPTIAN HIEROGLYPH-142C4 +<U000142C5> /xf0/x94/x8b/x85 EGYPTIAN HIEROGLYPH-142C5 +<U000142C6> /xf0/x94/x8b/x86 EGYPTIAN HIEROGLYPH-142C6 +<U000142C7> /xf0/x94/x8b/x87 EGYPTIAN HIEROGLYPH-142C7 +<U000142C8> /xf0/x94/x8b/x88 EGYPTIAN HIEROGLYPH-142C8 +<U000142C9> /xf0/x94/x8b/x89 EGYPTIAN HIEROGLYPH-142C9 +<U000142CA> /xf0/x94/x8b/x8a EGYPTIAN HIEROGLYPH-142CA +<U000142CB> /xf0/x94/x8b/x8b EGYPTIAN HIEROGLYPH-142CB +<U000142CC> /xf0/x94/x8b/x8c EGYPTIAN HIEROGLYPH-142CC +<U000142CD> /xf0/x94/x8b/x8d EGYPTIAN HIEROGLYPH-142CD +<U000142CE> /xf0/x94/x8b/x8e EGYPTIAN HIEROGLYPH-142CE +<U000142CF> /xf0/x94/x8b/x8f EGYPTIAN HIEROGLYPH-142CF +<U000142D0> /xf0/x94/x8b/x90 EGYPTIAN HIEROGLYPH-142D0 +<U000142D1> /xf0/x94/x8b/x91 EGYPTIAN HIEROGLYPH-142D1 +<U000142D2> /xf0/x94/x8b/x92 EGYPTIAN HIEROGLYPH-142D2 +<U000142D3> /xf0/x94/x8b/x93 EGYPTIAN HIEROGLYPH-142D3 +<U000142D4> /xf0/x94/x8b/x94 EGYPTIAN HIEROGLYPH-142D4 +<U000142D5> /xf0/x94/x8b/x95 EGYPTIAN HIEROGLYPH-142D5 +<U000142D6> /xf0/x94/x8b/x96 EGYPTIAN HIEROGLYPH-142D6 +<U000142D7> /xf0/x94/x8b/x97 EGYPTIAN HIEROGLYPH-142D7 +<U000142D8> /xf0/x94/x8b/x98 EGYPTIAN HIEROGLYPH-142D8 +<U000142D9> /xf0/x94/x8b/x99 EGYPTIAN HIEROGLYPH-142D9 +<U000142DA> /xf0/x94/x8b/x9a EGYPTIAN HIEROGLYPH-142DA +<U000142DB> /xf0/x94/x8b/x9b EGYPTIAN HIEROGLYPH-142DB +<U000142DC> /xf0/x94/x8b/x9c EGYPTIAN HIEROGLYPH-142DC +<U000142DD> /xf0/x94/x8b/x9d EGYPTIAN HIEROGLYPH-142DD +<U000142DE> /xf0/x94/x8b/x9e EGYPTIAN HIEROGLYPH-142DE +<U000142DF> /xf0/x94/x8b/x9f EGYPTIAN HIEROGLYPH-142DF +<U000142E0> /xf0/x94/x8b/xa0 EGYPTIAN HIEROGLYPH-142E0 +<U000142E1> /xf0/x94/x8b/xa1 EGYPTIAN HIEROGLYPH-142E1 +<U000142E2> /xf0/x94/x8b/xa2 EGYPTIAN HIEROGLYPH-142E2 +<U000142E3> /xf0/x94/x8b/xa3 EGYPTIAN HIEROGLYPH-142E3 +<U000142E4> /xf0/x94/x8b/xa4 EGYPTIAN HIEROGLYPH-142E4 +<U000142E5> /xf0/x94/x8b/xa5 EGYPTIAN HIEROGLYPH-142E5 +<U000142E6> /xf0/x94/x8b/xa6 EGYPTIAN HIEROGLYPH-142E6 +<U000142E7> /xf0/x94/x8b/xa7 EGYPTIAN HIEROGLYPH-142E7 +<U000142E8> /xf0/x94/x8b/xa8 EGYPTIAN HIEROGLYPH-142E8 +<U000142E9> /xf0/x94/x8b/xa9 EGYPTIAN HIEROGLYPH-142E9 +<U000142EA> /xf0/x94/x8b/xaa EGYPTIAN HIEROGLYPH-142EA +<U000142EB> /xf0/x94/x8b/xab EGYPTIAN HIEROGLYPH-142EB +<U000142EC> /xf0/x94/x8b/xac EGYPTIAN HIEROGLYPH-142EC +<U000142ED> /xf0/x94/x8b/xad EGYPTIAN HIEROGLYPH-142ED +<U000142EE> /xf0/x94/x8b/xae EGYPTIAN HIEROGLYPH-142EE +<U000142EF> /xf0/x94/x8b/xaf EGYPTIAN HIEROGLYPH-142EF +<U000142F0> /xf0/x94/x8b/xb0 EGYPTIAN HIEROGLYPH-142F0 +<U000142F1> /xf0/x94/x8b/xb1 EGYPTIAN HIEROGLYPH-142F1 +<U000142F2> /xf0/x94/x8b/xb2 EGYPTIAN HIEROGLYPH-142F2 +<U000142F3> /xf0/x94/x8b/xb3 EGYPTIAN HIEROGLYPH-142F3 +<U000142F4> /xf0/x94/x8b/xb4 EGYPTIAN HIEROGLYPH-142F4 +<U000142F5> /xf0/x94/x8b/xb5 EGYPTIAN HIEROGLYPH-142F5 +<U000142F6> /xf0/x94/x8b/xb6 EGYPTIAN HIEROGLYPH-142F6 +<U000142F7> /xf0/x94/x8b/xb7 EGYPTIAN HIEROGLYPH-142F7 +<U000142F8> /xf0/x94/x8b/xb8 EGYPTIAN HIEROGLYPH-142F8 +<U000142F9> /xf0/x94/x8b/xb9 EGYPTIAN HIEROGLYPH-142F9 +<U000142FA> /xf0/x94/x8b/xba EGYPTIAN HIEROGLYPH-142FA +<U000142FB> /xf0/x94/x8b/xbb EGYPTIAN HIEROGLYPH-142FB +<U000142FC> /xf0/x94/x8b/xbc EGYPTIAN HIEROGLYPH-142FC +<U000142FD> /xf0/x94/x8b/xbd EGYPTIAN HIEROGLYPH-142FD +<U000142FE> /xf0/x94/x8b/xbe EGYPTIAN HIEROGLYPH-142FE +<U000142FF> /xf0/x94/x8b/xbf EGYPTIAN HIEROGLYPH-142FF +<U00014300> /xf0/x94/x8c/x80 EGYPTIAN HIEROGLYPH-14300 +<U00014301> /xf0/x94/x8c/x81 EGYPTIAN HIEROGLYPH-14301 +<U00014302> /xf0/x94/x8c/x82 EGYPTIAN HIEROGLYPH-14302 +<U00014303> /xf0/x94/x8c/x83 EGYPTIAN HIEROGLYPH-14303 +<U00014304> /xf0/x94/x8c/x84 EGYPTIAN HIEROGLYPH-14304 +<U00014305> /xf0/x94/x8c/x85 EGYPTIAN HIEROGLYPH-14305 +<U00014306> /xf0/x94/x8c/x86 EGYPTIAN HIEROGLYPH-14306 +<U00014307> /xf0/x94/x8c/x87 EGYPTIAN HIEROGLYPH-14307 +<U00014308> /xf0/x94/x8c/x88 EGYPTIAN HIEROGLYPH-14308 +<U00014309> /xf0/x94/x8c/x89 EGYPTIAN HIEROGLYPH-14309 +<U0001430A> /xf0/x94/x8c/x8a EGYPTIAN HIEROGLYPH-1430A +<U0001430B> /xf0/x94/x8c/x8b EGYPTIAN HIEROGLYPH-1430B +<U0001430C> /xf0/x94/x8c/x8c EGYPTIAN HIEROGLYPH-1430C +<U0001430D> /xf0/x94/x8c/x8d EGYPTIAN HIEROGLYPH-1430D +<U0001430E> /xf0/x94/x8c/x8e EGYPTIAN HIEROGLYPH-1430E +<U0001430F> /xf0/x94/x8c/x8f EGYPTIAN HIEROGLYPH-1430F +<U00014310> /xf0/x94/x8c/x90 EGYPTIAN HIEROGLYPH-14310 +<U00014311> /xf0/x94/x8c/x91 EGYPTIAN HIEROGLYPH-14311 +<U00014312> /xf0/x94/x8c/x92 EGYPTIAN HIEROGLYPH-14312 +<U00014313> /xf0/x94/x8c/x93 EGYPTIAN HIEROGLYPH-14313 +<U00014314> /xf0/x94/x8c/x94 EGYPTIAN HIEROGLYPH-14314 +<U00014315> /xf0/x94/x8c/x95 EGYPTIAN HIEROGLYPH-14315 +<U00014316> /xf0/x94/x8c/x96 EGYPTIAN HIEROGLYPH-14316 +<U00014317> /xf0/x94/x8c/x97 EGYPTIAN HIEROGLYPH-14317 +<U00014318> /xf0/x94/x8c/x98 EGYPTIAN HIEROGLYPH-14318 +<U00014319> /xf0/x94/x8c/x99 EGYPTIAN HIEROGLYPH-14319 +<U0001431A> /xf0/x94/x8c/x9a EGYPTIAN HIEROGLYPH-1431A +<U0001431B> /xf0/x94/x8c/x9b EGYPTIAN HIEROGLYPH-1431B +<U0001431C> /xf0/x94/x8c/x9c EGYPTIAN HIEROGLYPH-1431C +<U0001431D> /xf0/x94/x8c/x9d EGYPTIAN HIEROGLYPH-1431D +<U0001431E> /xf0/x94/x8c/x9e EGYPTIAN HIEROGLYPH-1431E +<U0001431F> /xf0/x94/x8c/x9f EGYPTIAN HIEROGLYPH-1431F +<U00014320> /xf0/x94/x8c/xa0 EGYPTIAN HIEROGLYPH-14320 +<U00014321> /xf0/x94/x8c/xa1 EGYPTIAN HIEROGLYPH-14321 +<U00014322> /xf0/x94/x8c/xa2 EGYPTIAN HIEROGLYPH-14322 +<U00014323> /xf0/x94/x8c/xa3 EGYPTIAN HIEROGLYPH-14323 +<U00014324> /xf0/x94/x8c/xa4 EGYPTIAN HIEROGLYPH-14324 +<U00014325> /xf0/x94/x8c/xa5 EGYPTIAN HIEROGLYPH-14325 +<U00014326> /xf0/x94/x8c/xa6 EGYPTIAN HIEROGLYPH-14326 +<U00014327> /xf0/x94/x8c/xa7 EGYPTIAN HIEROGLYPH-14327 +<U00014328> /xf0/x94/x8c/xa8 EGYPTIAN HIEROGLYPH-14328 +<U00014329> /xf0/x94/x8c/xa9 EGYPTIAN HIEROGLYPH-14329 +<U0001432A> /xf0/x94/x8c/xaa EGYPTIAN HIEROGLYPH-1432A +<U0001432B> /xf0/x94/x8c/xab EGYPTIAN HIEROGLYPH-1432B +<U0001432C> /xf0/x94/x8c/xac EGYPTIAN HIEROGLYPH-1432C +<U0001432D> /xf0/x94/x8c/xad EGYPTIAN HIEROGLYPH-1432D +<U0001432E> /xf0/x94/x8c/xae EGYPTIAN HIEROGLYPH-1432E +<U0001432F> /xf0/x94/x8c/xaf EGYPTIAN HIEROGLYPH-1432F +<U00014330> /xf0/x94/x8c/xb0 EGYPTIAN HIEROGLYPH-14330 +<U00014331> /xf0/x94/x8c/xb1 EGYPTIAN HIEROGLYPH-14331 +<U00014332> /xf0/x94/x8c/xb2 EGYPTIAN HIEROGLYPH-14332 +<U00014333> /xf0/x94/x8c/xb3 EGYPTIAN HIEROGLYPH-14333 +<U00014334> /xf0/x94/x8c/xb4 EGYPTIAN HIEROGLYPH-14334 +<U00014335> /xf0/x94/x8c/xb5 EGYPTIAN HIEROGLYPH-14335 +<U00014336> /xf0/x94/x8c/xb6 EGYPTIAN HIEROGLYPH-14336 +<U00014337> /xf0/x94/x8c/xb7 EGYPTIAN HIEROGLYPH-14337 +<U00014338> /xf0/x94/x8c/xb8 EGYPTIAN HIEROGLYPH-14338 +<U00014339> /xf0/x94/x8c/xb9 EGYPTIAN HIEROGLYPH-14339 +<U0001433A> /xf0/x94/x8c/xba EGYPTIAN HIEROGLYPH-1433A +<U0001433B> /xf0/x94/x8c/xbb EGYPTIAN HIEROGLYPH-1433B +<U0001433C> /xf0/x94/x8c/xbc EGYPTIAN HIEROGLYPH-1433C +<U0001433D> /xf0/x94/x8c/xbd EGYPTIAN HIEROGLYPH-1433D +<U0001433E> /xf0/x94/x8c/xbe EGYPTIAN HIEROGLYPH-1433E +<U0001433F> /xf0/x94/x8c/xbf EGYPTIAN HIEROGLYPH-1433F +<U00014340> /xf0/x94/x8d/x80 EGYPTIAN HIEROGLYPH-14340 +<U00014341> /xf0/x94/x8d/x81 EGYPTIAN HIEROGLYPH-14341 +<U00014342> /xf0/x94/x8d/x82 EGYPTIAN HIEROGLYPH-14342 +<U00014343> /xf0/x94/x8d/x83 EGYPTIAN HIEROGLYPH-14343 +<U00014344> /xf0/x94/x8d/x84 EGYPTIAN HIEROGLYPH-14344 +<U00014345> /xf0/x94/x8d/x85 EGYPTIAN HIEROGLYPH-14345 +<U00014346> /xf0/x94/x8d/x86 EGYPTIAN HIEROGLYPH-14346 +<U00014347> /xf0/x94/x8d/x87 EGYPTIAN HIEROGLYPH-14347 +<U00014348> /xf0/x94/x8d/x88 EGYPTIAN HIEROGLYPH-14348 +<U00014349> /xf0/x94/x8d/x89 EGYPTIAN HIEROGLYPH-14349 +<U0001434A> /xf0/x94/x8d/x8a EGYPTIAN HIEROGLYPH-1434A +<U0001434B> /xf0/x94/x8d/x8b EGYPTIAN HIEROGLYPH-1434B +<U0001434C> /xf0/x94/x8d/x8c EGYPTIAN HIEROGLYPH-1434C +<U0001434D> /xf0/x94/x8d/x8d EGYPTIAN HIEROGLYPH-1434D +<U0001434E> /xf0/x94/x8d/x8e EGYPTIAN HIEROGLYPH-1434E +<U0001434F> /xf0/x94/x8d/x8f EGYPTIAN HIEROGLYPH-1434F +<U00014350> /xf0/x94/x8d/x90 EGYPTIAN HIEROGLYPH-14350 +<U00014351> /xf0/x94/x8d/x91 EGYPTIAN HIEROGLYPH-14351 +<U00014352> /xf0/x94/x8d/x92 EGYPTIAN HIEROGLYPH-14352 +<U00014353> /xf0/x94/x8d/x93 EGYPTIAN HIEROGLYPH-14353 +<U00014354> /xf0/x94/x8d/x94 EGYPTIAN HIEROGLYPH-14354 +<U00014355> /xf0/x94/x8d/x95 EGYPTIAN HIEROGLYPH-14355 +<U00014356> /xf0/x94/x8d/x96 EGYPTIAN HIEROGLYPH-14356 +<U00014357> /xf0/x94/x8d/x97 EGYPTIAN HIEROGLYPH-14357 +<U00014358> /xf0/x94/x8d/x98 EGYPTIAN HIEROGLYPH-14358 +<U00014359> /xf0/x94/x8d/x99 EGYPTIAN HIEROGLYPH-14359 +<U0001435A> /xf0/x94/x8d/x9a EGYPTIAN HIEROGLYPH-1435A +<U0001435B> /xf0/x94/x8d/x9b EGYPTIAN HIEROGLYPH-1435B +<U0001435C> /xf0/x94/x8d/x9c EGYPTIAN HIEROGLYPH-1435C +<U0001435D> /xf0/x94/x8d/x9d EGYPTIAN HIEROGLYPH-1435D +<U0001435E> /xf0/x94/x8d/x9e EGYPTIAN HIEROGLYPH-1435E +<U0001435F> /xf0/x94/x8d/x9f EGYPTIAN HIEROGLYPH-1435F +<U00014360> /xf0/x94/x8d/xa0 EGYPTIAN HIEROGLYPH-14360 +<U00014361> /xf0/x94/x8d/xa1 EGYPTIAN HIEROGLYPH-14361 +<U00014362> /xf0/x94/x8d/xa2 EGYPTIAN HIEROGLYPH-14362 +<U00014363> /xf0/x94/x8d/xa3 EGYPTIAN HIEROGLYPH-14363 +<U00014364> /xf0/x94/x8d/xa4 EGYPTIAN HIEROGLYPH-14364 +<U00014365> /xf0/x94/x8d/xa5 EGYPTIAN HIEROGLYPH-14365 +<U00014366> /xf0/x94/x8d/xa6 EGYPTIAN HIEROGLYPH-14366 +<U00014367> /xf0/x94/x8d/xa7 EGYPTIAN HIEROGLYPH-14367 +<U00014368> /xf0/x94/x8d/xa8 EGYPTIAN HIEROGLYPH-14368 +<U00014369> /xf0/x94/x8d/xa9 EGYPTIAN HIEROGLYPH-14369 +<U0001436A> /xf0/x94/x8d/xaa EGYPTIAN HIEROGLYPH-1436A +<U0001436B> /xf0/x94/x8d/xab EGYPTIAN HIEROGLYPH-1436B +<U0001436C> /xf0/x94/x8d/xac EGYPTIAN HIEROGLYPH-1436C +<U0001436D> /xf0/x94/x8d/xad EGYPTIAN HIEROGLYPH-1436D +<U0001436E> /xf0/x94/x8d/xae EGYPTIAN HIEROGLYPH-1436E +<U0001436F> /xf0/x94/x8d/xaf EGYPTIAN HIEROGLYPH-1436F +<U00014370> /xf0/x94/x8d/xb0 EGYPTIAN HIEROGLYPH-14370 +<U00014371> /xf0/x94/x8d/xb1 EGYPTIAN HIEROGLYPH-14371 +<U00014372> /xf0/x94/x8d/xb2 EGYPTIAN HIEROGLYPH-14372 +<U00014373> /xf0/x94/x8d/xb3 EGYPTIAN HIEROGLYPH-14373 +<U00014374> /xf0/x94/x8d/xb4 EGYPTIAN HIEROGLYPH-14374 +<U00014375> /xf0/x94/x8d/xb5 EGYPTIAN HIEROGLYPH-14375 +<U00014376> /xf0/x94/x8d/xb6 EGYPTIAN HIEROGLYPH-14376 +<U00014377> /xf0/x94/x8d/xb7 EGYPTIAN HIEROGLYPH-14377 +<U00014378> /xf0/x94/x8d/xb8 EGYPTIAN HIEROGLYPH-14378 +<U00014379> /xf0/x94/x8d/xb9 EGYPTIAN HIEROGLYPH-14379 +<U0001437A> /xf0/x94/x8d/xba EGYPTIAN HIEROGLYPH-1437A +<U0001437B> /xf0/x94/x8d/xbb EGYPTIAN HIEROGLYPH-1437B +<U0001437C> /xf0/x94/x8d/xbc EGYPTIAN HIEROGLYPH-1437C +<U0001437D> /xf0/x94/x8d/xbd EGYPTIAN HIEROGLYPH-1437D +<U0001437E> /xf0/x94/x8d/xbe EGYPTIAN HIEROGLYPH-1437E +<U0001437F> /xf0/x94/x8d/xbf EGYPTIAN HIEROGLYPH-1437F +<U00014380> /xf0/x94/x8e/x80 EGYPTIAN HIEROGLYPH-14380 +<U00014381> /xf0/x94/x8e/x81 EGYPTIAN HIEROGLYPH-14381 +<U00014382> /xf0/x94/x8e/x82 EGYPTIAN HIEROGLYPH-14382 +<U00014383> /xf0/x94/x8e/x83 EGYPTIAN HIEROGLYPH-14383 +<U00014384> /xf0/x94/x8e/x84 EGYPTIAN HIEROGLYPH-14384 +<U00014385> /xf0/x94/x8e/x85 EGYPTIAN HIEROGLYPH-14385 +<U00014386> /xf0/x94/x8e/x86 EGYPTIAN HIEROGLYPH-14386 +<U00014387> /xf0/x94/x8e/x87 EGYPTIAN HIEROGLYPH-14387 +<U00014388> /xf0/x94/x8e/x88 EGYPTIAN HIEROGLYPH-14388 +<U00014389> /xf0/x94/x8e/x89 EGYPTIAN HIEROGLYPH-14389 +<U0001438A> /xf0/x94/x8e/x8a EGYPTIAN HIEROGLYPH-1438A +<U0001438B> /xf0/x94/x8e/x8b EGYPTIAN HIEROGLYPH-1438B +<U0001438C> /xf0/x94/x8e/x8c EGYPTIAN HIEROGLYPH-1438C +<U0001438D> /xf0/x94/x8e/x8d EGYPTIAN HIEROGLYPH-1438D +<U0001438E> /xf0/x94/x8e/x8e EGYPTIAN HIEROGLYPH-1438E +<U0001438F> /xf0/x94/x8e/x8f EGYPTIAN HIEROGLYPH-1438F +<U00014390> /xf0/x94/x8e/x90 EGYPTIAN HIEROGLYPH-14390 +<U00014391> /xf0/x94/x8e/x91 EGYPTIAN HIEROGLYPH-14391 +<U00014392> /xf0/x94/x8e/x92 EGYPTIAN HIEROGLYPH-14392 +<U00014393> /xf0/x94/x8e/x93 EGYPTIAN HIEROGLYPH-14393 +<U00014394> /xf0/x94/x8e/x94 EGYPTIAN HIEROGLYPH-14394 +<U00014395> /xf0/x94/x8e/x95 EGYPTIAN HIEROGLYPH-14395 +<U00014396> /xf0/x94/x8e/x96 EGYPTIAN HIEROGLYPH-14396 +<U00014397> /xf0/x94/x8e/x97 EGYPTIAN HIEROGLYPH-14397 +<U00014398> /xf0/x94/x8e/x98 EGYPTIAN HIEROGLYPH-14398 +<U00014399> /xf0/x94/x8e/x99 EGYPTIAN HIEROGLYPH-14399 +<U0001439A> /xf0/x94/x8e/x9a EGYPTIAN HIEROGLYPH-1439A +<U0001439B> /xf0/x94/x8e/x9b EGYPTIAN HIEROGLYPH-1439B +<U0001439C> /xf0/x94/x8e/x9c EGYPTIAN HIEROGLYPH-1439C +<U0001439D> /xf0/x94/x8e/x9d EGYPTIAN HIEROGLYPH-1439D +<U0001439E> /xf0/x94/x8e/x9e EGYPTIAN HIEROGLYPH-1439E +<U0001439F> /xf0/x94/x8e/x9f EGYPTIAN HIEROGLYPH-1439F +<U000143A0> /xf0/x94/x8e/xa0 EGYPTIAN HIEROGLYPH-143A0 +<U000143A1> /xf0/x94/x8e/xa1 EGYPTIAN HIEROGLYPH-143A1 +<U000143A2> /xf0/x94/x8e/xa2 EGYPTIAN HIEROGLYPH-143A2 +<U000143A3> /xf0/x94/x8e/xa3 EGYPTIAN HIEROGLYPH-143A3 +<U000143A4> /xf0/x94/x8e/xa4 EGYPTIAN HIEROGLYPH-143A4 +<U000143A5> /xf0/x94/x8e/xa5 EGYPTIAN HIEROGLYPH-143A5 +<U000143A6> /xf0/x94/x8e/xa6 EGYPTIAN HIEROGLYPH-143A6 +<U000143A7> /xf0/x94/x8e/xa7 EGYPTIAN HIEROGLYPH-143A7 +<U000143A8> /xf0/x94/x8e/xa8 EGYPTIAN HIEROGLYPH-143A8 +<U000143A9> /xf0/x94/x8e/xa9 EGYPTIAN HIEROGLYPH-143A9 +<U000143AA> /xf0/x94/x8e/xaa EGYPTIAN HIEROGLYPH-143AA +<U000143AB> /xf0/x94/x8e/xab EGYPTIAN HIEROGLYPH-143AB +<U000143AC> /xf0/x94/x8e/xac EGYPTIAN HIEROGLYPH-143AC +<U000143AD> /xf0/x94/x8e/xad EGYPTIAN HIEROGLYPH-143AD +<U000143AE> /xf0/x94/x8e/xae EGYPTIAN HIEROGLYPH-143AE +<U000143AF> /xf0/x94/x8e/xaf EGYPTIAN HIEROGLYPH-143AF +<U000143B0> /xf0/x94/x8e/xb0 EGYPTIAN HIEROGLYPH-143B0 +<U000143B1> /xf0/x94/x8e/xb1 EGYPTIAN HIEROGLYPH-143B1 +<U000143B2> /xf0/x94/x8e/xb2 EGYPTIAN HIEROGLYPH-143B2 +<U000143B3> /xf0/x94/x8e/xb3 EGYPTIAN HIEROGLYPH-143B3 +<U000143B4> /xf0/x94/x8e/xb4 EGYPTIAN HIEROGLYPH-143B4 +<U000143B5> /xf0/x94/x8e/xb5 EGYPTIAN HIEROGLYPH-143B5 +<U000143B6> /xf0/x94/x8e/xb6 EGYPTIAN HIEROGLYPH-143B6 +<U000143B7> /xf0/x94/x8e/xb7 EGYPTIAN HIEROGLYPH-143B7 +<U000143B8> /xf0/x94/x8e/xb8 EGYPTIAN HIEROGLYPH-143B8 +<U000143B9> /xf0/x94/x8e/xb9 EGYPTIAN HIEROGLYPH-143B9 +<U000143BA> /xf0/x94/x8e/xba EGYPTIAN HIEROGLYPH-143BA +<U000143BB> /xf0/x94/x8e/xbb EGYPTIAN HIEROGLYPH-143BB +<U000143BC> /xf0/x94/x8e/xbc EGYPTIAN HIEROGLYPH-143BC +<U000143BD> /xf0/x94/x8e/xbd EGYPTIAN HIEROGLYPH-143BD +<U000143BE> /xf0/x94/x8e/xbe EGYPTIAN HIEROGLYPH-143BE +<U000143BF> /xf0/x94/x8e/xbf EGYPTIAN HIEROGLYPH-143BF +<U000143C0> /xf0/x94/x8f/x80 EGYPTIAN HIEROGLYPH-143C0 +<U000143C1> /xf0/x94/x8f/x81 EGYPTIAN HIEROGLYPH-143C1 +<U000143C2> /xf0/x94/x8f/x82 EGYPTIAN HIEROGLYPH-143C2 +<U000143C3> /xf0/x94/x8f/x83 EGYPTIAN HIEROGLYPH-143C3 +<U000143C4> /xf0/x94/x8f/x84 EGYPTIAN HIEROGLYPH-143C4 +<U000143C5> /xf0/x94/x8f/x85 EGYPTIAN HIEROGLYPH-143C5 +<U000143C6> /xf0/x94/x8f/x86 EGYPTIAN HIEROGLYPH-143C6 +<U000143C7> /xf0/x94/x8f/x87 EGYPTIAN HIEROGLYPH-143C7 +<U000143C8> /xf0/x94/x8f/x88 EGYPTIAN HIEROGLYPH-143C8 +<U000143C9> /xf0/x94/x8f/x89 EGYPTIAN HIEROGLYPH-143C9 +<U000143CA> /xf0/x94/x8f/x8a EGYPTIAN HIEROGLYPH-143CA +<U000143CB> /xf0/x94/x8f/x8b EGYPTIAN HIEROGLYPH-143CB +<U000143CC> /xf0/x94/x8f/x8c EGYPTIAN HIEROGLYPH-143CC +<U000143CD> /xf0/x94/x8f/x8d EGYPTIAN HIEROGLYPH-143CD +<U000143CE> /xf0/x94/x8f/x8e EGYPTIAN HIEROGLYPH-143CE +<U000143CF> /xf0/x94/x8f/x8f EGYPTIAN HIEROGLYPH-143CF +<U000143D0> /xf0/x94/x8f/x90 EGYPTIAN HIEROGLYPH-143D0 +<U000143D1> /xf0/x94/x8f/x91 EGYPTIAN HIEROGLYPH-143D1 +<U000143D2> /xf0/x94/x8f/x92 EGYPTIAN HIEROGLYPH-143D2 +<U000143D3> /xf0/x94/x8f/x93 EGYPTIAN HIEROGLYPH-143D3 +<U000143D4> /xf0/x94/x8f/x94 EGYPTIAN HIEROGLYPH-143D4 +<U000143D5> /xf0/x94/x8f/x95 EGYPTIAN HIEROGLYPH-143D5 +<U000143D6> /xf0/x94/x8f/x96 EGYPTIAN HIEROGLYPH-143D6 +<U000143D7> /xf0/x94/x8f/x97 EGYPTIAN HIEROGLYPH-143D7 +<U000143D8> /xf0/x94/x8f/x98 EGYPTIAN HIEROGLYPH-143D8 +<U000143D9> /xf0/x94/x8f/x99 EGYPTIAN HIEROGLYPH-143D9 +<U000143DA> /xf0/x94/x8f/x9a EGYPTIAN HIEROGLYPH-143DA +<U000143DB> /xf0/x94/x8f/x9b EGYPTIAN HIEROGLYPH-143DB +<U000143DC> /xf0/x94/x8f/x9c EGYPTIAN HIEROGLYPH-143DC +<U000143DD> /xf0/x94/x8f/x9d EGYPTIAN HIEROGLYPH-143DD +<U000143DE> /xf0/x94/x8f/x9e EGYPTIAN HIEROGLYPH-143DE +<U000143DF> /xf0/x94/x8f/x9f EGYPTIAN HIEROGLYPH-143DF +<U000143E0> /xf0/x94/x8f/xa0 EGYPTIAN HIEROGLYPH-143E0 +<U000143E1> /xf0/x94/x8f/xa1 EGYPTIAN HIEROGLYPH-143E1 +<U000143E2> /xf0/x94/x8f/xa2 EGYPTIAN HIEROGLYPH-143E2 +<U000143E3> /xf0/x94/x8f/xa3 EGYPTIAN HIEROGLYPH-143E3 +<U000143E4> /xf0/x94/x8f/xa4 EGYPTIAN HIEROGLYPH-143E4 +<U000143E5> /xf0/x94/x8f/xa5 EGYPTIAN HIEROGLYPH-143E5 +<U000143E6> /xf0/x94/x8f/xa6 EGYPTIAN HIEROGLYPH-143E6 +<U000143E7> /xf0/x94/x8f/xa7 EGYPTIAN HIEROGLYPH-143E7 +<U000143E8> /xf0/x94/x8f/xa8 EGYPTIAN HIEROGLYPH-143E8 +<U000143E9> /xf0/x94/x8f/xa9 EGYPTIAN HIEROGLYPH-143E9 +<U000143EA> /xf0/x94/x8f/xaa EGYPTIAN HIEROGLYPH-143EA +<U000143EB> /xf0/x94/x8f/xab EGYPTIAN HIEROGLYPH-143EB +<U000143EC> /xf0/x94/x8f/xac EGYPTIAN HIEROGLYPH-143EC +<U000143ED> /xf0/x94/x8f/xad EGYPTIAN HIEROGLYPH-143ED +<U000143EE> /xf0/x94/x8f/xae EGYPTIAN HIEROGLYPH-143EE +<U000143EF> /xf0/x94/x8f/xaf EGYPTIAN HIEROGLYPH-143EF +<U000143F0> /xf0/x94/x8f/xb0 EGYPTIAN HIEROGLYPH-143F0 +<U000143F1> /xf0/x94/x8f/xb1 EGYPTIAN HIEROGLYPH-143F1 +<U000143F2> /xf0/x94/x8f/xb2 EGYPTIAN HIEROGLYPH-143F2 +<U000143F3> /xf0/x94/x8f/xb3 EGYPTIAN HIEROGLYPH-143F3 +<U000143F4> /xf0/x94/x8f/xb4 EGYPTIAN HIEROGLYPH-143F4 +<U000143F5> /xf0/x94/x8f/xb5 EGYPTIAN HIEROGLYPH-143F5 +<U000143F6> /xf0/x94/x8f/xb6 EGYPTIAN HIEROGLYPH-143F6 +<U000143F7> /xf0/x94/x8f/xb7 EGYPTIAN HIEROGLYPH-143F7 +<U000143F8> /xf0/x94/x8f/xb8 EGYPTIAN HIEROGLYPH-143F8 +<U000143F9> /xf0/x94/x8f/xb9 EGYPTIAN HIEROGLYPH-143F9 +<U000143FA> /xf0/x94/x8f/xba EGYPTIAN HIEROGLYPH-143FA <U00014400> /xf0/x94/x90/x80 ANATOLIAN HIEROGLYPH A001 <U00014401> /xf0/x94/x90/x81 ANATOLIAN HIEROGLYPH A002 <U00014402> /xf0/x94/x90/x82 ANATOLIAN HIEROGLYPH A003 @@ -36475,6 +40757,64 @@ CHARMAP <U00014644> /xf0/x94/x99/x84 ANATOLIAN HIEROGLYPH A528 <U00014645> /xf0/x94/x99/x85 ANATOLIAN HIEROGLYPH A529 <U00014646> /xf0/x94/x99/x86 ANATOLIAN HIEROGLYPH A530 +<U00016100> /xf0/x96/x84/x80 GURUNG KHEMA LETTER A +<U00016101> /xf0/x96/x84/x81 GURUNG KHEMA LETTER KA +<U00016102> /xf0/x96/x84/x82 GURUNG KHEMA LETTER KHA +<U00016103> /xf0/x96/x84/x83 GURUNG KHEMA LETTER GA +<U00016104> /xf0/x96/x84/x84 GURUNG KHEMA LETTER GHA +<U00016105> /xf0/x96/x84/x85 GURUNG KHEMA LETTER NGA +<U00016106> /xf0/x96/x84/x86 GURUNG KHEMA LETTER CA +<U00016107> /xf0/x96/x84/x87 GURUNG KHEMA LETTER CHA +<U00016108> /xf0/x96/x84/x88 GURUNG KHEMA LETTER JA +<U00016109> /xf0/x96/x84/x89 GURUNG KHEMA LETTER JHA +<U0001610A> /xf0/x96/x84/x8a GURUNG KHEMA LETTER HA +<U0001610B> /xf0/x96/x84/x8b GURUNG KHEMA LETTER TTA +<U0001610C> /xf0/x96/x84/x8c GURUNG KHEMA LETTER TTHA +<U0001610D> /xf0/x96/x84/x8d GURUNG KHEMA LETTER DDA +<U0001610E> /xf0/x96/x84/x8e GURUNG KHEMA LETTER DDHA +<U0001610F> /xf0/x96/x84/x8f GURUNG KHEMA LETTER VA +<U00016110> /xf0/x96/x84/x90 GURUNG KHEMA LETTER TA +<U00016111> /xf0/x96/x84/x91 GURUNG KHEMA LETTER THA +<U00016112> /xf0/x96/x84/x92 GURUNG KHEMA LETTER DA +<U00016113> /xf0/x96/x84/x93 GURUNG KHEMA LETTER DHA +<U00016114> /xf0/x96/x84/x94 GURUNG KHEMA LETTER NA +<U00016115> /xf0/x96/x84/x95 GURUNG KHEMA LETTER PA +<U00016116> /xf0/x96/x84/x96 GURUNG KHEMA LETTER PHA +<U00016117> /xf0/x96/x84/x97 GURUNG KHEMA LETTER BA +<U00016118> /xf0/x96/x84/x98 GURUNG KHEMA LETTER BHA +<U00016119> /xf0/x96/x84/x99 GURUNG KHEMA LETTER MA +<U0001611A> /xf0/x96/x84/x9a GURUNG KHEMA LETTER YA +<U0001611B> /xf0/x96/x84/x9b GURUNG KHEMA LETTER RA +<U0001611C> /xf0/x96/x84/x9c GURUNG KHEMA LETTER LA +<U0001611D> /xf0/x96/x84/x9d GURUNG KHEMA LETTER SA +<U0001611E> /xf0/x96/x84/x9e GURUNG KHEMA VOWEL SIGN AA +<U0001611F> /xf0/x96/x84/x9f GURUNG KHEMA VOWEL SIGN I +<U00016120> /xf0/x96/x84/xa0 GURUNG KHEMA VOWEL SIGN II +<U00016121> /xf0/x96/x84/xa1 GURUNG KHEMA VOWEL SIGN U +<U00016122> /xf0/x96/x84/xa2 GURUNG KHEMA VOWEL SIGN UU +<U00016123> /xf0/x96/x84/xa3 GURUNG KHEMA VOWEL SIGN E +<U00016124> /xf0/x96/x84/xa4 GURUNG KHEMA VOWEL SIGN EE +<U00016125> /xf0/x96/x84/xa5 GURUNG KHEMA VOWEL SIGN AI +<U00016126> /xf0/x96/x84/xa6 GURUNG KHEMA VOWEL SIGN O +<U00016127> /xf0/x96/x84/xa7 GURUNG KHEMA VOWEL SIGN OO +<U00016128> /xf0/x96/x84/xa8 GURUNG KHEMA VOWEL SIGN AU +<U00016129> /xf0/x96/x84/xa9 GURUNG KHEMA VOWEL LENGTH MARK +<U0001612A> /xf0/x96/x84/xaa GURUNG KHEMA CONSONANT SIGN MEDIAL YA +<U0001612B> /xf0/x96/x84/xab GURUNG KHEMA CONSONANT SIGN MEDIAL VA +<U0001612C> /xf0/x96/x84/xac GURUNG KHEMA CONSONANT SIGN MEDIAL HA +<U0001612D> /xf0/x96/x84/xad GURUNG KHEMA SIGN ANUSVARA +<U0001612E> /xf0/x96/x84/xae GURUNG KHEMA CONSONANT SIGN MEDIAL RA +<U0001612F> /xf0/x96/x84/xaf GURUNG KHEMA SIGN THOLHOMA +<U00016130> /xf0/x96/x84/xb0 GURUNG KHEMA DIGIT ZERO +<U00016131> /xf0/x96/x84/xb1 GURUNG KHEMA DIGIT ONE +<U00016132> /xf0/x96/x84/xb2 GURUNG KHEMA DIGIT TWO +<U00016133> /xf0/x96/x84/xb3 GURUNG KHEMA DIGIT THREE +<U00016134> /xf0/x96/x84/xb4 GURUNG KHEMA DIGIT FOUR +<U00016135> /xf0/x96/x84/xb5 GURUNG KHEMA DIGIT FIVE +<U00016136> /xf0/x96/x84/xb6 GURUNG KHEMA DIGIT SIX +<U00016137> /xf0/x96/x84/xb7 GURUNG KHEMA DIGIT SEVEN +<U00016138> /xf0/x96/x84/xb8 GURUNG KHEMA DIGIT EIGHT +<U00016139> /xf0/x96/x84/xb9 GURUNG KHEMA DIGIT NINE <U00016800> /xf0/x96/xa0/x80 BAMUM LETTER PHASE-A NGKUE MFON <U00016801> /xf0/x96/xa0/x81 BAMUM LETTER PHASE-A GBIEE FON <U00016802> /xf0/x96/xa0/x82 BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE @@ -37339,6 +41679,64 @@ CHARMAP <U00016B8D> /xf0/x96/xae/x8d PAHAWH HMONG CLAN SIGN TSWB <U00016B8E> /xf0/x96/xae/x8e PAHAWH HMONG CLAN SIGN KWM <U00016B8F> /xf0/x96/xae/x8f PAHAWH HMONG CLAN SIGN VWJ +<U00016D40> /xf0/x96/xb5/x80 KIRAT RAI SIGN ANUSVARA +<U00016D41> /xf0/x96/xb5/x81 KIRAT RAI SIGN TONPI +<U00016D42> /xf0/x96/xb5/x82 KIRAT RAI SIGN VISARGA +<U00016D43> /xf0/x96/xb5/x83 KIRAT RAI LETTER A +<U00016D44> /xf0/x96/xb5/x84 KIRAT RAI LETTER KA +<U00016D45> /xf0/x96/xb5/x85 KIRAT RAI LETTER KHA +<U00016D46> /xf0/x96/xb5/x86 KIRAT RAI LETTER GA +<U00016D47> /xf0/x96/xb5/x87 KIRAT RAI LETTER GHA +<U00016D48> /xf0/x96/xb5/x88 KIRAT RAI LETTER NGA +<U00016D49> /xf0/x96/xb5/x89 KIRAT RAI LETTER CA +<U00016D4A> /xf0/x96/xb5/x8a KIRAT RAI LETTER CHA +<U00016D4B> /xf0/x96/xb5/x8b KIRAT RAI LETTER JA +<U00016D4C> /xf0/x96/xb5/x8c KIRAT RAI LETTER JHA +<U00016D4D> /xf0/x96/xb5/x8d KIRAT RAI LETTER NYA +<U00016D4E> /xf0/x96/xb5/x8e KIRAT RAI LETTER TTA +<U00016D4F> /xf0/x96/xb5/x8f KIRAT RAI LETTER TTHA +<U00016D50> /xf0/x96/xb5/x90 KIRAT RAI LETTER DDA +<U00016D51> /xf0/x96/xb5/x91 KIRAT RAI LETTER DDHA +<U00016D52> /xf0/x96/xb5/x92 KIRAT RAI LETTER TA +<U00016D53> /xf0/x96/xb5/x93 KIRAT RAI LETTER THA +<U00016D54> /xf0/x96/xb5/x94 KIRAT RAI LETTER DA +<U00016D55> /xf0/x96/xb5/x95 KIRAT RAI LETTER DHA +<U00016D56> /xf0/x96/xb5/x96 KIRAT RAI LETTER NA +<U00016D57> /xf0/x96/xb5/x97 KIRAT RAI LETTER PA +<U00016D58> /xf0/x96/xb5/x98 KIRAT RAI LETTER PHA +<U00016D59> /xf0/x96/xb5/x99 KIRAT RAI LETTER BA +<U00016D5A> /xf0/x96/xb5/x9a KIRAT RAI LETTER BHA +<U00016D5B> /xf0/x96/xb5/x9b KIRAT RAI LETTER MA +<U00016D5C> /xf0/x96/xb5/x9c KIRAT RAI LETTER YA +<U00016D5D> /xf0/x96/xb5/x9d KIRAT RAI LETTER RA +<U00016D5E> /xf0/x96/xb5/x9e KIRAT RAI LETTER LA +<U00016D5F> /xf0/x96/xb5/x9f KIRAT RAI LETTER VA +<U00016D60> /xf0/x96/xb5/xa0 KIRAT RAI LETTER SA +<U00016D61> /xf0/x96/xb5/xa1 KIRAT RAI LETTER SHA +<U00016D62> /xf0/x96/xb5/xa2 KIRAT RAI LETTER HA +<U00016D63> /xf0/x96/xb5/xa3 KIRAT RAI VOWEL SIGN AA +<U00016D64> /xf0/x96/xb5/xa4 KIRAT RAI VOWEL SIGN I +<U00016D65> /xf0/x96/xb5/xa5 KIRAT RAI VOWEL SIGN U +<U00016D66> /xf0/x96/xb5/xa6 KIRAT RAI VOWEL SIGN UE +<U00016D67> /xf0/x96/xb5/xa7 KIRAT RAI VOWEL SIGN E +<U00016D68> /xf0/x96/xb5/xa8 KIRAT RAI VOWEL SIGN AI +<U00016D69> /xf0/x96/xb5/xa9 KIRAT RAI VOWEL SIGN O +<U00016D6A> /xf0/x96/xb5/xaa KIRAT RAI VOWEL SIGN AU +<U00016D6B> /xf0/x96/xb5/xab KIRAT RAI SIGN VIRAMA +<U00016D6C> /xf0/x96/xb5/xac KIRAT RAI SIGN SAAT +<U00016D6D> /xf0/x96/xb5/xad KIRAT RAI SIGN YUPI +<U00016D6E> /xf0/x96/xb5/xae KIRAT RAI DANDA +<U00016D6F> /xf0/x96/xb5/xaf KIRAT RAI DOUBLE DANDA +<U00016D70> /xf0/x96/xb5/xb0 KIRAT RAI DIGIT ZERO +<U00016D71> /xf0/x96/xb5/xb1 KIRAT RAI DIGIT ONE +<U00016D72> /xf0/x96/xb5/xb2 KIRAT RAI DIGIT TWO +<U00016D73> /xf0/x96/xb5/xb3 KIRAT RAI DIGIT THREE +<U00016D74> /xf0/x96/xb5/xb4 KIRAT RAI DIGIT FOUR +<U00016D75> /xf0/x96/xb5/xb5 KIRAT RAI DIGIT FIVE +<U00016D76> /xf0/x96/xb5/xb6 KIRAT RAI DIGIT SIX +<U00016D77> /xf0/x96/xb5/xb7 KIRAT RAI DIGIT SEVEN +<U00016D78> /xf0/x96/xb5/xb8 KIRAT RAI DIGIT EIGHT +<U00016D79> /xf0/x96/xb5/xb9 KIRAT RAI DIGIT NINE <U00016E40> /xf0/x96/xb9/x80 MEDEFAIDRIN CAPITAL LETTER M <U00016E41> /xf0/x96/xb9/x81 MEDEFAIDRIN CAPITAL LETTER S <U00016E42> /xf0/x96/xb9/x82 MEDEFAIDRIN CAPITAL LETTER V @@ -38920,6 +43318,7 @@ CHARMAP <U00018CD3> /xf0/x98/xb3/x93 KHITAN SMALL SCRIPT CHARACTER-18CD3 <U00018CD4> /xf0/x98/xb3/x94 KHITAN SMALL SCRIPT CHARACTER-18CD4 <U00018CD5> /xf0/x98/xb3/x95 KHITAN SMALL SCRIPT CHARACTER-18CD5 +<U00018CFF> /xf0/x98/xb3/xbf KHITAN SMALL SCRIPT CHARACTER-18CFF <U00018D00>..<U00018D08> /xf0/x98/xb4/x80 <Tangut Ideograph Supplement> <U0001AFF0> /xf0/x9a/xbf/xb0 KATAKANA LETTER MINNAN TONE-2 <U0001AFF1> /xf0/x9a/xbf/xb1 KATAKANA LETTER MINNAN TONE-3 @@ -39777,6 +44176,692 @@ CHARMAP <U0001BCA1> /xf0/x9b/xb2/xa1 SHORTHAND FORMAT CONTINUING OVERLAP <U0001BCA2> /xf0/x9b/xb2/xa2 SHORTHAND FORMAT DOWN STEP <U0001BCA3> /xf0/x9b/xb2/xa3 SHORTHAND FORMAT UP STEP +<U0001CC00> /xf0/x9c/xb0/x80 UP-POINTING GO-KART +<U0001CC01> /xf0/x9c/xb0/x81 RIGHT-POINTING GO-KART +<U0001CC02> /xf0/x9c/xb0/x82 LEFT-POINTING STICK FIGURE +<U0001CC03> /xf0/x9c/xb0/x83 RIGHT-POINTING STICK FIGURE +<U0001CC04> /xf0/x9c/xb0/x84 DOWN-POINTING STICK FIGURE +<U0001CC05> /xf0/x9c/xb0/x85 LOWER HORIZONTAL RULER SEGMENT +<U0001CC06> /xf0/x9c/xb0/x86 RIGHT VERTICAL RULER SEGMENT +<U0001CC07> /xf0/x9c/xb0/x87 LOWER RIGHT RULER SEGMENT +<U0001CC08> /xf0/x9c/xb0/x88 ANTENNA +<U0001CC09> /xf0/x9c/xb0/x89 HORIZONTAL RESISTOR SEGMENT +<U0001CC0A> /xf0/x9c/xb0/x8a VERTICAL RESISTOR SEGMENT +<U0001CC0B> /xf0/x9c/xb0/x8b LEFT THIRD INDUCTOR +<U0001CC0C> /xf0/x9c/xb0/x8c MIDDLE THIRD INDUCTOR +<U0001CC0D> /xf0/x9c/xb0/x8d RIGHT THIRD INDUCTOR +<U0001CC0E> /xf0/x9c/xb0/x8e LEFT-POINTING DIODE +<U0001CC0F> /xf0/x9c/xb0/x8f RIGHT-POINTING DIODE +<U0001CC10> /xf0/x9c/xb0/x90 NPN TRANSISTOR +<U0001CC11> /xf0/x9c/xb0/x91 PNP TRANSISTOR +<U0001CC12> /xf0/x9c/xb0/x92 RECEPTACLE +<U0001CC13> /xf0/x9c/xb0/x93 HORIZONTAL CAPACITOR +<U0001CC14> /xf0/x9c/xb0/x94 VERTICAL CAPACITOR +<U0001CC15> /xf0/x9c/xb0/x95 LOGIC GATE OR +<U0001CC16> /xf0/x9c/xb0/x96 LOGIC GATE AND +<U0001CC17> /xf0/x9c/xb0/x97 LOGIC GATE INVERTED INPUTS +<U0001CC18> /xf0/x9c/xb0/x98 LOGIC GATE INVERTED OUTPUT +<U0001CC19> /xf0/x9c/xb0/x99 LOGIC GATE BUFFER +<U0001CC1A> /xf0/x9c/xb0/x9a LOGIC GATE BUFFER WITH INVERTED INPUT +<U0001CC1B> /xf0/x9c/xb0/x9b BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT +<U0001CC1C> /xf0/x9c/xb0/x9c BOX DRAWINGS LIGHT HORIZONTAL AND LOWER RIGHT +<U0001CC1D> /xf0/x9c/xb0/x9d BOX DRAWINGS LIGHT TOP AND UPPER LEFT +<U0001CC1E> /xf0/x9c/xb0/x9e BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT +<U0001CC1F> /xf0/x9c/xb0/x9f BOX DRAWINGS DOUBLE DIAGONAL UPPER RIGHT TO LOWER LEFT +<U0001CC20> /xf0/x9c/xb0/xa0 BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO LOWER RIGHT +<U0001CC21> /xf0/x9c/xb0/xa1 SEPARATED BLOCK QUADRANT-1 +<U0001CC22> /xf0/x9c/xb0/xa2 SEPARATED BLOCK QUADRANT-2 +<U0001CC23> /xf0/x9c/xb0/xa3 SEPARATED BLOCK QUADRANT-12 +<U0001CC24> /xf0/x9c/xb0/xa4 SEPARATED BLOCK QUADRANT-3 +<U0001CC25> /xf0/x9c/xb0/xa5 SEPARATED BLOCK QUADRANT-13 +<U0001CC26> /xf0/x9c/xb0/xa6 SEPARATED BLOCK QUADRANT-23 +<U0001CC27> /xf0/x9c/xb0/xa7 SEPARATED BLOCK QUADRANT-123 +<U0001CC28> /xf0/x9c/xb0/xa8 SEPARATED BLOCK QUADRANT-4 +<U0001CC29> /xf0/x9c/xb0/xa9 SEPARATED BLOCK QUADRANT-14 +<U0001CC2A> /xf0/x9c/xb0/xaa SEPARATED BLOCK QUADRANT-24 +<U0001CC2B> /xf0/x9c/xb0/xab SEPARATED BLOCK QUADRANT-124 +<U0001CC2C> /xf0/x9c/xb0/xac SEPARATED BLOCK QUADRANT-34 +<U0001CC2D> /xf0/x9c/xb0/xad SEPARATED BLOCK QUADRANT-134 +<U0001CC2E> /xf0/x9c/xb0/xae SEPARATED BLOCK QUADRANT-234 +<U0001CC2F> /xf0/x9c/xb0/xaf SEPARATED BLOCK QUADRANT-1234 +<U0001CC30> /xf0/x9c/xb0/xb0 UPPER LEFT TWELFTH CIRCLE +<U0001CC31> /xf0/x9c/xb0/xb1 UPPER CENTRE LEFT TWELFTH CIRCLE +<U0001CC32> /xf0/x9c/xb0/xb2 UPPER CENTRE RIGHT TWELFTH CIRCLE +<U0001CC33> /xf0/x9c/xb0/xb3 UPPER RIGHT TWELFTH CIRCLE +<U0001CC34> /xf0/x9c/xb0/xb4 UPPER MIDDLE LEFT TWELFTH CIRCLE +<U0001CC35> /xf0/x9c/xb0/xb5 UPPER LEFT QUARTER CIRCLE +<U0001CC36> /xf0/x9c/xb0/xb6 UPPER RIGHT QUARTER CIRCLE +<U0001CC37> /xf0/x9c/xb0/xb7 UPPER MIDDLE RIGHT TWELFTH CIRCLE +<U0001CC38> /xf0/x9c/xb0/xb8 LOWER MIDDLE LEFT TWELFTH CIRCLE +<U0001CC39> /xf0/x9c/xb0/xb9 LOWER LEFT QUARTER CIRCLE +<U0001CC3A> /xf0/x9c/xb0/xba LOWER RIGHT QUARTER CIRCLE +<U0001CC3B> /xf0/x9c/xb0/xbb LOWER MIDDLE RIGHT TWELFTH CIRCLE +<U0001CC3C> /xf0/x9c/xb0/xbc LOWER LEFT TWELFTH CIRCLE +<U0001CC3D> /xf0/x9c/xb0/xbd LOWER CENTRE LEFT TWELFTH CIRCLE +<U0001CC3E> /xf0/x9c/xb0/xbe LOWER CENTRE RIGHT TWELFTH CIRCLE +<U0001CC3F> /xf0/x9c/xb0/xbf LOWER RIGHT TWELFTH CIRCLE +<U0001CC40> /xf0/x9c/xb1/x80 SPARSE HORIZONTAL FILL +<U0001CC41> /xf0/x9c/xb1/x81 SPARSE VERTICAL FILL +<U0001CC42> /xf0/x9c/xb1/x82 ORTHOGONAL CROSSHATCH FILL +<U0001CC43> /xf0/x9c/xb1/x83 DIAGONAL CROSSHATCH FILL +<U0001CC44> /xf0/x9c/xb1/x84 DENSE VERTICAL FILL +<U0001CC45> /xf0/x9c/xb1/x85 DENSE HORIZONTAL FILL +<U0001CC46> /xf0/x9c/xb1/x86 SPECKLE FILL FRAME-1 +<U0001CC47> /xf0/x9c/xb1/x87 SPECKLE FILL FRAME-2 +<U0001CC48> /xf0/x9c/xb1/x88 LEFT-FACING BASSINET +<U0001CC49> /xf0/x9c/xb1/x89 RIGHT-FACING BASSINET +<U0001CC4A> /xf0/x9c/xb1/x8a FLYING SAUCER WITH BEAMS +<U0001CC4B> /xf0/x9c/xb1/x8b FLYING SAUCER WITHOUT BEAMS +<U0001CC4C> /xf0/x9c/xb1/x8c ALIEN MONSTER OPEN JAWS +<U0001CC4D> /xf0/x9c/xb1/x8d ALIEN MONSTER CLOSED JAWS +<U0001CC4E> /xf0/x9c/xb1/x8e ALIEN SQUID OPEN TENTACLES +<U0001CC4F> /xf0/x9c/xb1/x8f ALIEN SQUID CLOSED TENTACLES +<U0001CC50> /xf0/x9c/xb1/x90 ALIEN CRAB STEPPING RIGHT +<U0001CC51> /xf0/x9c/xb1/x91 ALIEN CRAB STEPPING LEFT +<U0001CC52> /xf0/x9c/xb1/x92 ALIEN SPIDER CROUCHING +<U0001CC53> /xf0/x9c/xb1/x93 ALIEN SPIDER SPREAD +<U0001CC54> /xf0/x9c/xb1/x94 ALIEN MONSTER STEP-1 +<U0001CC55> /xf0/x9c/xb1/x95 ALIEN MONSTER STEP-2 +<U0001CC56> /xf0/x9c/xb1/x96 LEFT-POINTING ROCKET SHIP +<U0001CC57> /xf0/x9c/xb1/x97 UP-POINTING ROCKET SHIP +<U0001CC58> /xf0/x9c/xb1/x98 RIGHT-POINTING ROCKET SHIP +<U0001CC59> /xf0/x9c/xb1/x99 DOWN-POINTING ROCKET SHIP +<U0001CC5A> /xf0/x9c/xb1/x9a TOP HALF LEFT-FACING ROBOT +<U0001CC5B> /xf0/x9c/xb1/x9b TOP HALF FORWARD-FACING ROBOT +<U0001CC5C> /xf0/x9c/xb1/x9c TOP HALF RIGHT-FACING ROBOT +<U0001CC5D> /xf0/x9c/xb1/x9d BOTTOM HALF LEFT-FACING ROBOT +<U0001CC5E> /xf0/x9c/xb1/x9e BOTTOM HALF FORWARD-FACING ROBOT +<U0001CC5F> /xf0/x9c/xb1/x9f BOTTOM HALF RIGHT-FACING ROBOT +<U0001CC60> /xf0/x9c/xb1/xa0 LEFT-POINTING ATOMIC BOMB +<U0001CC61> /xf0/x9c/xb1/xa1 UP-POINTING ATOMIC BOMB +<U0001CC62> /xf0/x9c/xb1/xa2 RIGHT-POINTING ATOMIC BOMB +<U0001CC63> /xf0/x9c/xb1/xa3 DOWN-POINTING ATOMIC BOMB +<U0001CC64> /xf0/x9c/xb1/xa4 MUSHROOM CLOUD +<U0001CC65> /xf0/x9c/xb1/xa5 LEFT-POINTING RIFLE +<U0001CC66> /xf0/x9c/xb1/xa6 UP-POINTING RIFLE +<U0001CC67> /xf0/x9c/xb1/xa7 RIGHT-POINTING RIFLE +<U0001CC68> /xf0/x9c/xb1/xa8 DOWN-POINTING RIFLE +<U0001CC69> /xf0/x9c/xb1/xa9 EIGHT RAYS INWARD +<U0001CC6A> /xf0/x9c/xb1/xaa EIGHT RAYS OUTWARD +<U0001CC6B> /xf0/x9c/xb1/xab BLACK LARGE CIRCLE MINUS LEFT QUARTER SECTION +<U0001CC6C> /xf0/x9c/xb1/xac BLACK LARGE CIRCLE MINUS UPPER QUARTER SECTION +<U0001CC6D> /xf0/x9c/xb1/xad BLACK LARGE CIRCLE MINUS RIGHT QUARTER SECTION +<U0001CC6E> /xf0/x9c/xb1/xae BLACK LARGE CIRCLE MINUS LOWER QUARTER SECTION +<U0001CC6F> /xf0/x9c/xb1/xaf BLACK NEUTRAL FACE +<U0001CC70> /xf0/x9c/xb1/xb0 LEFT-FACING SNAKE HEAD WITH OPEN MOUTH +<U0001CC71> /xf0/x9c/xb1/xb1 UP-FACING SNAKE HEAD WITH OPEN MOUTH +<U0001CC72> /xf0/x9c/xb1/xb2 RIGHT-FACING SNAKE HEAD WITH OPEN MOUTH +<U0001CC73> /xf0/x9c/xb1/xb3 DOWN-FACING SNAKE HEAD WITH OPEN MOUTH +<U0001CC74> /xf0/x9c/xb1/xb4 LEFT-FACING SNAKE HEAD WITH CLOSED MOUTH +<U0001CC75> /xf0/x9c/xb1/xb5 UP-FACING SNAKE HEAD WITH CLOSED MOUTH +<U0001CC76> /xf0/x9c/xb1/xb6 RIGHT-FACING SNAKE HEAD WITH CLOSED MOUTH +<U0001CC77> /xf0/x9c/xb1/xb7 DOWN-FACING SNAKE HEAD WITH CLOSED MOUTH +<U0001CC78> /xf0/x9c/xb1/xb8 LEFT-POINTING ENERGY WAVE +<U0001CC79> /xf0/x9c/xb1/xb9 UP-POINTING ENERGY WAVE +<U0001CC7A> /xf0/x9c/xb1/xba RIGHT-POINTING ENERGY WAVE +<U0001CC7B> /xf0/x9c/xb1/xbb DOWN-POINTING ENERGY WAVE +<U0001CC7C> /xf0/x9c/xb1/xbc SQUARE SPIRAL FROM TOP LEFT +<U0001CC7D> /xf0/x9c/xb1/xbd SQUARE SPIRAL FROM TOP RIGHT +<U0001CC7E> /xf0/x9c/xb1/xbe SQUARE SPIRAL FROM BOTTOM RIGHT +<U0001CC7F> /xf0/x9c/xb1/xbf SQUARE SPIRAL FROM BOTTOM LEFT +<U0001CC80> /xf0/x9c/xb2/x80 STRIPED LEFT-POINTING TRIANGLE +<U0001CC81> /xf0/x9c/xb2/x81 STRIPED UP-POINTING TRIANGLE +<U0001CC82> /xf0/x9c/xb2/x82 STRIPED RIGHT-POINTING TRIANGLE +<U0001CC83> /xf0/x9c/xb2/x83 STRIPED DOWN-POINTING TRIANGLE +<U0001CC84> /xf0/x9c/xb2/x84 VERTICAL LADDER +<U0001CC85> /xf0/x9c/xb2/x85 HORIZONTAL LADDER +<U0001CC86> /xf0/x9c/xb2/x86 WHITE LOWER LEFT POINTER +<U0001CC87> /xf0/x9c/xb2/x87 WHITE LOWER RIGHT POINTER +<U0001CC88> /xf0/x9c/xb2/x88 TWO RINGS ALIGNED HORIZONTALLY +<U0001CC89> /xf0/x9c/xb2/x89 SQUARE FOUR CORNER SALTIRES +<U0001CC8A> /xf0/x9c/xb2/x8a SQUARE FOUR CORNER DIAGONALS +<U0001CC8B> /xf0/x9c/xb2/x8b SQUARE FOUR CORNER BLACK TRIANGLES +<U0001CC8C> /xf0/x9c/xb2/x8c SQUARE APERTURE +<U0001CC8D> /xf0/x9c/xb2/x8d INVERSE BLACK DIAMOND +<U0001CC8E> /xf0/x9c/xb2/x8e LEFT AND UPPER ONE EIGHTH BLOCK CONTAINING BLACK SMALL SQUARE +<U0001CC8F> /xf0/x9c/xb2/x8f INVERSE BLACK SMALL SQUARE +<U0001CC90> /xf0/x9c/xb2/x90 VERTICAL LINE WITH FOUR TICK MARKS +<U0001CC91> /xf0/x9c/xb2/x91 HORIZONTAL LINE WITH FOUR TICK MARKS +<U0001CC92> /xf0/x9c/xb2/x92 LEFT-FACING FISH +<U0001CC93> /xf0/x9c/xb2/x93 RIGHT-FACING FISH +<U0001CC94> /xf0/x9c/xb2/x94 LEFT-FACING FISH WITH OPEN MOUTH +<U0001CC95> /xf0/x9c/xb2/x95 RIGHT-FACING FISH WITH OPEN MOUTH +<U0001CC96> /xf0/x9c/xb2/x96 FLAPPING BIRD +<U0001CC97> /xf0/x9c/xb2/x97 LEFT-POINTING RACING CAR +<U0001CC98> /xf0/x9c/xb2/x98 UP-POINTING RACING CAR +<U0001CC99> /xf0/x9c/xb2/x99 RIGHT-POINTING RACING CAR +<U0001CC9A> /xf0/x9c/xb2/x9a DOWN-POINTING RACING CAR +<U0001CC9B> /xf0/x9c/xb2/x9b HORIZONTAL RACING CAR +<U0001CC9C> /xf0/x9c/xb2/x9c VERTICAL RACING CAR +<U0001CC9D> /xf0/x9c/xb2/x9d VERTICAL GO-KART +<U0001CC9E> /xf0/x9c/xb2/x9e LEFT-POINTING TANK +<U0001CC9F> /xf0/x9c/xb2/x9f RIGHT-POINTING TANK +<U0001CCA0> /xf0/x9c/xb2/xa0 LEFT-POINTING ROCKET BOOSTER +<U0001CCA1> /xf0/x9c/xb2/xa1 RIGHT-POINTING ROCKET BOOSTER +<U0001CCA2> /xf0/x9c/xb2/xa2 LEFT-POINTING ROLLER COASTER CAR +<U0001CCA3> /xf0/x9c/xb2/xa3 RIGHT-POINTING ROLLER COASTER CAR +<U0001CCA4> /xf0/x9c/xb2/xa4 LEFT HALF FLYING SAUCER +<U0001CCA5> /xf0/x9c/xb2/xa5 RIGHT HALF FLYING SAUCER +<U0001CCA6> /xf0/x9c/xb2/xa6 UPPER LEFT QUADRANT FACE WITH OPEN EYES +<U0001CCA7> /xf0/x9c/xb2/xa7 UPPER RIGHT QUADRANT FACE WITH OPEN EYES +<U0001CCA8> /xf0/x9c/xb2/xa8 UPPER LEFT QUADRANT FACE WITH CLOSED EYES +<U0001CCA9> /xf0/x9c/xb2/xa9 UPPER RIGHT QUADRANT FACE WITH CLOSED EYES +<U0001CCAA> /xf0/x9c/xb2/xaa LOWER LEFT QUADRANT SMILING FACE +<U0001CCAB> /xf0/x9c/xb2/xab LOWER RIGHT QUADRANT SMILING FACE +<U0001CCAC> /xf0/x9c/xb2/xac LOWER LEFT QUADRANT NEUTRAL FACE +<U0001CCAD> /xf0/x9c/xb2/xad LOWER RIGHT QUADRANT NEUTRAL FACE +<U0001CCAE> /xf0/x9c/xb2/xae LOWER LEFT QUADRANT FACE WITH OPEN MOUTH +<U0001CCAF> /xf0/x9c/xb2/xaf LOWER RIGHT QUADRANT FACE WITH OPEN MOUTH +<U0001CCB0> /xf0/x9c/xb2/xb0 LOWER LEFT QUADRANT FROWNING FACE +<U0001CCB1> /xf0/x9c/xb2/xb1 LOWER RIGHT QUADRANT FROWNING FACE +<U0001CCB2> /xf0/x9c/xb2/xb2 UPPER LEFT QUADRANT TELEVISION +<U0001CCB3> /xf0/x9c/xb2/xb3 UPPER RIGHT QUADRANT TELEVISION +<U0001CCB4> /xf0/x9c/xb2/xb4 LOWER LEFT QUADRANT TELEVISION +<U0001CCB5> /xf0/x9c/xb2/xb5 LOWER RIGHT QUADRANT TELEVISION +<U0001CCB6> /xf0/x9c/xb2/xb6 UPPER LEFT QUADRANT MICROCOMPUTER +<U0001CCB7> /xf0/x9c/xb2/xb7 UPPER RIGHT QUADRANT MICROCOMPUTER +<U0001CCB8> /xf0/x9c/xb2/xb8 LOWER LEFT QUADRANT MICROCOMPUTER +<U0001CCB9> /xf0/x9c/xb2/xb9 LOWER RIGHT QUADRANT MICROCOMPUTER +<U0001CCBA> /xf0/x9c/xb2/xba UPPER LEFT QUADRANT CHESS KING +<U0001CCBB> /xf0/x9c/xb2/xbb UPPER RIGHT QUADRANT CHESS KING +<U0001CCBC> /xf0/x9c/xb2/xbc LOWER LEFT QUADRANT CHESS KING +<U0001CCBD> /xf0/x9c/xb2/xbd LOWER RIGHT QUADRANT CHESS KING +<U0001CCBE> /xf0/x9c/xb2/xbe UPPER LEFT QUADRANT CHESS QUEEN +<U0001CCBF> /xf0/x9c/xb2/xbf UPPER RIGHT QUADRANT CHESS QUEEN +<U0001CCC0> /xf0/x9c/xb3/x80 LOWER LEFT QUADRANT CHESS QUEEN +<U0001CCC1> /xf0/x9c/xb3/x81 LOWER RIGHT QUADRANT CHESS QUEEN +<U0001CCC2> /xf0/x9c/xb3/x82 UPPER LEFT QUADRANT CHESS ROOK +<U0001CCC3> /xf0/x9c/xb3/x83 UPPER RIGHT QUADRANT CHESS ROOK +<U0001CCC4> /xf0/x9c/xb3/x84 LOWER LEFT QUADRANT CHESS ROOK +<U0001CCC5> /xf0/x9c/xb3/x85 LOWER RIGHT QUADRANT CHESS ROOK +<U0001CCC6> /xf0/x9c/xb3/x86 UPPER LEFT QUADRANT CHESS BISHOP +<U0001CCC7> /xf0/x9c/xb3/x87 UPPER RIGHT QUADRANT CHESS BISHOP +<U0001CCC8> /xf0/x9c/xb3/x88 LOWER LEFT QUADRANT CHESS BISHOP +<U0001CCC9> /xf0/x9c/xb3/x89 LOWER RIGHT QUADRANT CHESS BISHOP +<U0001CCCA> /xf0/x9c/xb3/x8a UPPER LEFT QUADRANT CHESS KNIGHT +<U0001CCCB> /xf0/x9c/xb3/x8b UPPER RIGHT QUADRANT CHESS KNIGHT +<U0001CCCC> /xf0/x9c/xb3/x8c LOWER LEFT QUADRANT CHESS KNIGHT +<U0001CCCD> /xf0/x9c/xb3/x8d LOWER RIGHT QUADRANT CHESS KNIGHT +<U0001CCCE> /xf0/x9c/xb3/x8e UPPER LEFT QUADRANT CHESS PAWN +<U0001CCCF> /xf0/x9c/xb3/x8f UPPER RIGHT QUADRANT CHESS PAWN +<U0001CCD0> /xf0/x9c/xb3/x90 LOWER LEFT QUADRANT CHESS PAWN +<U0001CCD1> /xf0/x9c/xb3/x91 LOWER RIGHT QUADRANT CHESS PAWN +<U0001CCD2> /xf0/x9c/xb3/x92 UPPER LEFT QUADRANT STANDING KNIGHT +<U0001CCD3> /xf0/x9c/xb3/x93 UPPER RIGHT QUADRANT STANDING KNIGHT +<U0001CCD4> /xf0/x9c/xb3/x94 LOWER LEFT QUADRANT STANDING KNIGHT +<U0001CCD5> /xf0/x9c/xb3/x95 LOWER RIGHT QUADRANT STANDING KNIGHT +<U0001CCD6> /xf0/x9c/xb3/x96 OUTLINED LATIN CAPITAL LETTER A +<U0001CCD7> /xf0/x9c/xb3/x97 OUTLINED LATIN CAPITAL LETTER B +<U0001CCD8> /xf0/x9c/xb3/x98 OUTLINED LATIN CAPITAL LETTER C +<U0001CCD9> /xf0/x9c/xb3/x99 OUTLINED LATIN CAPITAL LETTER D +<U0001CCDA> /xf0/x9c/xb3/x9a OUTLINED LATIN CAPITAL LETTER E +<U0001CCDB> /xf0/x9c/xb3/x9b OUTLINED LATIN CAPITAL LETTER F +<U0001CCDC> /xf0/x9c/xb3/x9c OUTLINED LATIN CAPITAL LETTER G +<U0001CCDD> /xf0/x9c/xb3/x9d OUTLINED LATIN CAPITAL LETTER H +<U0001CCDE> /xf0/x9c/xb3/x9e OUTLINED LATIN CAPITAL LETTER I +<U0001CCDF> /xf0/x9c/xb3/x9f OUTLINED LATIN CAPITAL LETTER J +<U0001CCE0> /xf0/x9c/xb3/xa0 OUTLINED LATIN CAPITAL LETTER K +<U0001CCE1> /xf0/x9c/xb3/xa1 OUTLINED LATIN CAPITAL LETTER L +<U0001CCE2> /xf0/x9c/xb3/xa2 OUTLINED LATIN CAPITAL LETTER M +<U0001CCE3> /xf0/x9c/xb3/xa3 OUTLINED LATIN CAPITAL LETTER N +<U0001CCE4> /xf0/x9c/xb3/xa4 OUTLINED LATIN CAPITAL LETTER O +<U0001CCE5> /xf0/x9c/xb3/xa5 OUTLINED LATIN CAPITAL LETTER P +<U0001CCE6> /xf0/x9c/xb3/xa6 OUTLINED LATIN CAPITAL LETTER Q +<U0001CCE7> /xf0/x9c/xb3/xa7 OUTLINED LATIN CAPITAL LETTER R +<U0001CCE8> /xf0/x9c/xb3/xa8 OUTLINED LATIN CAPITAL LETTER S +<U0001CCE9> /xf0/x9c/xb3/xa9 OUTLINED LATIN CAPITAL LETTER T +<U0001CCEA> /xf0/x9c/xb3/xaa OUTLINED LATIN CAPITAL LETTER U +<U0001CCEB> /xf0/x9c/xb3/xab OUTLINED LATIN CAPITAL LETTER V +<U0001CCEC> /xf0/x9c/xb3/xac OUTLINED LATIN CAPITAL LETTER W +<U0001CCED> /xf0/x9c/xb3/xad OUTLINED LATIN CAPITAL LETTER X +<U0001CCEE> /xf0/x9c/xb3/xae OUTLINED LATIN CAPITAL LETTER Y +<U0001CCEF> /xf0/x9c/xb3/xaf OUTLINED LATIN CAPITAL LETTER Z +<U0001CCF0> /xf0/x9c/xb3/xb0 OUTLINED DIGIT ZERO +<U0001CCF1> /xf0/x9c/xb3/xb1 OUTLINED DIGIT ONE +<U0001CCF2> /xf0/x9c/xb3/xb2 OUTLINED DIGIT TWO +<U0001CCF3> /xf0/x9c/xb3/xb3 OUTLINED DIGIT THREE +<U0001CCF4> /xf0/x9c/xb3/xb4 OUTLINED DIGIT FOUR +<U0001CCF5> /xf0/x9c/xb3/xb5 OUTLINED DIGIT FIVE +<U0001CCF6> /xf0/x9c/xb3/xb6 OUTLINED DIGIT SIX +<U0001CCF7> /xf0/x9c/xb3/xb7 OUTLINED DIGIT SEVEN +<U0001CCF8> /xf0/x9c/xb3/xb8 OUTLINED DIGIT EIGHT +<U0001CCF9> /xf0/x9c/xb3/xb9 OUTLINED DIGIT NINE +<U0001CD00> /xf0/x9c/xb4/x80 BLOCK OCTANT-3 +<U0001CD01> /xf0/x9c/xb4/x81 BLOCK OCTANT-23 +<U0001CD02> /xf0/x9c/xb4/x82 BLOCK OCTANT-123 +<U0001CD03> /xf0/x9c/xb4/x83 BLOCK OCTANT-4 +<U0001CD04> /xf0/x9c/xb4/x84 BLOCK OCTANT-14 +<U0001CD05> /xf0/x9c/xb4/x85 BLOCK OCTANT-124 +<U0001CD06> /xf0/x9c/xb4/x86 BLOCK OCTANT-34 +<U0001CD07> /xf0/x9c/xb4/x87 BLOCK OCTANT-134 +<U0001CD08> /xf0/x9c/xb4/x88 BLOCK OCTANT-234 +<U0001CD09> /xf0/x9c/xb4/x89 BLOCK OCTANT-5 +<U0001CD0A> /xf0/x9c/xb4/x8a BLOCK OCTANT-15 +<U0001CD0B> /xf0/x9c/xb4/x8b BLOCK OCTANT-25 +<U0001CD0C> /xf0/x9c/xb4/x8c BLOCK OCTANT-125 +<U0001CD0D> /xf0/x9c/xb4/x8d BLOCK OCTANT-135 +<U0001CD0E> /xf0/x9c/xb4/x8e BLOCK OCTANT-235 +<U0001CD0F> /xf0/x9c/xb4/x8f BLOCK OCTANT-1235 +<U0001CD10> /xf0/x9c/xb4/x90 BLOCK OCTANT-45 +<U0001CD11> /xf0/x9c/xb4/x91 BLOCK OCTANT-145 +<U0001CD12> /xf0/x9c/xb4/x92 BLOCK OCTANT-245 +<U0001CD13> /xf0/x9c/xb4/x93 BLOCK OCTANT-1245 +<U0001CD14> /xf0/x9c/xb4/x94 BLOCK OCTANT-345 +<U0001CD15> /xf0/x9c/xb4/x95 BLOCK OCTANT-1345 +<U0001CD16> /xf0/x9c/xb4/x96 BLOCK OCTANT-2345 +<U0001CD17> /xf0/x9c/xb4/x97 BLOCK OCTANT-12345 +<U0001CD18> /xf0/x9c/xb4/x98 BLOCK OCTANT-6 +<U0001CD19> /xf0/x9c/xb4/x99 BLOCK OCTANT-16 +<U0001CD1A> /xf0/x9c/xb4/x9a BLOCK OCTANT-26 +<U0001CD1B> /xf0/x9c/xb4/x9b BLOCK OCTANT-126 +<U0001CD1C> /xf0/x9c/xb4/x9c BLOCK OCTANT-36 +<U0001CD1D> /xf0/x9c/xb4/x9d BLOCK OCTANT-136 +<U0001CD1E> /xf0/x9c/xb4/x9e BLOCK OCTANT-236 +<U0001CD1F> /xf0/x9c/xb4/x9f BLOCK OCTANT-1236 +<U0001CD20> /xf0/x9c/xb4/xa0 BLOCK OCTANT-146 +<U0001CD21> /xf0/x9c/xb4/xa1 BLOCK OCTANT-246 +<U0001CD22> /xf0/x9c/xb4/xa2 BLOCK OCTANT-1246 +<U0001CD23> /xf0/x9c/xb4/xa3 BLOCK OCTANT-346 +<U0001CD24> /xf0/x9c/xb4/xa4 BLOCK OCTANT-1346 +<U0001CD25> /xf0/x9c/xb4/xa5 BLOCK OCTANT-2346 +<U0001CD26> /xf0/x9c/xb4/xa6 BLOCK OCTANT-12346 +<U0001CD27> /xf0/x9c/xb4/xa7 BLOCK OCTANT-56 +<U0001CD28> /xf0/x9c/xb4/xa8 BLOCK OCTANT-156 +<U0001CD29> /xf0/x9c/xb4/xa9 BLOCK OCTANT-256 +<U0001CD2A> /xf0/x9c/xb4/xaa BLOCK OCTANT-1256 +<U0001CD2B> /xf0/x9c/xb4/xab BLOCK OCTANT-356 +<U0001CD2C> /xf0/x9c/xb4/xac BLOCK OCTANT-1356 +<U0001CD2D> /xf0/x9c/xb4/xad BLOCK OCTANT-2356 +<U0001CD2E> /xf0/x9c/xb4/xae BLOCK OCTANT-12356 +<U0001CD2F> /xf0/x9c/xb4/xaf BLOCK OCTANT-456 +<U0001CD30> /xf0/x9c/xb4/xb0 BLOCK OCTANT-1456 +<U0001CD31> /xf0/x9c/xb4/xb1 BLOCK OCTANT-2456 +<U0001CD32> /xf0/x9c/xb4/xb2 BLOCK OCTANT-12456 +<U0001CD33> /xf0/x9c/xb4/xb3 BLOCK OCTANT-3456 +<U0001CD34> /xf0/x9c/xb4/xb4 BLOCK OCTANT-13456 +<U0001CD35> /xf0/x9c/xb4/xb5 BLOCK OCTANT-23456 +<U0001CD36> /xf0/x9c/xb4/xb6 BLOCK OCTANT-17 +<U0001CD37> /xf0/x9c/xb4/xb7 BLOCK OCTANT-27 +<U0001CD38> /xf0/x9c/xb4/xb8 BLOCK OCTANT-127 +<U0001CD39> /xf0/x9c/xb4/xb9 BLOCK OCTANT-37 +<U0001CD3A> /xf0/x9c/xb4/xba BLOCK OCTANT-137 +<U0001CD3B> /xf0/x9c/xb4/xbb BLOCK OCTANT-237 +<U0001CD3C> /xf0/x9c/xb4/xbc BLOCK OCTANT-1237 +<U0001CD3D> /xf0/x9c/xb4/xbd BLOCK OCTANT-47 +<U0001CD3E> /xf0/x9c/xb4/xbe BLOCK OCTANT-147 +<U0001CD3F> /xf0/x9c/xb4/xbf BLOCK OCTANT-247 +<U0001CD40> /xf0/x9c/xb5/x80 BLOCK OCTANT-1247 +<U0001CD41> /xf0/x9c/xb5/x81 BLOCK OCTANT-347 +<U0001CD42> /xf0/x9c/xb5/x82 BLOCK OCTANT-1347 +<U0001CD43> /xf0/x9c/xb5/x83 BLOCK OCTANT-2347 +<U0001CD44> /xf0/x9c/xb5/x84 BLOCK OCTANT-12347 +<U0001CD45> /xf0/x9c/xb5/x85 BLOCK OCTANT-157 +<U0001CD46> /xf0/x9c/xb5/x86 BLOCK OCTANT-257 +<U0001CD47> /xf0/x9c/xb5/x87 BLOCK OCTANT-1257 +<U0001CD48> /xf0/x9c/xb5/x88 BLOCK OCTANT-357 +<U0001CD49> /xf0/x9c/xb5/x89 BLOCK OCTANT-2357 +<U0001CD4A> /xf0/x9c/xb5/x8a BLOCK OCTANT-12357 +<U0001CD4B> /xf0/x9c/xb5/x8b BLOCK OCTANT-457 +<U0001CD4C> /xf0/x9c/xb5/x8c BLOCK OCTANT-1457 +<U0001CD4D> /xf0/x9c/xb5/x8d BLOCK OCTANT-12457 +<U0001CD4E> /xf0/x9c/xb5/x8e BLOCK OCTANT-3457 +<U0001CD4F> /xf0/x9c/xb5/x8f BLOCK OCTANT-13457 +<U0001CD50> /xf0/x9c/xb5/x90 BLOCK OCTANT-23457 +<U0001CD51> /xf0/x9c/xb5/x91 BLOCK OCTANT-67 +<U0001CD52> /xf0/x9c/xb5/x92 BLOCK OCTANT-167 +<U0001CD53> /xf0/x9c/xb5/x93 BLOCK OCTANT-267 +<U0001CD54> /xf0/x9c/xb5/x94 BLOCK OCTANT-1267 +<U0001CD55> /xf0/x9c/xb5/x95 BLOCK OCTANT-367 +<U0001CD56> /xf0/x9c/xb5/x96 BLOCK OCTANT-1367 +<U0001CD57> /xf0/x9c/xb5/x97 BLOCK OCTANT-2367 +<U0001CD58> /xf0/x9c/xb5/x98 BLOCK OCTANT-12367 +<U0001CD59> /xf0/x9c/xb5/x99 BLOCK OCTANT-467 +<U0001CD5A> /xf0/x9c/xb5/x9a BLOCK OCTANT-1467 +<U0001CD5B> /xf0/x9c/xb5/x9b BLOCK OCTANT-2467 +<U0001CD5C> /xf0/x9c/xb5/x9c BLOCK OCTANT-12467 +<U0001CD5D> /xf0/x9c/xb5/x9d BLOCK OCTANT-3467 +<U0001CD5E> /xf0/x9c/xb5/x9e BLOCK OCTANT-13467 +<U0001CD5F> /xf0/x9c/xb5/x9f BLOCK OCTANT-23467 +<U0001CD60> /xf0/x9c/xb5/xa0 BLOCK OCTANT-123467 +<U0001CD61> /xf0/x9c/xb5/xa1 BLOCK OCTANT-567 +<U0001CD62> /xf0/x9c/xb5/xa2 BLOCK OCTANT-1567 +<U0001CD63> /xf0/x9c/xb5/xa3 BLOCK OCTANT-2567 +<U0001CD64> /xf0/x9c/xb5/xa4 BLOCK OCTANT-12567 +<U0001CD65> /xf0/x9c/xb5/xa5 BLOCK OCTANT-3567 +<U0001CD66> /xf0/x9c/xb5/xa6 BLOCK OCTANT-13567 +<U0001CD67> /xf0/x9c/xb5/xa7 BLOCK OCTANT-23567 +<U0001CD68> /xf0/x9c/xb5/xa8 BLOCK OCTANT-123567 +<U0001CD69> /xf0/x9c/xb5/xa9 BLOCK OCTANT-4567 +<U0001CD6A> /xf0/x9c/xb5/xaa BLOCK OCTANT-14567 +<U0001CD6B> /xf0/x9c/xb5/xab BLOCK OCTANT-24567 +<U0001CD6C> /xf0/x9c/xb5/xac BLOCK OCTANT-124567 +<U0001CD6D> /xf0/x9c/xb5/xad BLOCK OCTANT-34567 +<U0001CD6E> /xf0/x9c/xb5/xae BLOCK OCTANT-134567 +<U0001CD6F> /xf0/x9c/xb5/xaf BLOCK OCTANT-234567 +<U0001CD70> /xf0/x9c/xb5/xb0 BLOCK OCTANT-1234567 +<U0001CD71> /xf0/x9c/xb5/xb1 BLOCK OCTANT-18 +<U0001CD72> /xf0/x9c/xb5/xb2 BLOCK OCTANT-28 +<U0001CD73> /xf0/x9c/xb5/xb3 BLOCK OCTANT-128 +<U0001CD74> /xf0/x9c/xb5/xb4 BLOCK OCTANT-38 +<U0001CD75> /xf0/x9c/xb5/xb5 BLOCK OCTANT-138 +<U0001CD76> /xf0/x9c/xb5/xb6 BLOCK OCTANT-238 +<U0001CD77> /xf0/x9c/xb5/xb7 BLOCK OCTANT-1238 +<U0001CD78> /xf0/x9c/xb5/xb8 BLOCK OCTANT-48 +<U0001CD79> /xf0/x9c/xb5/xb9 BLOCK OCTANT-148 +<U0001CD7A> /xf0/x9c/xb5/xba BLOCK OCTANT-248 +<U0001CD7B> /xf0/x9c/xb5/xbb BLOCK OCTANT-1248 +<U0001CD7C> /xf0/x9c/xb5/xbc BLOCK OCTANT-348 +<U0001CD7D> /xf0/x9c/xb5/xbd BLOCK OCTANT-1348 +<U0001CD7E> /xf0/x9c/xb5/xbe BLOCK OCTANT-2348 +<U0001CD7F> /xf0/x9c/xb5/xbf BLOCK OCTANT-12348 +<U0001CD80> /xf0/x9c/xb6/x80 BLOCK OCTANT-58 +<U0001CD81> /xf0/x9c/xb6/x81 BLOCK OCTANT-158 +<U0001CD82> /xf0/x9c/xb6/x82 BLOCK OCTANT-258 +<U0001CD83> /xf0/x9c/xb6/x83 BLOCK OCTANT-1258 +<U0001CD84> /xf0/x9c/xb6/x84 BLOCK OCTANT-358 +<U0001CD85> /xf0/x9c/xb6/x85 BLOCK OCTANT-1358 +<U0001CD86> /xf0/x9c/xb6/x86 BLOCK OCTANT-2358 +<U0001CD87> /xf0/x9c/xb6/x87 BLOCK OCTANT-12358 +<U0001CD88> /xf0/x9c/xb6/x88 BLOCK OCTANT-458 +<U0001CD89> /xf0/x9c/xb6/x89 BLOCK OCTANT-1458 +<U0001CD8A> /xf0/x9c/xb6/x8a BLOCK OCTANT-2458 +<U0001CD8B> /xf0/x9c/xb6/x8b BLOCK OCTANT-12458 +<U0001CD8C> /xf0/x9c/xb6/x8c BLOCK OCTANT-3458 +<U0001CD8D> /xf0/x9c/xb6/x8d BLOCK OCTANT-13458 +<U0001CD8E> /xf0/x9c/xb6/x8e BLOCK OCTANT-23458 +<U0001CD8F> /xf0/x9c/xb6/x8f BLOCK OCTANT-123458 +<U0001CD90> /xf0/x9c/xb6/x90 BLOCK OCTANT-168 +<U0001CD91> /xf0/x9c/xb6/x91 BLOCK OCTANT-268 +<U0001CD92> /xf0/x9c/xb6/x92 BLOCK OCTANT-1268 +<U0001CD93> /xf0/x9c/xb6/x93 BLOCK OCTANT-368 +<U0001CD94> /xf0/x9c/xb6/x94 BLOCK OCTANT-2368 +<U0001CD95> /xf0/x9c/xb6/x95 BLOCK OCTANT-12368 +<U0001CD96> /xf0/x9c/xb6/x96 BLOCK OCTANT-468 +<U0001CD97> /xf0/x9c/xb6/x97 BLOCK OCTANT-1468 +<U0001CD98> /xf0/x9c/xb6/x98 BLOCK OCTANT-12468 +<U0001CD99> /xf0/x9c/xb6/x99 BLOCK OCTANT-3468 +<U0001CD9A> /xf0/x9c/xb6/x9a BLOCK OCTANT-13468 +<U0001CD9B> /xf0/x9c/xb6/x9b BLOCK OCTANT-23468 +<U0001CD9C> /xf0/x9c/xb6/x9c BLOCK OCTANT-568 +<U0001CD9D> /xf0/x9c/xb6/x9d BLOCK OCTANT-1568 +<U0001CD9E> /xf0/x9c/xb6/x9e BLOCK OCTANT-2568 +<U0001CD9F> /xf0/x9c/xb6/x9f BLOCK OCTANT-12568 +<U0001CDA0> /xf0/x9c/xb6/xa0 BLOCK OCTANT-3568 +<U0001CDA1> /xf0/x9c/xb6/xa1 BLOCK OCTANT-13568 +<U0001CDA2> /xf0/x9c/xb6/xa2 BLOCK OCTANT-23568 +<U0001CDA3> /xf0/x9c/xb6/xa3 BLOCK OCTANT-123568 +<U0001CDA4> /xf0/x9c/xb6/xa4 BLOCK OCTANT-4568 +<U0001CDA5> /xf0/x9c/xb6/xa5 BLOCK OCTANT-14568 +<U0001CDA6> /xf0/x9c/xb6/xa6 BLOCK OCTANT-24568 +<U0001CDA7> /xf0/x9c/xb6/xa7 BLOCK OCTANT-124568 +<U0001CDA8> /xf0/x9c/xb6/xa8 BLOCK OCTANT-34568 +<U0001CDA9> /xf0/x9c/xb6/xa9 BLOCK OCTANT-134568 +<U0001CDAA> /xf0/x9c/xb6/xaa BLOCK OCTANT-234568 +<U0001CDAB> /xf0/x9c/xb6/xab BLOCK OCTANT-1234568 +<U0001CDAC> /xf0/x9c/xb6/xac BLOCK OCTANT-178 +<U0001CDAD> /xf0/x9c/xb6/xad BLOCK OCTANT-278 +<U0001CDAE> /xf0/x9c/xb6/xae BLOCK OCTANT-1278 +<U0001CDAF> /xf0/x9c/xb6/xaf BLOCK OCTANT-378 +<U0001CDB0> /xf0/x9c/xb6/xb0 BLOCK OCTANT-1378 +<U0001CDB1> /xf0/x9c/xb6/xb1 BLOCK OCTANT-2378 +<U0001CDB2> /xf0/x9c/xb6/xb2 BLOCK OCTANT-12378 +<U0001CDB3> /xf0/x9c/xb6/xb3 BLOCK OCTANT-478 +<U0001CDB4> /xf0/x9c/xb6/xb4 BLOCK OCTANT-1478 +<U0001CDB5> /xf0/x9c/xb6/xb5 BLOCK OCTANT-2478 +<U0001CDB6> /xf0/x9c/xb6/xb6 BLOCK OCTANT-12478 +<U0001CDB7> /xf0/x9c/xb6/xb7 BLOCK OCTANT-3478 +<U0001CDB8> /xf0/x9c/xb6/xb8 BLOCK OCTANT-13478 +<U0001CDB9> /xf0/x9c/xb6/xb9 BLOCK OCTANT-23478 +<U0001CDBA> /xf0/x9c/xb6/xba BLOCK OCTANT-123478 +<U0001CDBB> /xf0/x9c/xb6/xbb BLOCK OCTANT-578 +<U0001CDBC> /xf0/x9c/xb6/xbc BLOCK OCTANT-1578 +<U0001CDBD> /xf0/x9c/xb6/xbd BLOCK OCTANT-2578 +<U0001CDBE> /xf0/x9c/xb6/xbe BLOCK OCTANT-12578 +<U0001CDBF> /xf0/x9c/xb6/xbf BLOCK OCTANT-3578 +<U0001CDC0> /xf0/x9c/xb7/x80 BLOCK OCTANT-13578 +<U0001CDC1> /xf0/x9c/xb7/x81 BLOCK OCTANT-23578 +<U0001CDC2> /xf0/x9c/xb7/x82 BLOCK OCTANT-123578 +<U0001CDC3> /xf0/x9c/xb7/x83 BLOCK OCTANT-4578 +<U0001CDC4> /xf0/x9c/xb7/x84 BLOCK OCTANT-14578 +<U0001CDC5> /xf0/x9c/xb7/x85 BLOCK OCTANT-24578 +<U0001CDC6> /xf0/x9c/xb7/x86 BLOCK OCTANT-124578 +<U0001CDC7> /xf0/x9c/xb7/x87 BLOCK OCTANT-34578 +<U0001CDC8> /xf0/x9c/xb7/x88 BLOCK OCTANT-134578 +<U0001CDC9> /xf0/x9c/xb7/x89 BLOCK OCTANT-234578 +<U0001CDCA> /xf0/x9c/xb7/x8a BLOCK OCTANT-1234578 +<U0001CDCB> /xf0/x9c/xb7/x8b BLOCK OCTANT-678 +<U0001CDCC> /xf0/x9c/xb7/x8c BLOCK OCTANT-1678 +<U0001CDCD> /xf0/x9c/xb7/x8d BLOCK OCTANT-2678 +<U0001CDCE> /xf0/x9c/xb7/x8e BLOCK OCTANT-12678 +<U0001CDCF> /xf0/x9c/xb7/x8f BLOCK OCTANT-3678 +<U0001CDD0> /xf0/x9c/xb7/x90 BLOCK OCTANT-13678 +<U0001CDD1> /xf0/x9c/xb7/x91 BLOCK OCTANT-23678 +<U0001CDD2> /xf0/x9c/xb7/x92 BLOCK OCTANT-123678 +<U0001CDD3> /xf0/x9c/xb7/x93 BLOCK OCTANT-4678 +<U0001CDD4> /xf0/x9c/xb7/x94 BLOCK OCTANT-14678 +<U0001CDD5> /xf0/x9c/xb7/x95 BLOCK OCTANT-24678 +<U0001CDD6> /xf0/x9c/xb7/x96 BLOCK OCTANT-124678 +<U0001CDD7> /xf0/x9c/xb7/x97 BLOCK OCTANT-34678 +<U0001CDD8> /xf0/x9c/xb7/x98 BLOCK OCTANT-134678 +<U0001CDD9> /xf0/x9c/xb7/x99 BLOCK OCTANT-234678 +<U0001CDDA> /xf0/x9c/xb7/x9a BLOCK OCTANT-1234678 +<U0001CDDB> /xf0/x9c/xb7/x9b BLOCK OCTANT-15678 +<U0001CDDC> /xf0/x9c/xb7/x9c BLOCK OCTANT-25678 +<U0001CDDD> /xf0/x9c/xb7/x9d BLOCK OCTANT-125678 +<U0001CDDE> /xf0/x9c/xb7/x9e BLOCK OCTANT-35678 +<U0001CDDF> /xf0/x9c/xb7/x9f BLOCK OCTANT-235678 +<U0001CDE0> /xf0/x9c/xb7/xa0 BLOCK OCTANT-1235678 +<U0001CDE1> /xf0/x9c/xb7/xa1 BLOCK OCTANT-45678 +<U0001CDE2> /xf0/x9c/xb7/xa2 BLOCK OCTANT-145678 +<U0001CDE3> /xf0/x9c/xb7/xa3 BLOCK OCTANT-1245678 +<U0001CDE4> /xf0/x9c/xb7/xa4 BLOCK OCTANT-1345678 +<U0001CDE5> /xf0/x9c/xb7/xa5 BLOCK OCTANT-2345678 +<U0001CDE6> /xf0/x9c/xb7/xa6 TOP HALF STANDING PERSON +<U0001CDE7> /xf0/x9c/xb7/xa7 BOTTOM HALF STANDING PERSON +<U0001CDE8> /xf0/x9c/xb7/xa8 TOP HALF RIGHT-FACING RUNNER FRAME-1 +<U0001CDE9> /xf0/x9c/xb7/xa9 BOTTOM HALF RIGHT-FACING RUNNER FRAME-1 +<U0001CDEA> /xf0/x9c/xb7/xaa TOP HALF RIGHT-FACING RUNNER FRAME-2 +<U0001CDEB> /xf0/x9c/xb7/xab BOTTOM HALF RIGHT-FACING RUNNER FRAME-2 +<U0001CDEC> /xf0/x9c/xb7/xac TOP HALF LEFT-FACING RUNNER FRAME-1 +<U0001CDED> /xf0/x9c/xb7/xad BOTTOM HALF LEFT-FACING RUNNER FRAME-1 +<U0001CDEE> /xf0/x9c/xb7/xae TOP HALF LEFT-FACING RUNNER FRAME-2 +<U0001CDEF> /xf0/x9c/xb7/xaf BOTTOM HALF LEFT-FACING RUNNER FRAME-2 +<U0001CDF0> /xf0/x9c/xb7/xb0 TOP HALF FORWARD-FACING RUNNER +<U0001CDF1> /xf0/x9c/xb7/xb1 BOTTOM HALF FORWARD-FACING RUNNER FRAME-1 +<U0001CDF2> /xf0/x9c/xb7/xb2 BOTTOM HALF FORWARD-FACING RUNNER FRAME-2 +<U0001CDF3> /xf0/x9c/xb7/xb3 BOTTOM HALF FORWARD-FACING RUNNER FRAME-3 +<U0001CDF4> /xf0/x9c/xb7/xb4 BOTTOM HALF FORWARD-FACING RUNNER FRAME-4 +<U0001CDF5> /xf0/x9c/xb7/xb5 MOON LANDER +<U0001CDF6> /xf0/x9c/xb7/xb6 TOP HALF FLAILING ROBOT FRAME-1 +<U0001CDF7> /xf0/x9c/xb7/xb7 TOP HALF FLAILING ROBOT FRAME-2 +<U0001CDF8> /xf0/x9c/xb7/xb8 DOWN-POINTING AIRPLANE +<U0001CDF9> /xf0/x9c/xb7/xb9 LEFT-POINTING AIRPLANE +<U0001CDFA> /xf0/x9c/xb7/xba SMALL UP-POINTING AIRPLANE +<U0001CDFB> /xf0/x9c/xb7/xbb UP-POINTING FROG +<U0001CDFC> /xf0/x9c/xb7/xbc DOWN-POINTING FROG +<U0001CDFD> /xf0/x9c/xb7/xbd EXPLOSION FRAME-1 +<U0001CDFE> /xf0/x9c/xb7/xbe EXPLOSION FRAME-2 +<U0001CDFF> /xf0/x9c/xb7/xbf EXPLOSION FRAME-3 +<U0001CE00> /xf0/x9c/xb8/x80 RIGHT HALF AND LEFT HALF WHITE CIRCLE +<U0001CE01> /xf0/x9c/xb8/x81 LOWER HALF AND UPPER HALF WHITE CIRCLE +<U0001CE02> /xf0/x9c/xb8/x82 EXPLOSION AT HORIZON +<U0001CE03> /xf0/x9c/xb8/x83 UPPER HALF HEAVY WHITE SQUARE +<U0001CE04> /xf0/x9c/xb8/x84 LOWER HALF HEAVY WHITE SQUARE +<U0001CE05> /xf0/x9c/xb8/x85 HEAVY WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE +<U0001CE06> /xf0/x9c/xb8/x86 WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR +<U0001CE07> /xf0/x9c/xb8/x87 TOP LEFT BLACK LEFT-POINTING SMALL TRIANGLE +<U0001CE08> /xf0/x9c/xb8/x88 FUNNEL +<U0001CE09> /xf0/x9c/xb8/x89 BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT +<U0001CE0A> /xf0/x9c/xb8/x8a BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT +<U0001CE0B> /xf0/x9c/xb8/x8b LEFT HALF WHITE ELLIPSE +<U0001CE0C> /xf0/x9c/xb8/x8c RIGHT HALF WHITE ELLIPSE +<U0001CE0D> /xf0/x9c/xb8/x8d LEFT HALF TRIPLE DASH HORIZONTAL +<U0001CE0E> /xf0/x9c/xb8/x8e RIGHT HALF TRIPLE DASH HORIZONTAL +<U0001CE0F> /xf0/x9c/xb8/x8f HORIZONTAL LINE WITH TICK MARK +<U0001CE10> /xf0/x9c/xb8/x90 LEFT HALF HORIZONTAL LINE WITH THREE TICK MARKS +<U0001CE11> /xf0/x9c/xb8/x91 RIGHT HALF HORIZONTAL LINE WITH THREE TICK MARKS +<U0001CE12> /xf0/x9c/xb8/x92 HORIZONTAL LINE WITH THREE TICK MARKS +<U0001CE13> /xf0/x9c/xb8/x93 LOWER HALF VERTICAL LINE WITH THREE TICK MARKS +<U0001CE14> /xf0/x9c/xb8/x94 UPPER HALF VERTICAL LINE WITH THREE TICK MARKS +<U0001CE15> /xf0/x9c/xb8/x95 VERTICAL LINE WITH THREE TICK MARKS +<U0001CE16> /xf0/x9c/xb8/x96 BOX DRAWINGS LIGHT VERTICAL AND TOP RIGHT +<U0001CE17> /xf0/x9c/xb8/x97 BOX DRAWINGS LIGHT VERTICAL AND BOTTOM RIGHT +<U0001CE18> /xf0/x9c/xb8/x98 BOX DRAWINGS LIGHT VERTICAL AND TOP LEFT +<U0001CE19> /xf0/x9c/xb8/x99 BOX DRAWINGS LIGHT VERTICAL AND BOTTOM LEFT +<U0001CE1A> /xf0/x9c/xb8/x9a LARGE TYPE PIECE UPPER LEFT ARC +<U0001CE1B> /xf0/x9c/xb8/x9b LARGE TYPE PIECE UPPER LEFT CORNER +<U0001CE1C> /xf0/x9c/xb8/x9c LARGE TYPE PIECE UPPER TERMINAL +<U0001CE1D> /xf0/x9c/xb8/x9d LARGE TYPE PIECE UPPER LEFT CROTCH +<U0001CE1E> /xf0/x9c/xb8/x9e LARGE TYPE PIECE LEFT ARM +<U0001CE1F> /xf0/x9c/xb8/x9f LARGE TYPE PIECE CROSSBAR +<U0001CE20> /xf0/x9c/xb8/xa0 LARGE TYPE PIECE CROSSBAR WITH LOWER STEM +<U0001CE21> /xf0/x9c/xb8/xa1 LARGE TYPE PIECE UPPER HALF VERTEX OF M +<U0001CE22> /xf0/x9c/xb8/xa2 LARGE TYPE PIECE DIAGONAL LOWER LEFT +<U0001CE23> /xf0/x9c/xb8/xa3 LARGE TYPE PIECE SHORT UPPER TERMINAL +<U0001CE24> /xf0/x9c/xb8/xa4 LARGE TYPE PIECE UPPER RIGHT ARC +<U0001CE25> /xf0/x9c/xb8/xa5 LARGE TYPE PIECE RIGHT ARM +<U0001CE26> /xf0/x9c/xb8/xa6 LARGE TYPE PIECE UPPER RIGHT CROTCH +<U0001CE27> /xf0/x9c/xb8/xa7 LARGE TYPE PIECE UPPER RIGHT CORNER +<U0001CE28> /xf0/x9c/xb8/xa8 LARGE TYPE PIECE STEM WITH RIGHT CROSSBAR +<U0001CE29> /xf0/x9c/xb8/xa9 LARGE TYPE PIECE STEM +<U0001CE2A> /xf0/x9c/xb8/xaa LARGE TYPE PIECE DIAGONAL UPPER RIGHT AND LOWER RIGHT +<U0001CE2B> /xf0/x9c/xb8/xab LARGE TYPE PIECE DIAGONAL UPPER RIGHT +<U0001CE2C> /xf0/x9c/xb8/xac LARGE TYPE PIECE DIAGONAL LOWER RIGHT +<U0001CE2D> /xf0/x9c/xb8/xad LARGE TYPE PIECE SHORT LOWER TERMINAL +<U0001CE2E> /xf0/x9c/xb8/xae LARGE TYPE PIECE LOWER LEFT AND UPPER LEFT ARC +<U0001CE2F> /xf0/x9c/xb8/xaf LARGE TYPE PIECE CENTRE OF K +<U0001CE30> /xf0/x9c/xb8/xb0 LARGE TYPE PIECE LOWER HALF VERTEX OF M +<U0001CE31> /xf0/x9c/xb8/xb1 LARGE TYPE PIECE UPPER HALF VERTEX OF W +<U0001CE32> /xf0/x9c/xb8/xb2 LARGE TYPE PIECE CENTRE OF X +<U0001CE33> /xf0/x9c/xb8/xb3 LARGE TYPE PIECE CENTRE OF Y +<U0001CE34> /xf0/x9c/xb8/xb4 LARGE TYPE PIECE CENTRE OF Z WITH CROSSBAR +<U0001CE35> /xf0/x9c/xb8/xb5 LARGE TYPE PIECE RAISED UPPER LEFT ARC +<U0001CE36> /xf0/x9c/xb8/xb6 LARGE TYPE PIECE STEM WITH LEFT CROSSBAR +<U0001CE37> /xf0/x9c/xb8/xb7 LARGE TYPE PIECE LOWER RIGHT AND UPPER RIGHT ARC +<U0001CE38> /xf0/x9c/xb8/xb8 LARGE TYPE PIECE DIAGONAL UPPER LEFT AND LOWER LEFT +<U0001CE39> /xf0/x9c/xb8/xb9 LARGE TYPE PIECE STEM WITH LEFT JOINT +<U0001CE3A> /xf0/x9c/xb8/xba LARGE TYPE PIECE STEM WITH CROSSBAR +<U0001CE3B> /xf0/x9c/xb8/xbb LARGE TYPE PIECE DIAGONAL UPPER LEFT +<U0001CE3C> /xf0/x9c/xb8/xbc LARGE TYPE PIECE LOWER TERMINAL +<U0001CE3D> /xf0/x9c/xb8/xbd LARGE TYPE PIECE LOWER LEFT CORNER +<U0001CE3E> /xf0/x9c/xb8/xbe LARGE TYPE PIECE LOWER LEFT ARC +<U0001CE3F> /xf0/x9c/xb8/xbf LARGE TYPE PIECE LOWER LEFT CROTCH +<U0001CE40> /xf0/x9c/xb9/x80 LARGE TYPE PIECE CROSSBAR WITH UPPER STEM +<U0001CE41> /xf0/x9c/xb9/x81 LARGE TYPE PIECE VERTEX OF V +<U0001CE42> /xf0/x9c/xb9/x82 LARGE TYPE PIECE LOWER HALF VERTEX OF W +<U0001CE43> /xf0/x9c/xb9/x83 LARGE TYPE PIECE LOWER RIGHT ARC +<U0001CE44> /xf0/x9c/xb9/x84 LARGE TYPE PIECE LOWER RIGHT CORNER +<U0001CE45> /xf0/x9c/xb9/x85 LARGE TYPE PIECE LOWER RIGHT ARC WITH TAIL +<U0001CE46> /xf0/x9c/xb9/x86 LARGE TYPE PIECE LOWER RIGHT CROTCH +<U0001CE47> /xf0/x9c/xb9/x87 LARGE TYPE PIECE STEM-45 +<U0001CE48> /xf0/x9c/xb9/x88 LARGE TYPE PIECE STEM-2345 +<U0001CE49> /xf0/x9c/xb9/x89 LARGE TYPE PIECE STEM-4 +<U0001CE4A> /xf0/x9c/xb9/x8a LARGE TYPE PIECE STEM-34 +<U0001CE4B> /xf0/x9c/xb9/x8b LARGE TYPE PIECE STEM-234 +<U0001CE4C> /xf0/x9c/xb9/x8c LARGE TYPE PIECE STEM-1234 +<U0001CE4D> /xf0/x9c/xb9/x8d LARGE TYPE PIECE STEM-3 +<U0001CE4E> /xf0/x9c/xb9/x8e LARGE TYPE PIECE STEM-23 +<U0001CE4F> /xf0/x9c/xb9/x8f LARGE TYPE PIECE STEM-2 +<U0001CE50> /xf0/x9c/xb9/x90 LARGE TYPE PIECE STEM-12 +<U0001CE51> /xf0/x9c/xb9/x91 SEPARATED BLOCK SEXTANT-1 +<U0001CE52> /xf0/x9c/xb9/x92 SEPARATED BLOCK SEXTANT-2 +<U0001CE53> /xf0/x9c/xb9/x93 SEPARATED BLOCK SEXTANT-12 +<U0001CE54> /xf0/x9c/xb9/x94 SEPARATED BLOCK SEXTANT-3 +<U0001CE55> /xf0/x9c/xb9/x95 SEPARATED BLOCK SEXTANT-13 +<U0001CE56> /xf0/x9c/xb9/x96 SEPARATED BLOCK SEXTANT-23 +<U0001CE57> /xf0/x9c/xb9/x97 SEPARATED BLOCK SEXTANT-123 +<U0001CE58> /xf0/x9c/xb9/x98 SEPARATED BLOCK SEXTANT-4 +<U0001CE59> /xf0/x9c/xb9/x99 SEPARATED BLOCK SEXTANT-14 +<U0001CE5A> /xf0/x9c/xb9/x9a SEPARATED BLOCK SEXTANT-24 +<U0001CE5B> /xf0/x9c/xb9/x9b SEPARATED BLOCK SEXTANT-124 +<U0001CE5C> /xf0/x9c/xb9/x9c SEPARATED BLOCK SEXTANT-34 +<U0001CE5D> /xf0/x9c/xb9/x9d SEPARATED BLOCK SEXTANT-134 +<U0001CE5E> /xf0/x9c/xb9/x9e SEPARATED BLOCK SEXTANT-234 +<U0001CE5F> /xf0/x9c/xb9/x9f SEPARATED BLOCK SEXTANT-1234 +<U0001CE60> /xf0/x9c/xb9/xa0 SEPARATED BLOCK SEXTANT-5 +<U0001CE61> /xf0/x9c/xb9/xa1 SEPARATED BLOCK SEXTANT-15 +<U0001CE62> /xf0/x9c/xb9/xa2 SEPARATED BLOCK SEXTANT-25 +<U0001CE63> /xf0/x9c/xb9/xa3 SEPARATED BLOCK SEXTANT-125 +<U0001CE64> /xf0/x9c/xb9/xa4 SEPARATED BLOCK SEXTANT-35 +<U0001CE65> /xf0/x9c/xb9/xa5 SEPARATED BLOCK SEXTANT-135 +<U0001CE66> /xf0/x9c/xb9/xa6 SEPARATED BLOCK SEXTANT-235 +<U0001CE67> /xf0/x9c/xb9/xa7 SEPARATED BLOCK SEXTANT-1235 +<U0001CE68> /xf0/x9c/xb9/xa8 SEPARATED BLOCK SEXTANT-45 +<U0001CE69> /xf0/x9c/xb9/xa9 SEPARATED BLOCK SEXTANT-145 +<U0001CE6A> /xf0/x9c/xb9/xaa SEPARATED BLOCK SEXTANT-245 +<U0001CE6B> /xf0/x9c/xb9/xab SEPARATED BLOCK SEXTANT-1245 +<U0001CE6C> /xf0/x9c/xb9/xac SEPARATED BLOCK SEXTANT-345 +<U0001CE6D> /xf0/x9c/xb9/xad SEPARATED BLOCK SEXTANT-1345 +<U0001CE6E> /xf0/x9c/xb9/xae SEPARATED BLOCK SEXTANT-2345 +<U0001CE6F> /xf0/x9c/xb9/xaf SEPARATED BLOCK SEXTANT-12345 +<U0001CE70> /xf0/x9c/xb9/xb0 SEPARATED BLOCK SEXTANT-6 +<U0001CE71> /xf0/x9c/xb9/xb1 SEPARATED BLOCK SEXTANT-16 +<U0001CE72> /xf0/x9c/xb9/xb2 SEPARATED BLOCK SEXTANT-26 +<U0001CE73> /xf0/x9c/xb9/xb3 SEPARATED BLOCK SEXTANT-126 +<U0001CE74> /xf0/x9c/xb9/xb4 SEPARATED BLOCK SEXTANT-36 +<U0001CE75> /xf0/x9c/xb9/xb5 SEPARATED BLOCK SEXTANT-136 +<U0001CE76> /xf0/x9c/xb9/xb6 SEPARATED BLOCK SEXTANT-236 +<U0001CE77> /xf0/x9c/xb9/xb7 SEPARATED BLOCK SEXTANT-1236 +<U0001CE78> /xf0/x9c/xb9/xb8 SEPARATED BLOCK SEXTANT-46 +<U0001CE79> /xf0/x9c/xb9/xb9 SEPARATED BLOCK SEXTANT-146 +<U0001CE7A> /xf0/x9c/xb9/xba SEPARATED BLOCK SEXTANT-246 +<U0001CE7B> /xf0/x9c/xb9/xbb SEPARATED BLOCK SEXTANT-1246 +<U0001CE7C> /xf0/x9c/xb9/xbc SEPARATED BLOCK SEXTANT-346 +<U0001CE7D> /xf0/x9c/xb9/xbd SEPARATED BLOCK SEXTANT-1346 +<U0001CE7E> /xf0/x9c/xb9/xbe SEPARATED BLOCK SEXTANT-2346 +<U0001CE7F> /xf0/x9c/xb9/xbf SEPARATED BLOCK SEXTANT-12346 +<U0001CE80> /xf0/x9c/xba/x80 SEPARATED BLOCK SEXTANT-56 +<U0001CE81> /xf0/x9c/xba/x81 SEPARATED BLOCK SEXTANT-156 +<U0001CE82> /xf0/x9c/xba/x82 SEPARATED BLOCK SEXTANT-256 +<U0001CE83> /xf0/x9c/xba/x83 SEPARATED BLOCK SEXTANT-1256 +<U0001CE84> /xf0/x9c/xba/x84 SEPARATED BLOCK SEXTANT-356 +<U0001CE85> /xf0/x9c/xba/x85 SEPARATED BLOCK SEXTANT-1356 +<U0001CE86> /xf0/x9c/xba/x86 SEPARATED BLOCK SEXTANT-2356 +<U0001CE87> /xf0/x9c/xba/x87 SEPARATED BLOCK SEXTANT-12356 +<U0001CE88> /xf0/x9c/xba/x88 SEPARATED BLOCK SEXTANT-456 +<U0001CE89> /xf0/x9c/xba/x89 SEPARATED BLOCK SEXTANT-1456 +<U0001CE8A> /xf0/x9c/xba/x8a SEPARATED BLOCK SEXTANT-2456 +<U0001CE8B> /xf0/x9c/xba/x8b SEPARATED BLOCK SEXTANT-12456 +<U0001CE8C> /xf0/x9c/xba/x8c SEPARATED BLOCK SEXTANT-3456 +<U0001CE8D> /xf0/x9c/xba/x8d SEPARATED BLOCK SEXTANT-13456 +<U0001CE8E> /xf0/x9c/xba/x8e SEPARATED BLOCK SEXTANT-23456 +<U0001CE8F> /xf0/x9c/xba/x8f SEPARATED BLOCK SEXTANT-123456 +<U0001CE90> /xf0/x9c/xba/x90 UPPER LEFT ONE SIXTEENTH BLOCK +<U0001CE91> /xf0/x9c/xba/x91 UPPER CENTRE LEFT ONE SIXTEENTH BLOCK +<U0001CE92> /xf0/x9c/xba/x92 UPPER CENTRE RIGHT ONE SIXTEENTH BLOCK +<U0001CE93> /xf0/x9c/xba/x93 UPPER RIGHT ONE SIXTEENTH BLOCK +<U0001CE94> /xf0/x9c/xba/x94 UPPER MIDDLE LEFT ONE SIXTEENTH BLOCK +<U0001CE95> /xf0/x9c/xba/x95 UPPER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK +<U0001CE96> /xf0/x9c/xba/x96 UPPER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK +<U0001CE97> /xf0/x9c/xba/x97 UPPER MIDDLE RIGHT ONE SIXTEENTH BLOCK +<U0001CE98> /xf0/x9c/xba/x98 LOWER MIDDLE LEFT ONE SIXTEENTH BLOCK +<U0001CE99> /xf0/x9c/xba/x99 LOWER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK +<U0001CE9A> /xf0/x9c/xba/x9a LOWER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK +<U0001CE9B> /xf0/x9c/xba/x9b LOWER MIDDLE RIGHT ONE SIXTEENTH BLOCK +<U0001CE9C> /xf0/x9c/xba/x9c LOWER LEFT ONE SIXTEENTH BLOCK +<U0001CE9D> /xf0/x9c/xba/x9d LOWER CENTRE LEFT ONE SIXTEENTH BLOCK +<U0001CE9E> /xf0/x9c/xba/x9e LOWER CENTRE RIGHT ONE SIXTEENTH BLOCK +<U0001CE9F> /xf0/x9c/xba/x9f LOWER RIGHT ONE SIXTEENTH BLOCK +<U0001CEA0> /xf0/x9c/xba/xa0 RIGHT HALF LOWER ONE QUARTER BLOCK +<U0001CEA1> /xf0/x9c/xba/xa1 RIGHT THREE QUARTERS LOWER ONE QUARTER BLOCK +<U0001CEA2> /xf0/x9c/xba/xa2 LEFT THREE QUARTERS LOWER ONE QUARTER BLOCK +<U0001CEA3> /xf0/x9c/xba/xa3 LEFT HALF LOWER ONE QUARTER BLOCK +<U0001CEA4> /xf0/x9c/xba/xa4 LOWER HALF LEFT ONE QUARTER BLOCK +<U0001CEA5> /xf0/x9c/xba/xa5 LOWER THREE QUARTERS LEFT ONE QUARTER BLOCK +<U0001CEA6> /xf0/x9c/xba/xa6 UPPER THREE QUARTERS LEFT ONE QUARTER BLOCK +<U0001CEA7> /xf0/x9c/xba/xa7 UPPER HALF LEFT ONE QUARTER BLOCK +<U0001CEA8> /xf0/x9c/xba/xa8 LEFT HALF UPPER ONE QUARTER BLOCK +<U0001CEA9> /xf0/x9c/xba/xa9 LEFT THREE QUARTERS UPPER ONE QUARTER BLOCK +<U0001CEAA> /xf0/x9c/xba/xaa RIGHT THREE QUARTERS UPPER ONE QUARTER BLOCK +<U0001CEAB> /xf0/x9c/xba/xab RIGHT HALF UPPER ONE QUARTER BLOCK +<U0001CEAC> /xf0/x9c/xba/xac UPPER HALF RIGHT ONE QUARTER BLOCK +<U0001CEAD> /xf0/x9c/xba/xad UPPER THREE QUARTERS RIGHT ONE QUARTER BLOCK +<U0001CEAE> /xf0/x9c/xba/xae LOWER THREE QUARTERS RIGHT ONE QUARTER BLOCK +<U0001CEAF> /xf0/x9c/xba/xaf LOWER HALF RIGHT ONE QUARTER BLOCK +<U0001CEB0> /xf0/x9c/xba/xb0 HORIZONTAL ZIGZAG LINE +<U0001CEB1> /xf0/x9c/xba/xb1 KEYHOLE +<U0001CEB2> /xf0/x9c/xba/xb2 OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION +<U0001CEB3> /xf0/x9c/xba/xb3 BLACK RIGHT TRIANGLE CARET <U0001CF00> /xf0/x9c/xbc/x80 ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT <U0001CF01> /xf0/x9c/xbc/x81 ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT <U0001CF02> /xf0/x9c/xbc/x82 ZNAMENNY COMBINING MARK TSATA ON LEFT @@ -42672,6 +47757,50 @@ CHARMAP <U0001E4F7> /xf0/x9e/x93/xb7 NAG MUNDARI DIGIT SEVEN <U0001E4F8> /xf0/x9e/x93/xb8 NAG MUNDARI DIGIT EIGHT <U0001E4F9> /xf0/x9e/x93/xb9 NAG MUNDARI DIGIT NINE +<U0001E5D0> /xf0/x9e/x97/x90 OL ONAL LETTER O +<U0001E5D1> /xf0/x9e/x97/x91 OL ONAL LETTER OM +<U0001E5D2> /xf0/x9e/x97/x92 OL ONAL LETTER ONG +<U0001E5D3> /xf0/x9e/x97/x93 OL ONAL LETTER ORR +<U0001E5D4> /xf0/x9e/x97/x94 OL ONAL LETTER OO +<U0001E5D5> /xf0/x9e/x97/x95 OL ONAL LETTER OY +<U0001E5D6> /xf0/x9e/x97/x96 OL ONAL LETTER A +<U0001E5D7> /xf0/x9e/x97/x97 OL ONAL LETTER AD +<U0001E5D8> /xf0/x9e/x97/x98 OL ONAL LETTER AB +<U0001E5D9> /xf0/x9e/x97/x99 OL ONAL LETTER AH +<U0001E5DA> /xf0/x9e/x97/x9a OL ONAL LETTER AL +<U0001E5DB> /xf0/x9e/x97/x9b OL ONAL LETTER AW +<U0001E5DC> /xf0/x9e/x97/x9c OL ONAL LETTER I +<U0001E5DD> /xf0/x9e/x97/x9d OL ONAL LETTER IT +<U0001E5DE> /xf0/x9e/x97/x9e OL ONAL LETTER IP +<U0001E5DF> /xf0/x9e/x97/x9f OL ONAL LETTER ITT +<U0001E5E0> /xf0/x9e/x97/xa0 OL ONAL LETTER ID +<U0001E5E1> /xf0/x9e/x97/xa1 OL ONAL LETTER IN +<U0001E5E2> /xf0/x9e/x97/xa2 OL ONAL LETTER U +<U0001E5E3> /xf0/x9e/x97/xa3 OL ONAL LETTER UK +<U0001E5E4> /xf0/x9e/x97/xa4 OL ONAL LETTER UDD +<U0001E5E5> /xf0/x9e/x97/xa5 OL ONAL LETTER UJ +<U0001E5E6> /xf0/x9e/x97/xa6 OL ONAL LETTER UNY +<U0001E5E7> /xf0/x9e/x97/xa7 OL ONAL LETTER UR +<U0001E5E8> /xf0/x9e/x97/xa8 OL ONAL LETTER E +<U0001E5E9> /xf0/x9e/x97/xa9 OL ONAL LETTER ES +<U0001E5EA> /xf0/x9e/x97/xaa OL ONAL LETTER EH +<U0001E5EB> /xf0/x9e/x97/xab OL ONAL LETTER EC +<U0001E5EC> /xf0/x9e/x97/xac OL ONAL LETTER ENN +<U0001E5ED> /xf0/x9e/x97/xad OL ONAL LETTER EG +<U0001E5EE> /xf0/x9e/x97/xae OL ONAL SIGN MU +<U0001E5EF> /xf0/x9e/x97/xaf OL ONAL SIGN IKIR +<U0001E5F0> /xf0/x9e/x97/xb0 OL ONAL SIGN HODDOND +<U0001E5F1> /xf0/x9e/x97/xb1 OL ONAL DIGIT ZERO +<U0001E5F2> /xf0/x9e/x97/xb2 OL ONAL DIGIT ONE +<U0001E5F3> /xf0/x9e/x97/xb3 OL ONAL DIGIT TWO +<U0001E5F4> /xf0/x9e/x97/xb4 OL ONAL DIGIT THREE +<U0001E5F5> /xf0/x9e/x97/xb5 OL ONAL DIGIT FOUR +<U0001E5F6> /xf0/x9e/x97/xb6 OL ONAL DIGIT FIVE +<U0001E5F7> /xf0/x9e/x97/xb7 OL ONAL DIGIT SIX +<U0001E5F8> /xf0/x9e/x97/xb8 OL ONAL DIGIT SEVEN +<U0001E5F9> /xf0/x9e/x97/xb9 OL ONAL DIGIT EIGHT +<U0001E5FA> /xf0/x9e/x97/xba OL ONAL DIGIT NINE +<U0001E5FF> /xf0/x9e/x97/xbf OL ONAL ABBREVIATION SIGN <U0001E7E0> /xf0/x9e/x9f/xa0 ETHIOPIC SYLLABLE HHYA <U0001E7E1> /xf0/x9e/x9f/xa1 ETHIOPIC SYLLABLE HHYU <U0001E7E2> /xf0/x9e/x9f/xa2 ETHIOPIC SYLLABLE HHYI @@ -45154,6 +50283,18 @@ CHARMAP <U0001F8AD> /xf0/x9f/xa2/xad WHITE ARROW SHAFT WIDTH TWO THIRDS <U0001F8B0> /xf0/x9f/xa2/xb0 ARROW POINTING UPWARDS THEN NORTH WEST <U0001F8B1> /xf0/x9f/xa2/xb1 ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST +<U0001F8B2> /xf0/x9f/xa2/xb2 RIGHTWARDS ARROW WITH LOWER HOOK +<U0001F8B3> /xf0/x9f/xa2/xb3 DOWNWARDS BLACK ARROW TO BAR +<U0001F8B4> /xf0/x9f/xa2/xb4 NEGATIVE SQUARED LEFTWARDS ARROW +<U0001F8B5> /xf0/x9f/xa2/xb5 NEGATIVE SQUARED UPWARDS ARROW +<U0001F8B6> /xf0/x9f/xa2/xb6 NEGATIVE SQUARED RIGHTWARDS ARROW +<U0001F8B7> /xf0/x9f/xa2/xb7 NEGATIVE SQUARED DOWNWARDS ARROW +<U0001F8B8> /xf0/x9f/xa2/xb8 NORTH WEST ARROW FROM BAR +<U0001F8B9> /xf0/x9f/xa2/xb9 NORTH EAST ARROW FROM BAR +<U0001F8BA> /xf0/x9f/xa2/xba SOUTH EAST ARROW FROM BAR +<U0001F8BB> /xf0/x9f/xa2/xbb SOUTH WEST ARROW FROM BAR +<U0001F8C0> /xf0/x9f/xa3/x80 LEFTWARDS ARROW FROM DOWNWARDS ARROW +<U0001F8C1> /xf0/x9f/xa3/x81 RIGHTWARDS ARROW FROM DOWNWARDS ARROW <U0001F900> /xf0/x9f/xa4/x80 CIRCLED CROSS FORMEE WITH FOUR DOTS <U0001F901> /xf0/x9f/xa4/x81 CIRCLED CROSS FORMEE WITH TWO DOTS <U0001F902> /xf0/x9f/xa4/x82 CIRCLED CROSS FORMEE @@ -45530,6 +50671,8 @@ CHARMAP <U0001FA86> /xf0/x9f/xaa/x86 NESTING DOLLS <U0001FA87> /xf0/x9f/xaa/x87 MARACAS <U0001FA88> /xf0/x9f/xaa/x88 FLUTE +<U0001FA89> /xf0/x9f/xaa/x89 HARP +<U0001FA8F> /xf0/x9f/xaa/x8f SHOVEL <U0001FA90> /xf0/x9f/xaa/x90 RINGED PLANET <U0001FA91> /xf0/x9f/xaa/x91 CHAIR <U0001FA92> /xf0/x9f/xaa/x92 RAZOR @@ -45576,6 +50719,7 @@ CHARMAP <U0001FABB> /xf0/x9f/xaa/xbb HYACINTH <U0001FABC> /xf0/x9f/xaa/xbc JELLYFISH <U0001FABD> /xf0/x9f/xaa/xbd WING +<U0001FABE> /xf0/x9f/xaa/xbe LEAFLESS TREE <U0001FABF> /xf0/x9f/xaa/xbf GOOSE <U0001FAC0> /xf0/x9f/xab/x80 ANATOMICAL HEART <U0001FAC1> /xf0/x9f/xab/x81 LUNGS @@ -45583,6 +50727,7 @@ CHARMAP <U0001FAC3> /xf0/x9f/xab/x83 PREGNANT MAN <U0001FAC4> /xf0/x9f/xab/x84 PREGNANT PERSON <U0001FAC5> /xf0/x9f/xab/x85 PERSON WITH CROWN +<U0001FAC6> /xf0/x9f/xab/x86 FINGERPRINT <U0001FACE> /xf0/x9f/xab/x8e MOOSE <U0001FACF> /xf0/x9f/xab/x8f DONKEY <U0001FAD0> /xf0/x9f/xab/x90 BLUEBERRIES @@ -45597,6 +50742,8 @@ CHARMAP <U0001FAD9> /xf0/x9f/xab/x99 JAR <U0001FADA> /xf0/x9f/xab/x9a GINGER ROOT <U0001FADB> /xf0/x9f/xab/x9b PEA POD +<U0001FADC> /xf0/x9f/xab/x9c ROOT VEGETABLE +<U0001FADF> /xf0/x9f/xab/x9f SPLATTER <U0001FAE0> /xf0/x9f/xab/xa0 MELTING FACE <U0001FAE1> /xf0/x9f/xab/xa1 SALUTING FACE <U0001FAE2> /xf0/x9f/xab/xa2 FACE WITH OPEN EYES AND HAND OVER MOUTH @@ -45606,6 +50753,7 @@ CHARMAP <U0001FAE6> /xf0/x9f/xab/xa6 BITING LIP <U0001FAE7> /xf0/x9f/xab/xa7 BUBBLES <U0001FAE8> /xf0/x9f/xab/xa8 SHAKING FACE +<U0001FAE9> /xf0/x9f/xab/xa9 FACE WITH BAGS UNDER EYES <U0001FAF0> /xf0/x9f/xab/xb0 HAND WITH INDEX FINGER AND THUMB CROSSED <U0001FAF1> /xf0/x9f/xab/xb1 RIGHTWARDS HAND <U0001FAF2> /xf0/x9f/xab/xb2 LEFTWARDS HAND @@ -45817,6 +50965,43 @@ CHARMAP <U0001FBC8> /xf0/x9f/xaf/x88 STICK FIGURE LEANING RIGHT <U0001FBC9> /xf0/x9f/xaf/x89 STICK FIGURE WITH DRESS <U0001FBCA> /xf0/x9f/xaf/x8a WHITE UP-POINTING CHEVRON +<U0001FBCB> /xf0/x9f/xaf/x8b WHITE CROSS MARK +<U0001FBCC> /xf0/x9f/xaf/x8c RAISED SMALL LEFT SQUARE BRACKET +<U0001FBCD> /xf0/x9f/xaf/x8d BLACK SMALL UP-POINTING CHEVRON +<U0001FBCE> /xf0/x9f/xaf/x8e LEFT TWO THIRDS BLOCK +<U0001FBCF> /xf0/x9f/xaf/x8f LEFT ONE THIRD BLOCK +<U0001FBD0> /xf0/x9f/xaf/x90 BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT +<U0001FBD1> /xf0/x9f/xaf/x91 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT +<U0001FBD2> /xf0/x9f/xaf/x92 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT +<U0001FBD3> /xf0/x9f/xaf/x93 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT +<U0001FBD4> /xf0/x9f/xaf/x94 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE +<U0001FBD5> /xf0/x9f/xaf/x95 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT +<U0001FBD6> /xf0/x9f/xaf/x96 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE +<U0001FBD7> /xf0/x9f/xaf/x97 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT +<U0001FBD8> /xf0/x9f/xaf/x98 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT +<U0001FBD9> /xf0/x9f/xaf/x99 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT +<U0001FBDA> /xf0/x9f/xaf/x9a BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT +<U0001FBDB> /xf0/x9f/xaf/x9b BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT +<U0001FBDC> /xf0/x9f/xaf/x9c BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT +<U0001FBDD> /xf0/x9f/xaf/x9d BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT +<U0001FBDE> /xf0/x9f/xaf/x9e BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT +<U0001FBDF> /xf0/x9f/xaf/x9f BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT +<U0001FBE0> /xf0/x9f/xaf/xa0 TOP JUSTIFIED LOWER HALF WHITE CIRCLE +<U0001FBE1> /xf0/x9f/xaf/xa1 RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE +<U0001FBE2> /xf0/x9f/xaf/xa2 BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE +<U0001FBE3> /xf0/x9f/xaf/xa3 LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE +<U0001FBE4> /xf0/x9f/xaf/xa4 UPPER CENTRE ONE QUARTER BLOCK +<U0001FBE5> /xf0/x9f/xaf/xa5 LOWER CENTRE ONE QUARTER BLOCK +<U0001FBE6> /xf0/x9f/xaf/xa6 MIDDLE LEFT ONE QUARTER BLOCK +<U0001FBE7> /xf0/x9f/xaf/xa7 MIDDLE RIGHT ONE QUARTER BLOCK +<U0001FBE8> /xf0/x9f/xaf/xa8 TOP JUSTIFIED LOWER HALF BLACK CIRCLE +<U0001FBE9> /xf0/x9f/xaf/xa9 RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE +<U0001FBEA> /xf0/x9f/xaf/xaa BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE +<U0001FBEB> /xf0/x9f/xaf/xab LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE +<U0001FBEC> /xf0/x9f/xaf/xac TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE +<U0001FBED> /xf0/x9f/xaf/xad BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE +<U0001FBEE> /xf0/x9f/xaf/xae BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE +<U0001FBEF> /xf0/x9f/xaf/xaf TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE <U0001FBF0> /xf0/x9f/xaf/xb0 SEGMENTED DIGIT ZERO <U0001FBF1> /xf0/x9f/xaf/xb1 SEGMENTED DIGIT ONE <U0001FBF2> /xf0/x9f/xaf/xb2 SEGMENTED DIGIT TWO @@ -49855,7 +55040,7 @@ CHARMAP <U0010FFC0>..<U0010FFFD> /xf4/x8f/xbf/x80 <Plane 16 Private Use> END CHARMAP -% Character width according to Unicode 15.1.0. +% Character width according to Unicode 16.0.0. % Width is determined by the following rules, in order of decreasing precedence: % - U+00AD SOFT HYPHEN has width 1, as a special case for compatibility (https://archive.is/b5Ck). % - U+115F HANGUL CHOSEONG FILLER has width 2. @@ -49903,7 +55088,7 @@ WIDTH <U0825>...<U0827> 0 <U0829>...<U082D> 0 <U0859>...<U085B> 0 -<U0898>...<U089F> 0 +<U0897>...<U089F> 0 <U08CA>...<U08E1> 0 <U08E3>...<U0902> 0 <U093A> 0 @@ -50057,8 +55242,10 @@ WIDTH <U23F3> 2 <U25FD>...<U25FE> 2 <U2614>...<U2615> 2 +<U2630>...<U2637> 2 <U2648>...<U2653> 2 <U267F> 2 +<U268A>...<U268F> 2 <U2693> 2 <U26A1> 2 <U26AA>...<U26AB> 2 @@ -50100,7 +55287,7 @@ WIDTH <U3131>...<U3163> 2 <U3164> 0 <U3165>...<U318E> 2 -<U3190>...<U31E3> 2 +<U3190>...<U31E5> 2 <U31EF>...<U321E> 2 <U3220>...<UA48C> 2 <UA490>...<UA4C6> 2 @@ -50166,8 +55353,9 @@ WIDTH <U00010A3F> 0 <U00010AE5>...<U00010AE6> 0 <U00010D24>...<U00010D27> 0 +<U00010D69>...<U00010D6D> 0 <U00010EAB>...<U00010EAC> 0 -<U00010EFD>...<U00010EFF> 0 +<U00010EFC>...<U00010EFF> 0 <U00010F46>...<U00010F50> 0 <U00010F82>...<U00010F85> 0 <U00011001> 0 @@ -50198,6 +55386,11 @@ WIDTH <U00011340> 0 <U00011366>...<U0001136C> 0 <U00011370>...<U00011374> 0 +<U000113BB>...<U000113C0> 0 +<U000113CE> 0 +<U000113D0> 0 +<U000113D2> 0 +<U000113E1>...<U000113E2> 0 <U00011438>...<U0001143F> 0 <U00011442>...<U00011444> 0 <U00011446> 0 @@ -50217,7 +55410,8 @@ WIDTH <U000116AD> 0 <U000116B0>...<U000116B5> 0 <U000116B7> 0 -<U0001171D>...<U0001171F> 0 +<U0001171D> 0 +<U0001171F> 0 <U00011722>...<U00011725> 0 <U00011727>...<U0001172B> 0 <U0001182F>...<U00011837> 0 @@ -50256,8 +55450,11 @@ WIDTH <U00011F36>...<U00011F3A> 0 <U00011F40> 0 <U00011F42> 0 +<U00011F5A> 0 <U00013440> 0 <U00013447>...<U00013455> 0 +<U0001611E>...<U00016129> 0 +<U0001612D>...<U0001612F> 0 <U00016AF0>...<U00016AF4> 0 <U00016B30>...<U00016B36> 0 <U00016F4F> 0 @@ -50267,7 +55464,7 @@ WIDTH <U00016FF0>...<U00016FF1> 2 <U00017000>...<U000187F7> 2 <U00018800>...<U00018CD5> 2 -<U00018D00>...<U00018D08> 2 +<U00018CFF>...<U00018D08> 2 <U0001AFF0>...<U0001AFF3> 2 <U0001AFF5>...<U0001AFFB> 2 <U0001AFFD>...<U0001AFFE> 2 @@ -50286,6 +55483,8 @@ WIDTH <U0001D185>...<U0001D18B> 0 <U0001D1AA>...<U0001D1AD> 0 <U0001D242>...<U0001D244> 0 +<U0001D300>...<U0001D356> 2 +<U0001D360>...<U0001D376> 2 <U0001DA00>...<U0001DA36> 0 <U0001DA3B>...<U0001DA6C> 0 <U0001DA75> 0 @@ -50302,6 +55501,7 @@ WIDTH <U0001E2AE> 0 <U0001E2EC>...<U0001E2EF> 0 <U0001E4EC>...<U0001E4EF> 0 +<U0001E5EE>...<U0001E5EF> 0 <U0001E8D0>...<U0001E8D6> 0 <U0001E944>...<U0001E94A> 0 <U0001F004> 2 @@ -50344,11 +55544,10 @@ WIDTH <U0001F93C>...<U0001F945> 2 <U0001F947>...<U0001F9FF> 2 <U0001FA70>...<U0001FA7C> 2 -<U0001FA80>...<U0001FA88> 2 -<U0001FA90>...<U0001FABD> 2 -<U0001FABF>...<U0001FAC5> 2 -<U0001FACE>...<U0001FADB> 2 -<U0001FAE0>...<U0001FAE8> 2 +<U0001FA80>...<U0001FA89> 2 +<U0001FA8F>...<U0001FAC6> 2 +<U0001FACE>...<U0001FADC> 2 +<U0001FADF>...<U0001FAE9> 2 <U0001FAF0>...<U0001FAF8> 2 <U00020000>...<U0002A6DF> 2 <U0002A700>...<U0002B739> 2 diff --git a/localedata/locales/i18n_ctype b/localedata/locales/i18n_ctype index f86855c6c6..048d6c7d2c 100644 --- a/localedata/locales/i18n_ctype +++ b/localedata/locales/i18n_ctype @@ -26,13 +26,13 @@ fax "" language "" territory "Earth" revision "14.0.0" -date "2023-09-15" +date "2024-09-12" category "i18n:2012";LC_CTYPE END LC_IDENTIFICATION LC_CTYPE % The following is the 14652 i18n fdcc-set LC_CTYPE category. -% It covers Unicode version 15.1.0. +% It covers Unicode version 16.0.0. % The character classes and mapping tables were automatically % generated using the gen_unicode_ctype.py program. @@ -74,21 +74,21 @@ upper / <U0508>;<U050A>;<U050C>;<U050E>;<U0510>;<U0512>;<U0514>;<U0516>;<U0518>;/ <U051A>;<U051C>;<U051E>;<U0520>;<U0522>;<U0524>;<U0526>;<U0528>;<U052A>;/ <U052C>;<U052E>;<U0531>..<U0556>;<U10A0>..<U10C5>;<U10C7>;<U10CD>;/ - <U13A0>..<U13F5>;<U1C90>..<U1CBA>;<U1CBD>..<U1CBF>;<U1E00>;<U1E02>;/ - <U1E04>;<U1E06>;<U1E08>;<U1E0A>;<U1E0C>;<U1E0E>;<U1E10>;<U1E12>;<U1E14>;/ - <U1E16>;<U1E18>;<U1E1A>;<U1E1C>;<U1E1E>;<U1E20>;<U1E22>;<U1E24>;<U1E26>;/ - <U1E28>;<U1E2A>;<U1E2C>;<U1E2E>;<U1E30>;<U1E32>;<U1E34>;<U1E36>;<U1E38>;/ - <U1E3A>;<U1E3C>;<U1E3E>;<U1E40>;<U1E42>;<U1E44>;<U1E46>;<U1E48>;<U1E4A>;/ - <U1E4C>;<U1E4E>;<U1E50>;<U1E52>;<U1E54>;<U1E56>;<U1E58>;<U1E5A>;<U1E5C>;/ - <U1E5E>;<U1E60>;<U1E62>;<U1E64>;<U1E66>;<U1E68>;<U1E6A>;<U1E6C>;<U1E6E>;/ - <U1E70>;<U1E72>;<U1E74>;<U1E76>;<U1E78>;<U1E7A>;<U1E7C>;<U1E7E>;<U1E80>;/ - <U1E82>;<U1E84>;<U1E86>;<U1E88>;<U1E8A>;<U1E8C>;<U1E8E>;<U1E90>;<U1E92>;/ - <U1E94>;<U1E9E>;<U1EA0>;<U1EA2>;<U1EA4>;<U1EA6>;<U1EA8>;<U1EAA>;<U1EAC>;/ - <U1EAE>;<U1EB0>;<U1EB2>;<U1EB4>;<U1EB6>;<U1EB8>;<U1EBA>;<U1EBC>;<U1EBE>;/ - <U1EC0>;<U1EC2>;<U1EC4>;<U1EC6>;<U1EC8>;<U1ECA>;<U1ECC>;<U1ECE>;<U1ED0>;/ - <U1ED2>;<U1ED4>;<U1ED6>;<U1ED8>;<U1EDA>;<U1EDC>;<U1EDE>;<U1EE0>;<U1EE2>;/ - <U1EE4>;<U1EE6>;<U1EE8>;<U1EEA>;<U1EEC>;<U1EEE>;<U1EF0>;<U1EF2>;<U1EF4>;/ - <U1EF6>;<U1EF8>;<U1EFA>;<U1EFC>;<U1EFE>;<U1F08>..<U1F0F>;/ + <U13A0>..<U13F5>;<U1C89>;<U1C90>..<U1CBA>;<U1CBD>..<U1CBF>;<U1E00>;/ + <U1E02>;<U1E04>;<U1E06>;<U1E08>;<U1E0A>;<U1E0C>;<U1E0E>;<U1E10>;<U1E12>;/ + <U1E14>;<U1E16>;<U1E18>;<U1E1A>;<U1E1C>;<U1E1E>;<U1E20>;<U1E22>;<U1E24>;/ + <U1E26>;<U1E28>;<U1E2A>;<U1E2C>;<U1E2E>;<U1E30>;<U1E32>;<U1E34>;<U1E36>;/ + <U1E38>;<U1E3A>;<U1E3C>;<U1E3E>;<U1E40>;<U1E42>;<U1E44>;<U1E46>;<U1E48>;/ + <U1E4A>;<U1E4C>;<U1E4E>;<U1E50>;<U1E52>;<U1E54>;<U1E56>;<U1E58>;<U1E5A>;/ + <U1E5C>;<U1E5E>;<U1E60>;<U1E62>;<U1E64>;<U1E66>;<U1E68>;<U1E6A>;<U1E6C>;/ + <U1E6E>;<U1E70>;<U1E72>;<U1E74>;<U1E76>;<U1E78>;<U1E7A>;<U1E7C>;<U1E7E>;/ + <U1E80>;<U1E82>;<U1E84>;<U1E86>;<U1E88>;<U1E8A>;<U1E8C>;<U1E8E>;<U1E90>;/ + <U1E92>;<U1E94>;<U1E9E>;<U1EA0>;<U1EA2>;<U1EA4>;<U1EA6>;<U1EA8>;<U1EAA>;/ + <U1EAC>;<U1EAE>;<U1EB0>;<U1EB2>;<U1EB4>;<U1EB6>;<U1EB8>;<U1EBA>;<U1EBC>;/ + <U1EBE>;<U1EC0>;<U1EC2>;<U1EC4>;<U1EC6>;<U1EC8>;<U1ECA>;<U1ECC>;<U1ECE>;/ + <U1ED0>;<U1ED2>;<U1ED4>;<U1ED6>;<U1ED8>;<U1EDA>;<U1EDC>;<U1EDE>;<U1EE0>;/ + <U1EE2>;<U1EE4>;<U1EE6>;<U1EE8>;<U1EEA>;<U1EEC>;<U1EEE>;<U1EF0>;<U1EF2>;/ + <U1EF4>;<U1EF6>;<U1EF8>;<U1EFA>;<U1EFC>;<U1EFE>;<U1F08>..<U1F0F>;/ <U1F18>..<U1F1D>;<U1F28>..<U1F2F>;<U1F38>..<U1F3F>;<U1F48>..<U1F4D>;/ <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>;<U1F68>..<U1F6F>;<U1F88>..<U1F8F>;/ <U1F98>..<U1F9F>;<U1FA8>..<U1FAF>;<U1FB8>..<U1FBC>;<U1FC8>..<U1FCC>;/ @@ -115,11 +115,12 @@ upper / <UA780>;<UA782>;<UA784>;<UA786>;<UA78B>;<UA78D>;<UA790>;<UA792>;<UA796>;/ <UA798>;<UA79A>;<UA79C>;<UA79E>;<UA7A0>;<UA7A2>;<UA7A4>;<UA7A6>;<UA7A8>;/ <UA7AA>..<UA7AE>;<UA7B0>..<UA7B4>;<UA7B6>;<UA7B8>;<UA7BA>;<UA7BC>;/ - <UA7BE>;<UA7C0>;<UA7C2>;<UA7C4>..<UA7C7>;<UA7C9>;<UA7D0>;<UA7D6>;<UA7D8>;/ - <UA7F5>;<UFF21>..<UFF3A>;<U00010400>..<U00010427>;/ - <U000104B0>..<U000104D3>;<U00010570>..<U0001057A>;/ - <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ - <U00010594>..<U00010595>;<U00010C80>..<U00010CB2>;/ + <UA7BE>;<UA7C0>;<UA7C2>;<UA7C4>..<UA7C7>;<UA7C9>;<UA7CB>..<UA7CC>;/ + <UA7D0>;<UA7D6>;<UA7D8>;<UA7DA>;<UA7DC>;<UA7F5>;<UFF21>..<UFF3A>;/ + <U00010400>..<U00010427>;<U000104B0>..<U000104D3>;/ + <U00010570>..<U0001057A>;<U0001057C>..<U0001058A>;/ + <U0001058C>..<U00010592>;<U00010594>..<U00010595>;/ + <U00010C80>..<U00010CB2>;<U00010D50>..<U00010D65>;/ <U000118A0>..<U000118BF>;<U00016E40>..<U00016E5F>;/ <U0001D400>..<U0001D419>;<U0001D434>..<U0001D44D>;/ <U0001D468>..<U0001D481>;<U0001D49C>;<U0001D49E>..<U0001D49F>;/ @@ -176,57 +177,58 @@ lower / <U0507>;<U0509>;<U050B>;<U050D>;<U050F>;<U0511>;<U0513>;<U0515>;<U0517>;/ <U0519>;<U051B>;<U051D>;<U051F>;<U0521>;<U0523>;<U0525>;<U0527>;<U0529>;/ <U052B>;<U052D>;<U052F>;<U0560>..<U0588>;<U10D0>..<U10FA>;/ - <U10FC>..<U10FF>;<U13F8>..<U13FD>;<U1C80>..<U1C88>;<U1D00>..<U1DBF>;/ - <U1E01>;<U1E03>;<U1E05>;<U1E07>;<U1E09>;<U1E0B>;<U1E0D>;<U1E0F>;<U1E11>;/ - <U1E13>;<U1E15>;<U1E17>;<U1E19>;<U1E1B>;<U1E1D>;<U1E1F>;<U1E21>;<U1E23>;/ - <U1E25>;<U1E27>;<U1E29>;<U1E2B>;<U1E2D>;<U1E2F>;<U1E31>;<U1E33>;<U1E35>;/ - <U1E37>;<U1E39>;<U1E3B>;<U1E3D>;<U1E3F>;<U1E41>;<U1E43>;<U1E45>;<U1E47>;/ - <U1E49>;<U1E4B>;<U1E4D>;<U1E4F>;<U1E51>;<U1E53>;<U1E55>;<U1E57>;<U1E59>;/ - <U1E5B>;<U1E5D>;<U1E5F>;<U1E61>;<U1E63>;<U1E65>;<U1E67>;<U1E69>;<U1E6B>;/ - <U1E6D>;<U1E6F>;<U1E71>;<U1E73>;<U1E75>;<U1E77>;<U1E79>;<U1E7B>;<U1E7D>;/ - <U1E7F>;<U1E81>;<U1E83>;<U1E85>;<U1E87>;<U1E89>;<U1E8B>;<U1E8D>;<U1E8F>;/ - <U1E91>;<U1E93>;<U1E95>..<U1E9D>;<U1E9F>;<U1EA1>;<U1EA3>;<U1EA5>;<U1EA7>;/ - <U1EA9>;<U1EAB>;<U1EAD>;<U1EAF>;<U1EB1>;<U1EB3>;<U1EB5>;<U1EB7>;<U1EB9>;/ - <U1EBB>;<U1EBD>;<U1EBF>;<U1EC1>;<U1EC3>;<U1EC5>;<U1EC7>;<U1EC9>;<U1ECB>;/ - <U1ECD>;<U1ECF>;<U1ED1>;<U1ED3>;<U1ED5>;<U1ED7>;<U1ED9>;<U1EDB>;<U1EDD>;/ - <U1EDF>;<U1EE1>;<U1EE3>;<U1EE5>;<U1EE7>;<U1EE9>;<U1EEB>;<U1EED>;<U1EEF>;/ - <U1EF1>;<U1EF3>;<U1EF5>;<U1EF7>;<U1EF9>;<U1EFB>;<U1EFD>;<U1EFF>..<U1F07>;/ - <U1F10>..<U1F15>;<U1F20>..<U1F27>;<U1F30>..<U1F37>;<U1F40>..<U1F45>;/ - <U1F50>..<U1F57>;<U1F60>..<U1F67>;<U1F70>..<U1F7D>;<U1F80>..<U1F87>;/ - <U1F90>..<U1F97>;<U1FA0>..<U1FA7>;<U1FB0>..<U1FB4>;<U1FB6>..<U1FB7>;/ - <U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FC7>;<U1FD0>..<U1FD3>;/ - <U1FD6>..<U1FD7>;<U1FE0>..<U1FE7>;<U1FF2>..<U1FF4>;<U1FF6>..<U1FF7>;/ - <U2071>;<U207F>;<U2090>..<U209C>;<U210A>;<U210E>..<U210F>;<U2113>;/ - <U212F>;<U2134>;<U2139>;<U213C>..<U213D>;<U2146>..<U2149>;<U214E>;/ - <U2170>..<U217F>;<U2184>;<U24D0>..<U24E9>;<U2C30>..<U2C5F>;<U2C61>;/ - <U2C65>..<U2C66>;<U2C68>;<U2C6A>;<U2C6C>;<U2C71>;<U2C73>..<U2C74>;/ - <U2C76>..<U2C7D>;<U2C81>;<U2C83>;<U2C85>;<U2C87>;<U2C89>;<U2C8B>;<U2C8D>;/ - <U2C8F>;<U2C91>;<U2C93>;<U2C95>;<U2C97>;<U2C99>;<U2C9B>;<U2C9D>;<U2C9F>;/ - <U2CA1>;<U2CA3>;<U2CA5>;<U2CA7>;<U2CA9>;<U2CAB>;<U2CAD>;<U2CAF>;<U2CB1>;/ - <U2CB3>;<U2CB5>;<U2CB7>;<U2CB9>;<U2CBB>;<U2CBD>;<U2CBF>;<U2CC1>;<U2CC3>;/ - <U2CC5>;<U2CC7>;<U2CC9>;<U2CCB>;<U2CCD>;<U2CCF>;<U2CD1>;<U2CD3>;<U2CD5>;/ - <U2CD7>;<U2CD9>;<U2CDB>;<U2CDD>;<U2CDF>;<U2CE1>;<U2CE3>..<U2CE4>;<U2CEC>;/ - <U2CEE>;<U2CF3>;<U2D00>..<U2D25>;<U2D27>;<U2D2D>;<UA641>;<UA643>;<UA645>;/ - <UA647>;<UA649>;<UA64B>;<UA64D>;<UA64F>;<UA651>;<UA653>;<UA655>;<UA657>;/ - <UA659>;<UA65B>;<UA65D>;<UA65F>;<UA661>;<UA663>;<UA665>;<UA667>;<UA669>;/ - <UA66B>;<UA66D>;<UA681>;<UA683>;<UA685>;<UA687>;<UA689>;<UA68B>;<UA68D>;/ - <UA68F>;<UA691>;<UA693>;<UA695>;<UA697>;<UA699>;<UA69B>..<UA69D>;<UA723>;/ - <UA725>;<UA727>;<UA729>;<UA72B>;<UA72D>;<UA72F>..<UA731>;<UA733>;<UA735>;/ - <UA737>;<UA739>;<UA73B>;<UA73D>;<UA73F>;<UA741>;<UA743>;<UA745>;<UA747>;/ - <UA749>;<UA74B>;<UA74D>;<UA74F>;<UA751>;<UA753>;<UA755>;<UA757>;<UA759>;/ - <UA75B>;<UA75D>;<UA75F>;<UA761>;<UA763>;<UA765>;<UA767>;<UA769>;<UA76B>;/ - <UA76D>;<UA76F>..<UA778>;<UA77A>;<UA77C>;<UA77F>;<UA781>;<UA783>;<UA785>;/ - <UA787>;<UA78C>;<UA78E>;<UA791>;<UA793>..<UA795>;<UA797>;<UA799>;<UA79B>;/ - <UA79D>;<UA79F>;<UA7A1>;<UA7A3>;<UA7A5>;<UA7A7>;<UA7A9>;<UA7AF>;<UA7B5>;/ - <UA7B7>;<UA7B9>;<UA7BB>;<UA7BD>;<UA7BF>;<UA7C1>;<UA7C3>;<UA7C8>;<UA7CA>;/ - <UA7D1>;<UA7D3>;<UA7D5>;<UA7D7>;<UA7D9>;<UA7F2>..<UA7F4>;<UA7F6>;/ - <UA7F8>..<UA7FA>;<UAB30>..<UAB5A>;<UAB5C>..<UAB69>;<UAB70>..<UABBF>;/ - <UFB00>..<UFB06>;<UFB13>..<UFB17>;<UFF41>..<UFF5A>;/ - <U00010428>..<U0001044F>;<U000104D8>..<U000104FB>;/ - <U00010597>..<U000105A1>;<U000105A3>..<U000105B1>;/ - <U000105B3>..<U000105B9>;<U000105BB>..<U000105BC>;<U00010780>;/ - <U00010783>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010CC0>..<U00010CF2>;/ + <U10FC>..<U10FF>;<U13F8>..<U13FD>;<U1C80>..<U1C88>;<U1C8A>;/ + <U1D00>..<U1DBF>;<U1E01>;<U1E03>;<U1E05>;<U1E07>;<U1E09>;<U1E0B>;<U1E0D>;/ + <U1E0F>;<U1E11>;<U1E13>;<U1E15>;<U1E17>;<U1E19>;<U1E1B>;<U1E1D>;<U1E1F>;/ + <U1E21>;<U1E23>;<U1E25>;<U1E27>;<U1E29>;<U1E2B>;<U1E2D>;<U1E2F>;<U1E31>;/ + <U1E33>;<U1E35>;<U1E37>;<U1E39>;<U1E3B>;<U1E3D>;<U1E3F>;<U1E41>;<U1E43>;/ + <U1E45>;<U1E47>;<U1E49>;<U1E4B>;<U1E4D>;<U1E4F>;<U1E51>;<U1E53>;<U1E55>;/ + <U1E57>;<U1E59>;<U1E5B>;<U1E5D>;<U1E5F>;<U1E61>;<U1E63>;<U1E65>;<U1E67>;/ + <U1E69>;<U1E6B>;<U1E6D>;<U1E6F>;<U1E71>;<U1E73>;<U1E75>;<U1E77>;<U1E79>;/ + <U1E7B>;<U1E7D>;<U1E7F>;<U1E81>;<U1E83>;<U1E85>;<U1E87>;<U1E89>;<U1E8B>;/ + <U1E8D>;<U1E8F>;<U1E91>;<U1E93>;<U1E95>..<U1E9D>;<U1E9F>;<U1EA1>;<U1EA3>;/ + <U1EA5>;<U1EA7>;<U1EA9>;<U1EAB>;<U1EAD>;<U1EAF>;<U1EB1>;<U1EB3>;<U1EB5>;/ + <U1EB7>;<U1EB9>;<U1EBB>;<U1EBD>;<U1EBF>;<U1EC1>;<U1EC3>;<U1EC5>;<U1EC7>;/ + <U1EC9>;<U1ECB>;<U1ECD>;<U1ECF>;<U1ED1>;<U1ED3>;<U1ED5>;<U1ED7>;<U1ED9>;/ + <U1EDB>;<U1EDD>;<U1EDF>;<U1EE1>;<U1EE3>;<U1EE5>;<U1EE7>;<U1EE9>;<U1EEB>;/ + <U1EED>;<U1EEF>;<U1EF1>;<U1EF3>;<U1EF5>;<U1EF7>;<U1EF9>;<U1EFB>;<U1EFD>;/ + <U1EFF>..<U1F07>;<U1F10>..<U1F15>;<U1F20>..<U1F27>;<U1F30>..<U1F37>;/ + <U1F40>..<U1F45>;<U1F50>..<U1F57>;<U1F60>..<U1F67>;<U1F70>..<U1F7D>;/ + <U1F80>..<U1F87>;<U1F90>..<U1F97>;<U1FA0>..<U1FA7>;<U1FB0>..<U1FB4>;/ + <U1FB6>..<U1FB7>;<U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FC7>;/ + <U1FD0>..<U1FD3>;<U1FD6>..<U1FD7>;<U1FE0>..<U1FE7>;<U1FF2>..<U1FF4>;/ + <U1FF6>..<U1FF7>;<U2071>;<U207F>;<U2090>..<U209C>;<U210A>;/ + <U210E>..<U210F>;<U2113>;<U212F>;<U2134>;<U2139>;<U213C>..<U213D>;/ + <U2146>..<U2149>;<U214E>;<U2170>..<U217F>;<U2184>;<U24D0>..<U24E9>;/ + <U2C30>..<U2C5F>;<U2C61>;<U2C65>..<U2C66>;<U2C68>;<U2C6A>;<U2C6C>;/ + <U2C71>;<U2C73>..<U2C74>;<U2C76>..<U2C7D>;<U2C81>;<U2C83>;<U2C85>;/ + <U2C87>;<U2C89>;<U2C8B>;<U2C8D>;<U2C8F>;<U2C91>;<U2C93>;<U2C95>;<U2C97>;/ + <U2C99>;<U2C9B>;<U2C9D>;<U2C9F>;<U2CA1>;<U2CA3>;<U2CA5>;<U2CA7>;<U2CA9>;/ + <U2CAB>;<U2CAD>;<U2CAF>;<U2CB1>;<U2CB3>;<U2CB5>;<U2CB7>;<U2CB9>;<U2CBB>;/ + <U2CBD>;<U2CBF>;<U2CC1>;<U2CC3>;<U2CC5>;<U2CC7>;<U2CC9>;<U2CCB>;<U2CCD>;/ + <U2CCF>;<U2CD1>;<U2CD3>;<U2CD5>;<U2CD7>;<U2CD9>;<U2CDB>;<U2CDD>;<U2CDF>;/ + <U2CE1>;<U2CE3>..<U2CE4>;<U2CEC>;<U2CEE>;<U2CF3>;<U2D00>..<U2D25>;/ + <U2D27>;<U2D2D>;<UA641>;<UA643>;<UA645>;<UA647>;<UA649>;<UA64B>;<UA64D>;/ + <UA64F>;<UA651>;<UA653>;<UA655>;<UA657>;<UA659>;<UA65B>;<UA65D>;<UA65F>;/ + <UA661>;<UA663>;<UA665>;<UA667>;<UA669>;<UA66B>;<UA66D>;<UA681>;<UA683>;/ + <UA685>;<UA687>;<UA689>;<UA68B>;<UA68D>;<UA68F>;<UA691>;<UA693>;<UA695>;/ + <UA697>;<UA699>;<UA69B>..<UA69D>;<UA723>;<UA725>;<UA727>;<UA729>;<UA72B>;/ + <UA72D>;<UA72F>..<UA731>;<UA733>;<UA735>;<UA737>;<UA739>;<UA73B>;<UA73D>;/ + <UA73F>;<UA741>;<UA743>;<UA745>;<UA747>;<UA749>;<UA74B>;<UA74D>;<UA74F>;/ + <UA751>;<UA753>;<UA755>;<UA757>;<UA759>;<UA75B>;<UA75D>;<UA75F>;<UA761>;/ + <UA763>;<UA765>;<UA767>;<UA769>;<UA76B>;<UA76D>;<UA76F>..<UA778>;<UA77A>;/ + <UA77C>;<UA77F>;<UA781>;<UA783>;<UA785>;<UA787>;<UA78C>;<UA78E>;<UA791>;/ + <UA793>..<UA795>;<UA797>;<UA799>;<UA79B>;<UA79D>;<UA79F>;<UA7A1>;<UA7A3>;/ + <UA7A5>;<UA7A7>;<UA7A9>;<UA7AF>;<UA7B5>;<UA7B7>;<UA7B9>;<UA7BB>;<UA7BD>;/ + <UA7BF>;<UA7C1>;<UA7C3>;<UA7C8>;<UA7CA>;<UA7CD>;<UA7D1>;<UA7D3>;<UA7D5>;/ + <UA7D7>;<UA7D9>;<UA7DB>;<UA7F2>..<UA7F4>;<UA7F6>;<UA7F8>..<UA7FA>;/ + <UAB30>..<UAB5A>;<UAB5C>..<UAB69>;<UAB70>..<UABBF>;<UFB00>..<UFB06>;/ + <UFB13>..<UFB17>;<UFF41>..<UFF5A>;<U00010428>..<U0001044F>;/ + <U000104D8>..<U000104FB>;<U00010597>..<U000105A1>;/ + <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ + <U000105BB>..<U000105BC>;<U00010780>;<U00010783>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010CC0>..<U00010CF2>;<U00010D70>..<U00010D85>;/ <U000118C0>..<U000118DF>;<U00016E60>..<U00016E7F>;/ <U0001D41A>..<U0001D433>;<U0001D44E>..<U0001D454>;/ <U0001D456>..<U0001D467>;<U0001D482>..<U0001D49B>;/ @@ -250,7 +252,7 @@ lower / alpha / <U0041>..<U005A>;<U0061>..<U007A>;<U00AA>;<U00B5>;<U00BA>;/ <U00C0>..<U00D6>;<U00D8>..<U00F6>;<U00F8>..<U02C1>;<U02C6>..<U02D1>;/ - <U02E0>..<U02E4>;<U02EC>;<U02EE>;<U0345>;<U0370>..<U0374>;/ + <U02E0>..<U02E4>;<U02EC>;<U02EE>;<U0345>;<U0363>..<U0374>;/ <U0376>..<U0377>;<U037A>..<U037D>;<U037F>;<U0386>;<U0388>..<U038A>;/ <U038C>;<U038E>..<U03A1>;<U03A3>..<U03F5>;<U03F7>..<U0481>;/ <U048A>..<U052F>;<U0531>..<U0556>;<U0559>;<U0560>..<U0588>;/ @@ -260,16 +262,16 @@ alpha / <U06ED>..<U06FC>;<U06FF>;<U0710>..<U073F>;<U074D>..<U07B1>;/ <U07C0>..<U07EA>;<U07F4>..<U07F5>;<U07FA>;<U0800>..<U0817>;/ <U081A>..<U082C>;<U0840>..<U0858>;<U0860>..<U086A>;<U0870>..<U0887>;/ - <U0889>..<U088E>;<U08A0>..<U08C9>;<U08D4>..<U08DF>;<U08E3>..<U08E9>;/ - <U08F0>..<U093B>;<U093D>..<U094C>;<U094E>..<U0950>;<U0955>..<U0963>;/ - <U0966>..<U096F>;<U0971>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;/ - <U0993>..<U09A8>;<U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;/ - <U09BD>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CC>;<U09CE>;<U09D7>;/ - <U09DC>..<U09DD>;<U09DF>..<U09E3>;<U09E6>..<U09F1>;<U09FC>;/ - <U0A01>..<U0A03>;<U0A05>..<U0A0A>;<U0A0F>..<U0A10>;<U0A13>..<U0A28>;/ - <U0A2A>..<U0A30>;<U0A32>..<U0A33>;<U0A35>..<U0A36>;<U0A38>..<U0A39>;/ - <U0A3E>..<U0A42>;<U0A47>..<U0A48>;<U0A4B>..<U0A4C>;<U0A51>;/ - <U0A59>..<U0A5C>;<U0A5E>;<U0A66>..<U0A75>;<U0A81>..<U0A83>;/ + <U0889>..<U088E>;<U0897>;<U08A0>..<U08C9>;<U08D4>..<U08DF>;/ + <U08E3>..<U08E9>;<U08F0>..<U093B>;<U093D>..<U094C>;<U094E>..<U0950>;/ + <U0955>..<U0963>;<U0966>..<U096F>;<U0971>..<U0983>;<U0985>..<U098C>;/ + <U098F>..<U0990>;<U0993>..<U09A8>;<U09AA>..<U09B0>;<U09B2>;/ + <U09B6>..<U09B9>;<U09BD>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CC>;/ + <U09CE>;<U09D7>;<U09DC>..<U09DD>;<U09DF>..<U09E3>;<U09E6>..<U09F1>;/ + <U09FC>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;<U0A0F>..<U0A10>;/ + <U0A13>..<U0A28>;<U0A2A>..<U0A30>;<U0A32>..<U0A33>;<U0A35>..<U0A36>;/ + <U0A38>..<U0A39>;<U0A3E>..<U0A42>;<U0A47>..<U0A48>;<U0A4B>..<U0A4C>;/ + <U0A51>;<U0A59>..<U0A5C>;<U0A5E>;<U0A66>..<U0A75>;<U0A81>..<U0A83>;/ <U0A85>..<U0A8D>;<U0A8F>..<U0A91>;<U0A93>..<U0AA8>;<U0AAA>..<U0AB0>;/ <U0AB2>..<U0AB3>;<U0AB5>..<U0AB9>;<U0ABD>..<U0AC5>;<U0AC7>..<U0AC9>;/ <U0ACB>..<U0ACC>;<U0AD0>;<U0AE0>..<U0AE3>;<U0AE6>..<U0AEF>;/ @@ -315,9 +317,9 @@ alpha / <U1A90>..<U1A99>;<U1AA7>;<U1ABF>..<U1AC0>;<U1ACC>..<U1ACE>;/ <U1B00>..<U1B33>;<U1B35>..<U1B43>;<U1B45>..<U1B4C>;<U1B50>..<U1B59>;/ <U1B80>..<U1BA9>;<U1BAC>..<U1BE5>;<U1BE7>..<U1BF1>;<U1C00>..<U1C36>;/ - <U1C40>..<U1C49>;<U1C4D>..<U1C7D>;<U1C80>..<U1C88>;<U1C90>..<U1CBA>;/ + <U1C40>..<U1C49>;<U1C4D>..<U1C7D>;<U1C80>..<U1C8A>;<U1C90>..<U1CBA>;/ <U1CBD>..<U1CBF>;<U1CE9>..<U1CEC>;<U1CEE>..<U1CF3>;<U1CF5>..<U1CF6>;/ - <U1CFA>;<U1D00>..<U1DBF>;<U1DE7>..<U1DF4>;<U1E00>..<U1F15>;/ + <U1CFA>;<U1D00>..<U1DBF>;<U1DD3>..<U1DF4>;<U1E00>..<U1F15>;/ <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ <U1FB6>..<U1FBC>;<U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FCC>;/ @@ -335,8 +337,8 @@ alpha / <U30FC>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;<U31A0>..<U31BF>;/ <U31F0>..<U31FF>;<U3400>..<U4DBF>;<U4E00>..<UA48C>;<UA4D0>..<UA4FD>;/ <UA500>..<UA60C>;<UA610>..<UA62B>;<UA640>..<UA66E>;<UA674>..<UA67B>;/ - <UA67F>..<UA6EF>;<UA717>..<UA71F>;<UA722>..<UA788>;<UA78B>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA805>;/ + <UA67F>..<UA6EF>;<UA717>..<UA71F>;<UA722>..<UA788>;<UA78B>..<UA7CD>;/ + <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA805>;/ <UA807>..<UA827>;<UA840>..<UA873>;<UA880>..<UA8C3>;<UA8C5>;/ <UA8D0>..<UA8D9>;<UA8F2>..<UA8F7>;<UA8FB>;<UA8FD>..<UA92A>;/ <UA930>..<UA952>;<UA960>..<UA97C>;<UA980>..<UA9B2>;<UA9B4>..<UA9BF>;/ @@ -367,26 +369,28 @@ alpha / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010860>..<U00010876>;/ - <U00010880>..<U0001089E>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U00010900>..<U00010915>;/ - <U00010920>..<U00010939>;<U00010980>..<U000109B7>;/ - <U000109BE>..<U000109BF>;<U00010A00>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A60>..<U00010A7C>;<U00010A80>..<U00010A9C>;/ - <U00010AC0>..<U00010AC7>;<U00010AC9>..<U00010AE4>;/ - <U00010B00>..<U00010B35>;<U00010B40>..<U00010B55>;/ - <U00010B60>..<U00010B72>;<U00010B80>..<U00010B91>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010D00>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E80>..<U00010EA9>;/ - <U00010EAB>..<U00010EAC>;<U00010EB0>..<U00010EB1>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010860>..<U00010876>;<U00010880>..<U0001089E>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U00010900>..<U00010915>;<U00010920>..<U00010939>;/ + <U00010980>..<U000109B7>;<U000109BE>..<U000109BF>;/ + <U00010A00>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A60>..<U00010A7C>;/ + <U00010A80>..<U00010A9C>;<U00010AC0>..<U00010AC7>;/ + <U00010AC9>..<U00010AE4>;<U00010B00>..<U00010B35>;/ + <U00010B40>..<U00010B55>;<U00010B60>..<U00010B72>;/ + <U00010B80>..<U00010B91>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010D00>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>;<U00010D6F>..<U00010D85>;/ + <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAC>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;<U00010EFC>;/ <U00010F00>..<U00010F1C>;<U00010F27>;<U00010F30>..<U00010F45>;/ <U00010F70>..<U00010F81>;<U00010FB0>..<U00010FC4>;/ <U00010FE0>..<U00010FF6>;<U00011000>..<U00011045>;/ @@ -406,83 +410,92 @@ alpha / <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ <U0001133D>..<U00011344>;<U00011347>..<U00011348>;/ <U0001134B>..<U0001134C>;<U00011350>;<U00011357>;/ - <U0001135D>..<U00011363>;<U00011400>..<U00011441>;/ - <U00011443>..<U00011445>;<U00011447>..<U0001144A>;/ - <U00011450>..<U00011459>;<U0001145F>..<U00011461>;/ - <U00011480>..<U000114C1>;<U000114C4>..<U000114C5>;<U000114C7>;/ - <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ - <U000115B8>..<U000115BE>;<U000115D8>..<U000115DD>;/ - <U00011600>..<U0001163E>;<U00011640>;<U00011644>;/ - <U00011650>..<U00011659>;<U00011680>..<U000116B5>;<U000116B8>;/ - <U000116C0>..<U000116C9>;<U00011700>..<U0001171A>;/ - <U0001171D>..<U0001172A>;<U00011730>..<U00011739>;/ - <U00011740>..<U00011746>;<U00011800>..<U00011838>;/ - <U000118A0>..<U000118E9>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U0001193C>;<U0001193F>..<U00011942>;/ - <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ - <U000119AA>..<U000119D7>;<U000119DA>..<U000119DF>;<U000119E1>;/ - <U000119E3>..<U000119E4>;<U00011A00>..<U00011A32>;/ - <U00011A35>..<U00011A3E>;<U00011A50>..<U00011A97>;<U00011A9D>;/ - <U00011AB0>..<U00011AF8>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C3E>;<U00011C40>;/ - <U00011C50>..<U00011C59>;<U00011C72>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D41>;<U00011D43>;<U00011D46>..<U00011D47>;/ - <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ - <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ - <U00011D90>..<U00011D91>;<U00011D93>..<U00011D96>;<U00011D98>;/ - <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF6>;/ - <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ - <U00011F3E>..<U00011F40>;<U00011F50>..<U00011F59>;<U00011FB0>;/ - <U00012000>..<U00012399>;<U00012400>..<U0001246E>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF0>;/ - <U00013000>..<U0001342F>;<U00013441>..<U00013446>;/ - <U00014400>..<U00014646>;<U00016800>..<U00016A38>;/ + <U0001135D>..<U00011363>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113CD>;<U000113D1>;<U000113D3>;/ + <U00011400>..<U00011441>;<U00011443>..<U00011445>;/ + <U00011447>..<U0001144A>;<U00011450>..<U00011459>;/ + <U0001145F>..<U00011461>;<U00011480>..<U000114C1>;/ + <U000114C4>..<U000114C5>;<U000114C7>;<U000114D0>..<U000114D9>;/ + <U00011580>..<U000115B5>;<U000115B8>..<U000115BE>;/ + <U000115D8>..<U000115DD>;<U00011600>..<U0001163E>;<U00011640>;/ + <U00011644>;<U00011650>..<U00011659>;<U00011680>..<U000116B5>;/ + <U000116B8>;<U000116C0>..<U000116C9>;<U000116D0>..<U000116E3>;/ + <U00011700>..<U0001171A>;<U0001171D>..<U0001172A>;/ + <U00011730>..<U00011739>;<U00011740>..<U00011746>;/ + <U00011800>..<U00011838>;<U000118A0>..<U000118E9>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U0001193C>;/ + <U0001193F>..<U00011942>;<U00011950>..<U00011959>;/ + <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ + <U000119DA>..<U000119DF>;<U000119E1>;<U000119E3>..<U000119E4>;/ + <U00011A00>..<U00011A32>;<U00011A35>..<U00011A3E>;/ + <U00011A50>..<U00011A97>;<U00011A9D>;<U00011AB0>..<U00011AF8>;/ + <U00011BC0>..<U00011BE0>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C3E>;<U00011C40>;<U00011C50>..<U00011C59>;/ + <U00011C72>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D41>;<U00011D43>;/ + <U00011D46>..<U00011D47>;<U00011D50>..<U00011D59>;/ + <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ + <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ + <U00011D93>..<U00011D96>;<U00011D98>;<U00011DA0>..<U00011DA9>;/ + <U00011EE0>..<U00011EF6>;<U00011F00>..<U00011F10>;/ + <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F40>;/ + <U00011F50>..<U00011F59>;<U00011FB0>;<U00012000>..<U00012399>;/ + <U00012400>..<U0001246E>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF0>;<U00013000>..<U0001342F>;/ + <U00013441>..<U00013446>;<U00013460>..<U000143FA>;/ + <U00014400>..<U00014646>;<U00016100>..<U0001612E>;/ + <U00016130>..<U00016139>;<U00016800>..<U00016A38>;/ <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ <U00016A70>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ <U00016AD0>..<U00016AED>;<U00016B00>..<U00016B2F>;/ <U00016B40>..<U00016B43>;<U00016B50>..<U00016B59>;/ <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U00016D40>..<U00016D6C>;<U00016D70>..<U00016D79>;/ <U00016E40>..<U00016E7F>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE1>;<U00016FE3>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;<U0001BC9E>;/ - <U0001D400>..<U0001D454>;<U0001D456>..<U0001D49C>;/ - <U0001D49E>..<U0001D49F>;<U0001D4A2>;<U0001D4A5>..<U0001D4A6>;/ - <U0001D4A9>..<U0001D4AC>;<U0001D4AE>..<U0001D4B9>;<U0001D4BB>;/ - <U0001D4BD>..<U0001D4C3>;<U0001D4C5>..<U0001D505>;/ - <U0001D507>..<U0001D50A>;<U0001D50D>..<U0001D514>;/ - <U0001D516>..<U0001D51C>;<U0001D51E>..<U0001D539>;/ - <U0001D53B>..<U0001D53E>;<U0001D540>..<U0001D544>;<U0001D546>;/ - <U0001D54A>..<U0001D550>;<U0001D552>..<U0001D6A5>;/ - <U0001D6A8>..<U0001D6C0>;<U0001D6C2>..<U0001D6DA>;/ - <U0001D6DC>..<U0001D6FA>;<U0001D6FC>..<U0001D714>;/ - <U0001D716>..<U0001D734>;<U0001D736>..<U0001D74E>;/ - <U0001D750>..<U0001D76E>;<U0001D770>..<U0001D788>;/ - <U0001D78A>..<U0001D7A8>;<U0001D7AA>..<U0001D7C2>;/ - <U0001D7C4>..<U0001D7CB>;<U0001D7CE>..<U0001D7FF>;/ - <U0001DF00>..<U0001DF1E>;<U0001DF25>..<U0001DF2A>;/ - <U0001E000>..<U0001E006>;<U0001E008>..<U0001E018>;/ - <U0001E01B>..<U0001E021>;<U0001E023>..<U0001E024>;/ - <U0001E026>..<U0001E02A>;<U0001E030>..<U0001E06D>;<U0001E08F>;/ - <U0001E100>..<U0001E12C>;<U0001E137>..<U0001E13D>;/ - <U0001E140>..<U0001E149>;<U0001E14E>;<U0001E290>..<U0001E2AD>;/ - <U0001E2C0>..<U0001E2EB>;<U0001E2F0>..<U0001E2F9>;/ - <U0001E4D0>..<U0001E4EB>;<U0001E4F0>..<U0001E4F9>;/ - <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ - <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ - <U0001E800>..<U0001E8C4>;<U0001E900>..<U0001E943>;<U0001E947>;/ - <U0001E94B>;<U0001E950>..<U0001E959>;<U0001EE00>..<U0001EE03>;/ + <U0001CCF0>..<U0001CCF9>;<U0001D400>..<U0001D454>;/ + <U0001D456>..<U0001D49C>;<U0001D49E>..<U0001D49F>;<U0001D4A2>;/ + <U0001D4A5>..<U0001D4A6>;<U0001D4A9>..<U0001D4AC>;/ + <U0001D4AE>..<U0001D4B9>;<U0001D4BB>;<U0001D4BD>..<U0001D4C3>;/ + <U0001D4C5>..<U0001D505>;<U0001D507>..<U0001D50A>;/ + <U0001D50D>..<U0001D514>;<U0001D516>..<U0001D51C>;/ + <U0001D51E>..<U0001D539>;<U0001D53B>..<U0001D53E>;/ + <U0001D540>..<U0001D544>;<U0001D546>;<U0001D54A>..<U0001D550>;/ + <U0001D552>..<U0001D6A5>;<U0001D6A8>..<U0001D6C0>;/ + <U0001D6C2>..<U0001D6DA>;<U0001D6DC>..<U0001D6FA>;/ + <U0001D6FC>..<U0001D714>;<U0001D716>..<U0001D734>;/ + <U0001D736>..<U0001D74E>;<U0001D750>..<U0001D76E>;/ + <U0001D770>..<U0001D788>;<U0001D78A>..<U0001D7A8>;/ + <U0001D7AA>..<U0001D7C2>;<U0001D7C4>..<U0001D7CB>;/ + <U0001D7CE>..<U0001D7FF>;<U0001DF00>..<U0001DF1E>;/ + <U0001DF25>..<U0001DF2A>;<U0001E000>..<U0001E006>;/ + <U0001E008>..<U0001E018>;<U0001E01B>..<U0001E021>;/ + <U0001E023>..<U0001E024>;<U0001E026>..<U0001E02A>;/ + <U0001E030>..<U0001E06D>;<U0001E08F>;<U0001E100>..<U0001E12C>;/ + <U0001E137>..<U0001E13D>;<U0001E140>..<U0001E149>;<U0001E14E>;/ + <U0001E290>..<U0001E2AD>;<U0001E2C0>..<U0001E2EB>;/ + <U0001E2F0>..<U0001E2F9>;<U0001E4D0>..<U0001E4EB>;/ + <U0001E4F0>..<U0001E4F9>;<U0001E5D0>..<U0001E5ED>;/ + <U0001E5F0>..<U0001E5FA>;<U0001E7E0>..<U0001E7E6>;/ + <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ + <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ + <U0001E900>..<U0001E943>;<U0001E947>;<U0001E94B>;/ + <U0001E950>..<U0001E959>;<U0001EE00>..<U0001EE03>;/ <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ @@ -523,7 +536,7 @@ punct / <U0021>..<U002F>;<U003A>..<U0040>;<U005B>..<U0060>;<U007B>..<U007E>;/ <U00A0>..<U00A9>;<U00AB>..<U00B4>;<U00B6>..<U00B9>;<U00BB>..<U00BF>;/ <U00D7>;<U00F7>;<U02C2>..<U02C5>;<U02D2>..<U02DF>;<U02E5>..<U02EB>;/ - <U02ED>;<U02EF>..<U0344>;<U0346>..<U036F>;<U0375>;<U037E>;/ + <U02ED>;<U02EF>..<U0344>;<U0346>..<U0362>;<U0375>;<U037E>;/ <U0384>..<U0385>;<U0387>;<U03F6>;<U0482>..<U0489>;<U055A>..<U055F>;/ <U0589>..<U058A>;<U058D>..<U058F>;<U0591>..<U05AF>;<U05BE>;<U05C0>;/ <U05C3>;<U05C6>;<U05F3>..<U05F4>;<U0600>..<U060F>;<U061B>..<U061F>;/ @@ -548,44 +561,45 @@ punct / <U17DD>;<U17F0>..<U17F9>;<U1800>..<U180F>;<U1939>..<U193B>;<U1940>;/ <U1944>..<U1945>;<U19DA>;<U19DE>..<U19FF>;<U1A1E>..<U1A1F>;<U1A60>;/ <U1A75>..<U1A7C>;<U1A7F>;<U1AA0>..<U1AA6>;<U1AA8>..<U1AAD>;/ - <U1AB0>..<U1ABE>;<U1AC1>..<U1ACB>;<U1B34>;<U1B44>;<U1B5A>..<U1B7E>;/ - <U1BAA>..<U1BAB>;<U1BE6>;<U1BF2>..<U1BF3>;<U1BFC>..<U1BFF>;<U1C37>;/ - <U1C3B>..<U1C3F>;<U1C7E>..<U1C7F>;<U1CC0>..<U1CC7>;<U1CD0>..<U1CE8>;/ - <U1CED>;<U1CF4>;<U1CF7>..<U1CF9>;<U1DC0>..<U1DE6>;<U1DF5>..<U1DFF>;/ - <U1FBD>;<U1FBF>..<U1FC1>;<U1FCD>..<U1FCF>;<U1FDD>..<U1FDF>;/ - <U1FED>..<U1FEF>;<U1FFD>..<U1FFE>;<U2007>;<U200B>..<U2027>;/ - <U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2070>;<U2074>..<U207E>;/ - <U2080>..<U208E>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;<U2100>..<U2101>;/ - <U2103>..<U2106>;<U2108>..<U2109>;<U2114>;<U2116>..<U2118>;/ - <U211E>..<U2123>;<U2125>;<U2127>;<U2129>;<U212E>;<U213A>..<U213B>;/ - <U2140>..<U2144>;<U214A>..<U214D>;<U214F>..<U215F>;<U2189>..<U218B>;/ - <U2190>..<U2426>;<U2440>..<U244A>;<U2460>..<U24B5>;<U24EA>..<U2B73>;/ - <U2B76>..<U2B95>;<U2B97>..<U2BFF>;<U2CE5>..<U2CEA>;<U2CEF>..<U2CF1>;/ - <U2CF9>..<U2CFF>;<U2D70>;<U2D7F>;<U2E00>..<U2E2E>;<U2E30>..<U2E5D>;/ - <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;/ - <U3001>..<U3004>;<U3008>..<U3020>;<U302A>..<U3030>;<U3036>..<U3037>;/ - <U303D>..<U303F>;<U3099>..<U309C>;<U30A0>;<U30FB>;<U3190>..<U319F>;/ - <U31C0>..<U31E3>;<U31EF>;<U3200>..<U321E>;<U3220>..<U33FF>;/ - <U4DC0>..<U4DFF>;<UA490>..<UA4C6>;<UA4FE>..<UA4FF>;<UA60D>..<UA60F>;/ - <UA66F>..<UA673>;<UA67C>..<UA67E>;<UA6F0>..<UA6F7>;<UA700>..<UA716>;/ - <UA720>..<UA721>;<UA789>..<UA78A>;<UA806>;<UA828>..<UA82C>;/ - <UA830>..<UA839>;<UA874>..<UA877>;<UA8C4>;<UA8CE>..<UA8CF>;/ - <UA8E0>..<UA8F1>;<UA8F8>..<UA8FA>;<UA8FC>;<UA92B>..<UA92F>;<UA953>;/ - <UA95F>;<UA9B3>;<UA9C0>..<UA9CD>;<UA9DE>..<UA9DF>;<UAA5C>..<UAA5F>;/ - <UAA77>..<UAA79>;<UAABF>;<UAAC1>;<UAADE>..<UAADF>;<UAAF0>..<UAAF1>;/ - <UAAF6>;<UAB5B>;<UAB6A>..<UAB6B>;<UABEB>..<UABED>;<UE000>..<UF8FF>;/ - <UFB29>;<UFBB2>..<UFBC2>;<UFD3E>..<UFD4F>;<UFDCF>;<UFDFC>..<UFE19>;/ - <UFE20>..<UFE52>;<UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFEFF>;/ - <UFF01>..<UFF0F>;<UFF1A>..<UFF20>;<UFF3B>..<UFF40>;<UFF5B>..<UFF65>;/ - <UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ - <U00010100>..<U00010102>;<U00010107>..<U00010133>;/ - <U00010137>..<U0001013F>;<U00010175>..<U0001018E>;/ - <U00010190>..<U0001019C>;<U000101A0>;<U000101D0>..<U000101FD>;/ - <U000102E0>..<U000102FB>;<U00010320>..<U00010323>;<U0001039F>;/ - <U000103D0>;<U0001056F>;<U00010857>..<U0001085F>;/ - <U00010877>..<U0001087F>;<U000108A7>..<U000108AF>;/ - <U000108FB>..<U000108FF>;<U00010916>..<U0001091B>;<U0001091F>;/ - <U0001093F>;<U000109BC>..<U000109BD>;<U000109C0>..<U000109CF>;/ + <U1AB0>..<U1ABE>;<U1AC1>..<U1ACB>;<U1B34>;<U1B44>;<U1B4E>..<U1B4F>;/ + <U1B5A>..<U1B7F>;<U1BAA>..<U1BAB>;<U1BE6>;<U1BF2>..<U1BF3>;/ + <U1BFC>..<U1BFF>;<U1C37>;<U1C3B>..<U1C3F>;<U1C7E>..<U1C7F>;/ + <U1CC0>..<U1CC7>;<U1CD0>..<U1CE8>;<U1CED>;<U1CF4>;<U1CF7>..<U1CF9>;/ + <U1DC0>..<U1DD2>;<U1DF5>..<U1DFF>;<U1FBD>;<U1FBF>..<U1FC1>;/ + <U1FCD>..<U1FCF>;<U1FDD>..<U1FDF>;<U1FED>..<U1FEF>;<U1FFD>..<U1FFE>;/ + <U2007>;<U200B>..<U2027>;<U202A>..<U205E>;<U2060>..<U2064>;/ + <U2066>..<U2070>;<U2074>..<U207E>;<U2080>..<U208E>;<U20A0>..<U20C0>;/ + <U20D0>..<U20F0>;<U2100>..<U2101>;<U2103>..<U2106>;<U2108>..<U2109>;/ + <U2114>;<U2116>..<U2118>;<U211E>..<U2123>;<U2125>;<U2127>;<U2129>;/ + <U212E>;<U213A>..<U213B>;<U2140>..<U2144>;<U214A>..<U214D>;/ + <U214F>..<U215F>;<U2189>..<U218B>;<U2190>..<U2429>;<U2440>..<U244A>;/ + <U2460>..<U24B5>;<U24EA>..<U2B73>;<U2B76>..<U2B95>;<U2B97>..<U2BFF>;/ + <U2CE5>..<U2CEA>;<U2CEF>..<U2CF1>;<U2CF9>..<U2CFF>;<U2D70>;<U2D7F>;/ + <U2E00>..<U2E2E>;<U2E30>..<U2E5D>;<U2E80>..<U2E99>;<U2E9B>..<U2EF3>;/ + <U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;<U3001>..<U3004>;<U3008>..<U3020>;/ + <U302A>..<U3030>;<U3036>..<U3037>;<U303D>..<U303F>;<U3099>..<U309C>;/ + <U30A0>;<U30FB>;<U3190>..<U319F>;<U31C0>..<U31E5>;<U31EF>;/ + <U3200>..<U321E>;<U3220>..<U33FF>;<U4DC0>..<U4DFF>;<UA490>..<UA4C6>;/ + <UA4FE>..<UA4FF>;<UA60D>..<UA60F>;<UA66F>..<UA673>;<UA67C>..<UA67E>;/ + <UA6F0>..<UA6F7>;<UA700>..<UA716>;<UA720>..<UA721>;<UA789>..<UA78A>;/ + <UA806>;<UA828>..<UA82C>;<UA830>..<UA839>;<UA874>..<UA877>;<UA8C4>;/ + <UA8CE>..<UA8CF>;<UA8E0>..<UA8F1>;<UA8F8>..<UA8FA>;<UA8FC>;/ + <UA92B>..<UA92F>;<UA953>;<UA95F>;<UA9B3>;<UA9C0>..<UA9CD>;/ + <UA9DE>..<UA9DF>;<UAA5C>..<UAA5F>;<UAA77>..<UAA79>;<UAABF>;<UAAC1>;/ + <UAADE>..<UAADF>;<UAAF0>..<UAAF1>;<UAAF6>;<UAB5B>;<UAB6A>..<UAB6B>;/ + <UABEB>..<UABED>;<UE000>..<UF8FF>;<UFB29>;<UFBB2>..<UFBC2>;/ + <UFD3E>..<UFD4F>;<UFDCF>;<UFDFC>..<UFE19>;<UFE20>..<UFE52>;/ + <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFEFF>;<UFF01>..<UFF0F>;/ + <UFF1A>..<UFF20>;<UFF3B>..<UFF40>;<UFF5B>..<UFF65>;<UFFE0>..<UFFE6>;/ + <UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;<U00010100>..<U00010102>;/ + <U00010107>..<U00010133>;<U00010137>..<U0001013F>;/ + <U00010175>..<U0001018E>;<U00010190>..<U0001019C>;<U000101A0>;/ + <U000101D0>..<U000101FD>;<U000102E0>..<U000102FB>;/ + <U00010320>..<U00010323>;<U0001039F>;<U000103D0>;<U0001056F>;/ + <U00010857>..<U0001085F>;<U00010877>..<U0001087F>;/ + <U000108A7>..<U000108AF>;<U000108FB>..<U000108FF>;/ + <U00010916>..<U0001091B>;<U0001091F>;<U0001093F>;/ + <U000109BC>..<U000109BD>;<U000109C0>..<U000109CF>;/ <U000109D2>..<U000109FF>;<U00010A38>..<U00010A3A>;/ <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ <U00010A7D>..<U00010A7F>;<U00010A9D>..<U00010A9F>;<U00010AC8>;/ @@ -593,6 +607,7 @@ punct / <U00010B39>..<U00010B3F>;<U00010B58>..<U00010B5F>;/ <U00010B78>..<U00010B7F>;<U00010B99>..<U00010B9C>;/ <U00010BA9>..<U00010BAF>;<U00010CFA>..<U00010CFF>;/ + <U00010D6A>..<U00010D6E>;<U00010D8E>..<U00010D8F>;/ <U00010E60>..<U00010E7E>;<U00010EAD>;<U00010EFD>..<U00010EFF>;/ <U00010F1D>..<U00010F26>;<U00010F46>..<U00010F59>;/ <U00010F82>..<U00010F89>;<U00010FC5>..<U00010FCB>;/ @@ -603,7 +618,9 @@ punct / <U000111DB>;<U000111DD>..<U000111DF>;<U000111E1>..<U000111F4>;/ <U00011235>..<U00011236>;<U00011238>..<U0001123D>;<U000112A9>;/ <U000112E9>..<U000112EA>;<U0001133B>..<U0001133C>;<U0001134D>;/ - <U00011366>..<U0001136C>;<U00011370>..<U00011374>;<U00011442>;/ + <U00011366>..<U0001136C>;<U00011370>..<U00011374>;/ + <U000113CE>..<U000113D0>;<U000113D2>;<U000113D4>..<U000113D5>;/ + <U000113D7>..<U000113D8>;<U000113E1>..<U000113E2>;<U00011442>;/ <U00011446>;<U0001144B>..<U0001144F>;<U0001145A>..<U0001145B>;/ <U0001145D>..<U0001145E>;<U000114C2>..<U000114C3>;<U000114C6>;/ <U000115BF>..<U000115D7>;<U0001163F>;<U00011641>..<U00011643>;/ @@ -613,16 +630,19 @@ punct / <U00011943>..<U00011946>;<U000119E0>;<U000119E2>;/ <U00011A33>..<U00011A34>;<U00011A3F>..<U00011A47>;/ <U00011A98>..<U00011A9C>;<U00011A9E>..<U00011AA2>;/ - <U00011B00>..<U00011B09>;<U00011C3F>;<U00011C41>..<U00011C45>;/ - <U00011C5A>..<U00011C6C>;<U00011C70>..<U00011C71>;<U00011D42>;/ - <U00011D44>..<U00011D45>;<U00011D97>;<U00011EF7>..<U00011EF8>;/ - <U00011F41>..<U00011F4F>;<U00011FC0>..<U00011FF1>;<U00011FFF>;/ + <U00011B00>..<U00011B09>;<U00011BE1>;<U00011C3F>;/ + <U00011C41>..<U00011C45>;<U00011C5A>..<U00011C6C>;/ + <U00011C70>..<U00011C71>;<U00011D42>;<U00011D44>..<U00011D45>;/ + <U00011D97>;<U00011EF7>..<U00011EF8>;<U00011F41>..<U00011F4F>;/ + <U00011F5A>;<U00011FC0>..<U00011FF1>;<U00011FFF>;/ <U00012470>..<U00012474>;<U00012FF1>..<U00012FF2>;/ - <U00013430>..<U00013440>;<U00013447>..<U00013455>;/ + <U00013430>..<U00013440>;<U00013447>..<U00013455>;<U0001612F>;/ <U00016A6E>..<U00016A6F>;<U00016AF0>..<U00016AF5>;/ <U00016B30>..<U00016B3F>;<U00016B44>..<U00016B45>;/ - <U00016B5B>..<U00016B61>;<U00016E80>..<U00016E9A>;<U00016FE2>;/ - <U00016FE4>;<U0001BC9C>..<U0001BC9D>;<U0001BC9F>..<U0001BCA3>;/ + <U00016B5B>..<U00016B61>;<U00016D6D>..<U00016D6F>;/ + <U00016E80>..<U00016E9A>;<U00016FE2>;<U00016FE4>;/ + <U0001BC9C>..<U0001BC9D>;<U0001BC9F>..<U0001BCA3>;/ + <U0001CC00>..<U0001CCEF>;<U0001CD00>..<U0001CEB3>;/ <U0001CF00>..<U0001CF2D>;<U0001CF30>..<U0001CF46>;/ <U0001CF50>..<U0001CFC3>;<U0001D000>..<U0001D0F5>;/ <U0001D100>..<U0001D126>;<U0001D129>..<U0001D1EA>;/ @@ -633,31 +653,32 @@ punct / <U0001D800>..<U0001DA8B>;<U0001DA9B>..<U0001DA9F>;/ <U0001DAA1>..<U0001DAAF>;<U0001E130>..<U0001E136>;<U0001E14F>;/ <U0001E2AE>;<U0001E2EC>..<U0001E2EF>;<U0001E2FF>;/ - <U0001E4EC>..<U0001E4EF>;<U0001E8C7>..<U0001E8D6>;/ - <U0001E944>..<U0001E946>;<U0001E948>..<U0001E94A>;/ - <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ - <U0001ED01>..<U0001ED3D>;<U0001EEF0>..<U0001EEF1>;/ - <U0001F000>..<U0001F02B>;<U0001F030>..<U0001F093>;/ - <U0001F0A0>..<U0001F0AE>;<U0001F0B1>..<U0001F0BF>;/ - <U0001F0C1>..<U0001F0CF>;<U0001F0D1>..<U0001F0F5>;/ - <U0001F100>..<U0001F12F>;<U0001F14A>..<U0001F14F>;/ - <U0001F16A>..<U0001F16F>;<U0001F18A>..<U0001F1AD>;/ - <U0001F1E6>..<U0001F202>;<U0001F210>..<U0001F23B>;/ - <U0001F240>..<U0001F248>;<U0001F250>..<U0001F251>;/ - <U0001F260>..<U0001F265>;<U0001F300>..<U0001F6D7>;/ - <U0001F6DC>..<U0001F6EC>;<U0001F6F0>..<U0001F6FC>;/ - <U0001F700>..<U0001F776>;<U0001F77B>..<U0001F7D9>;/ - <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ - <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ - <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ + <U0001E4EC>..<U0001E4EF>;<U0001E5EE>..<U0001E5EF>;<U0001E5FF>;/ + <U0001E8C7>..<U0001E8D6>;<U0001E944>..<U0001E946>;/ + <U0001E948>..<U0001E94A>;<U0001E95E>..<U0001E95F>;/ + <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ + <U0001EEF0>..<U0001EEF1>;<U0001F000>..<U0001F02B>;/ + <U0001F030>..<U0001F093>;<U0001F0A0>..<U0001F0AE>;/ + <U0001F0B1>..<U0001F0BF>;<U0001F0C1>..<U0001F0CF>;/ + <U0001F0D1>..<U0001F0F5>;<U0001F100>..<U0001F12F>;/ + <U0001F14A>..<U0001F14F>;<U0001F16A>..<U0001F16F>;/ + <U0001F18A>..<U0001F1AD>;<U0001F1E6>..<U0001F202>;/ + <U0001F210>..<U0001F23B>;<U0001F240>..<U0001F248>;/ + <U0001F250>..<U0001F251>;<U0001F260>..<U0001F265>;/ + <U0001F300>..<U0001F6D7>;<U0001F6DC>..<U0001F6EC>;/ + <U0001F6F0>..<U0001F6FC>;<U0001F700>..<U0001F776>;/ + <U0001F77B>..<U0001F7D9>;<U0001F7E0>..<U0001F7EB>;<U0001F7F0>;/ + <U0001F800>..<U0001F80B>;<U0001F810>..<U0001F847>;/ + <U0001F850>..<U0001F859>;<U0001F860>..<U0001F887>;/ + <U0001F890>..<U0001F8AD>;<U0001F8B0>..<U0001F8BB>;/ + <U0001F8C0>..<U0001F8C1>;<U0001F900>..<U0001FA53>;/ <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001FA80>..<U0001FA89>;<U0001FA8F>..<U0001FAC6>;/ + <U0001FACE>..<U0001FADC>;<U0001FADF>..<U0001FAE9>;/ + <U0001FAF0>..<U0001FAF8>;<U0001FB00>..<U0001FB92>;/ + <U0001FB94>..<U0001FBEF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> graph / <U0021>..<U007E>;<U00A0>..<U0377>;<U037A>..<U037F>;<U0384>..<U038A>;/ @@ -666,7 +687,7 @@ graph / <U05EF>..<U05F4>;<U0600>..<U070D>;<U070F>..<U074A>;<U074D>..<U07B1>;/ <U07C0>..<U07FA>;<U07FD>..<U082D>;<U0830>..<U083E>;<U0840>..<U085B>;/ <U085E>;<U0860>..<U086A>;<U0870>..<U088E>;<U0890>..<U0891>;/ - <U0898>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ + <U0897>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ <U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;<U09BC>..<U09C4>;/ <U09C7>..<U09C8>;<U09CB>..<U09CE>;<U09D7>;<U09DC>..<U09DD>;/ <U09DF>..<U09E3>;<U09E6>..<U09FE>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;/ @@ -713,38 +734,38 @@ graph / <U1970>..<U1974>;<U1980>..<U19AB>;<U19B0>..<U19C9>;<U19D0>..<U19DA>;/ <U19DE>..<U1A1B>;<U1A1E>..<U1A5E>;<U1A60>..<U1A7C>;<U1A7F>..<U1A89>;/ <U1A90>..<U1A99>;<U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;/ - <U1B50>..<U1B7E>;<U1B80>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;/ - <U1C4D>..<U1C88>;<U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;/ - <U1D00>..<U1F15>;<U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;/ - <U1F50>..<U1F57>;<U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;/ - <U1F80>..<U1FB4>;<U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;/ - <U1FDD>..<U1FEF>;<U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2007>;/ - <U200B>..<U2027>;<U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2071>;/ - <U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;/ - <U2100>..<U218B>;<U2190>..<U2426>;<U2440>..<U244A>;<U2460>..<U2B73>;/ - <U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;/ - <U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;/ - <U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;/ - <U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;/ - <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;/ - <U3001>..<U303F>;<U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;/ - <U3131>..<U318E>;<U3190>..<U31E3>;<U31EF>..<U321E>;<U3220>..<UA48C>;/ - <UA490>..<UA4C6>;<UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA82C>;/ - <UA830>..<UA839>;<UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;/ - <UA8E0>..<UA953>;<UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;/ - <UA9DE>..<UA9FE>;<UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;/ - <UAA5C>..<UAAC2>;<UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;/ - <UAB11>..<UAB16>;<UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;/ - <UAB70>..<UABED>;<UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;/ - <UD7CB>..<UD7FB>;<UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;/ - <UFB13>..<UFB17>;<UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;/ - <UFB40>..<UFB41>;<UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;/ - <UFD92>..<UFDC7>;<UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;/ - <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;/ - <UFEFF>;<UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;/ - <UFFD2>..<UFFD7>;<UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;/ - <UFFF9>..<UFFFD>;<U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ + <U1B4E>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C8A>;/ + <U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;/ + <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ + <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ + <U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;/ + <U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2007>;<U200B>..<U2027>;/ + <U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2071>;<U2074>..<U208E>;/ + <U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;<U2100>..<U218B>;/ + <U2190>..<U2429>;<U2440>..<U244A>;<U2460>..<U2B73>;<U2B76>..<U2B95>;/ + <U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;<U2D30>..<U2D67>;/ + <U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;<U2DA8>..<U2DAE>;/ + <U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;<U2DC8>..<U2DCE>;/ + <U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;<U2E80>..<U2E99>;/ + <U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;<U3001>..<U303F>;/ + <U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;/ + <U3190>..<U31E5>;<U31EF>..<U321E>;<U3220>..<UA48C>;<UA490>..<UA4C6>;/ + <UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CD>;<UA7D0>..<UA7D1>;/ + <UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA82C>;<UA830>..<UA839>;/ + <UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;<UA8E0>..<UA953>;/ + <UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;<UA9DE>..<UA9FE>;/ + <UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;<UAA5C>..<UAAC2>;/ + <UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;<UAB11>..<UAB16>;/ + <UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;<UAB70>..<UABED>;/ + <UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;<UD7CB>..<UD7FB>;/ + <UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;<UFB13>..<UFB17>;/ + <UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;<UFB40>..<UFB41>;/ + <UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;<UFD92>..<UFDC7>;/ + <UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;<UFE54>..<UFE66>;/ + <UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;<UFEFF>;/ + <UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;<UFFD2>..<UFFD7>;/ + <UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ + <U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ <U00010028>..<U0001003A>;<U0001003C>..<U0001003D>;/ <U0001003F>..<U0001004D>;<U00010050>..<U0001005D>;/ <U00010080>..<U000100FA>;<U00010100>..<U00010102>;/ @@ -761,94 +782,105 @@ graph / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010857>..<U0001089E>;/ - <U000108A7>..<U000108AF>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U000108FB>..<U0001091B>;/ - <U0001091F>..<U00010939>;<U0001093F>;<U00010980>..<U000109B7>;/ - <U000109BC>..<U000109CF>;<U000109D2>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A38>..<U00010A3A>;<U00010A3F>..<U00010A48>;/ - <U00010A50>..<U00010A58>;<U00010A60>..<U00010A9F>;/ - <U00010AC0>..<U00010AE6>;<U00010AEB>..<U00010AF6>;/ - <U00010B00>..<U00010B35>;<U00010B39>..<U00010B55>;/ - <U00010B58>..<U00010B72>;<U00010B78>..<U00010B91>;/ - <U00010B99>..<U00010B9C>;<U00010BA9>..<U00010BAF>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010CFA>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E60>..<U00010E7E>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010857>..<U0001089E>;<U000108A7>..<U000108AF>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U000108FB>..<U0001091B>;<U0001091F>..<U00010939>;<U0001093F>;/ + <U00010980>..<U000109B7>;<U000109BC>..<U000109CF>;/ + <U000109D2>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A38>..<U00010A3A>;/ + <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ + <U00010A60>..<U00010A9F>;<U00010AC0>..<U00010AE6>;/ + <U00010AEB>..<U00010AF6>;<U00010B00>..<U00010B35>;/ + <U00010B39>..<U00010B55>;<U00010B58>..<U00010B72>;/ + <U00010B78>..<U00010B91>;<U00010B99>..<U00010B9C>;/ + <U00010BA9>..<U00010BAF>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010CFA>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>..<U00010D85>;/ + <U00010D8E>..<U00010D8F>;<U00010E60>..<U00010E7E>;/ <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAD>;/ - <U00010EB0>..<U00010EB1>;<U00010EFD>..<U00010F27>;/ - <U00010F30>..<U00010F59>;<U00010F70>..<U00010F89>;/ - <U00010FB0>..<U00010FCB>;<U00010FE0>..<U00010FF6>;/ - <U00011000>..<U0001104D>;<U00011052>..<U00011075>;/ - <U0001107F>..<U000110C2>;<U000110CD>;<U000110D0>..<U000110E8>;/ - <U000110F0>..<U000110F9>;<U00011100>..<U00011134>;/ - <U00011136>..<U00011147>;<U00011150>..<U00011176>;/ - <U00011180>..<U000111DF>;<U000111E1>..<U000111F4>;/ - <U00011200>..<U00011211>;<U00011213>..<U00011241>;/ - <U00011280>..<U00011286>;<U00011288>;<U0001128A>..<U0001128D>;/ - <U0001128F>..<U0001129D>;<U0001129F>..<U000112A9>;/ - <U000112B0>..<U000112EA>;<U000112F0>..<U000112F9>;/ - <U00011300>..<U00011303>;<U00011305>..<U0001130C>;/ - <U0001130F>..<U00011310>;<U00011313>..<U00011328>;/ - <U0001132A>..<U00011330>;<U00011332>..<U00011333>;/ - <U00011335>..<U00011339>;<U0001133B>..<U00011344>;/ - <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011350>;/ - <U00011357>;<U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011400>..<U0001145B>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;/ + <U00010EFC>..<U00010F27>;<U00010F30>..<U00010F59>;/ + <U00010F70>..<U00010F89>;<U00010FB0>..<U00010FCB>;/ + <U00010FE0>..<U00010FF6>;<U00011000>..<U0001104D>;/ + <U00011052>..<U00011075>;<U0001107F>..<U000110C2>;<U000110CD>;/ + <U000110D0>..<U000110E8>;<U000110F0>..<U000110F9>;/ + <U00011100>..<U00011134>;<U00011136>..<U00011147>;/ + <U00011150>..<U00011176>;<U00011180>..<U000111DF>;/ + <U000111E1>..<U000111F4>;<U00011200>..<U00011211>;/ + <U00011213>..<U00011241>;<U00011280>..<U00011286>;<U00011288>;/ + <U0001128A>..<U0001128D>;<U0001128F>..<U0001129D>;/ + <U0001129F>..<U000112A9>;<U000112B0>..<U000112EA>;/ + <U000112F0>..<U000112F9>;<U00011300>..<U00011303>;/ + <U00011305>..<U0001130C>;<U0001130F>..<U00011310>;/ + <U00011313>..<U00011328>;<U0001132A>..<U00011330>;/ + <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ + <U0001133B>..<U00011344>;<U00011347>..<U00011348>;/ + <U0001134B>..<U0001134D>;<U00011350>;<U00011357>;/ + <U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ + <U00011370>..<U00011374>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113D5>;<U000113D7>..<U000113D8>;/ + <U000113E1>..<U000113E2>;<U00011400>..<U0001145B>;/ <U0001145D>..<U00011461>;<U00011480>..<U000114C7>;/ <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ <U000115B8>..<U000115DD>;<U00011600>..<U00011644>;/ <U00011650>..<U00011659>;<U00011660>..<U0001166C>;/ <U00011680>..<U000116B9>;<U000116C0>..<U000116C9>;/ - <U00011700>..<U0001171A>;<U0001171D>..<U0001172B>;/ - <U00011730>..<U00011746>;<U00011800>..<U0001183B>;/ - <U000118A0>..<U000118F2>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U00011946>;<U00011950>..<U00011959>;/ - <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ - <U000119DA>..<U000119E4>;<U00011A00>..<U00011A47>;/ - <U00011A50>..<U00011AA2>;<U00011AB0>..<U00011AF8>;/ - <U00011B00>..<U00011B09>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C45>;/ - <U00011C50>..<U00011C6C>;<U00011C70>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D47>;<U00011D50>..<U00011D59>;/ - <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ - <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ - <U00011D93>..<U00011D98>;<U00011DA0>..<U00011DA9>;/ - <U00011EE0>..<U00011EF8>;<U00011F00>..<U00011F10>;/ - <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F59>;<U00011FB0>;/ - <U00011FC0>..<U00011FF1>;<U00011FFF>..<U00012399>;/ - <U00012400>..<U0001246E>;<U00012470>..<U00012474>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF2>;/ - <U00013000>..<U00013455>;<U00014400>..<U00014646>;/ - <U00016800>..<U00016A38>;<U00016A40>..<U00016A5E>;/ - <U00016A60>..<U00016A69>;<U00016A6E>..<U00016ABE>;/ - <U00016AC0>..<U00016AC9>;<U00016AD0>..<U00016AED>;/ - <U00016AF0>..<U00016AF5>;<U00016B00>..<U00016B45>;/ - <U00016B50>..<U00016B59>;<U00016B5B>..<U00016B61>;/ - <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U000116D0>..<U000116E3>;<U00011700>..<U0001171A>;/ + <U0001171D>..<U0001172B>;<U00011730>..<U00011746>;/ + <U00011800>..<U0001183B>;<U000118A0>..<U000118F2>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U00011946>;/ + <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ + <U000119AA>..<U000119D7>;<U000119DA>..<U000119E4>;/ + <U00011A00>..<U00011A47>;<U00011A50>..<U00011AA2>;/ + <U00011AB0>..<U00011AF8>;<U00011B00>..<U00011B09>;/ + <U00011BC0>..<U00011BE1>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C45>;<U00011C50>..<U00011C6C>;/ + <U00011C70>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D47>;/ + <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ + <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ + <U00011D90>..<U00011D91>;<U00011D93>..<U00011D98>;/ + <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF8>;/ + <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ + <U00011F3E>..<U00011F5A>;<U00011FB0>;<U00011FC0>..<U00011FF1>;/ + <U00011FFF>..<U00012399>;<U00012400>..<U0001246E>;/ + <U00012470>..<U00012474>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF2>;<U00013000>..<U00013455>;/ + <U00013460>..<U000143FA>;<U00014400>..<U00014646>;/ + <U00016100>..<U00016139>;<U00016800>..<U00016A38>;/ + <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ + <U00016A6E>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ + <U00016AD0>..<U00016AED>;<U00016AF0>..<U00016AF5>;/ + <U00016B00>..<U00016B45>;<U00016B50>..<U00016B59>;/ + <U00016B5B>..<U00016B61>;<U00016B63>..<U00016B77>;/ + <U00016B7D>..<U00016B8F>;<U00016D40>..<U00016D79>;/ <U00016E40>..<U00016E9A>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;/ - <U0001BC9C>..<U0001BCA3>;<U0001CF00>..<U0001CF2D>;/ + <U0001BC9C>..<U0001BCA3>;<U0001CC00>..<U0001CCF9>;/ + <U0001CD00>..<U0001CEB3>;<U0001CF00>..<U0001CF2D>;/ <U0001CF30>..<U0001CF46>;<U0001CF50>..<U0001CFC3>;/ <U0001D000>..<U0001D0F5>;<U0001D100>..<U0001D126>;/ <U0001D129>..<U0001D1EA>;<U0001D200>..<U0001D245>;/ @@ -871,16 +903,16 @@ graph / <U0001E100>..<U0001E12C>;<U0001E130>..<U0001E13D>;/ <U0001E140>..<U0001E149>;<U0001E14E>..<U0001E14F>;/ <U0001E290>..<U0001E2AE>;<U0001E2C0>..<U0001E2F9>;<U0001E2FF>;/ - <U0001E4D0>..<U0001E4F9>;<U0001E7E0>..<U0001E7E6>;/ - <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ - <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ - <U0001E8C7>..<U0001E8D6>;<U0001E900>..<U0001E94B>;/ - <U0001E950>..<U0001E959>;<U0001E95E>..<U0001E95F>;/ - <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ - <U0001EE00>..<U0001EE03>;<U0001EE05>..<U0001EE1F>;/ - <U0001EE21>..<U0001EE22>;<U0001EE24>;<U0001EE27>;/ - <U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;<U0001EE39>;/ - <U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ + <U0001E4D0>..<U0001E4F9>;<U0001E5D0>..<U0001E5FA>;<U0001E5FF>;/ + <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ + <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ + <U0001E800>..<U0001E8C4>;<U0001E8C7>..<U0001E8D6>;/ + <U0001E900>..<U0001E94B>;<U0001E950>..<U0001E959>;/ + <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ + <U0001ED01>..<U0001ED3D>;<U0001EE00>..<U0001EE03>;/ + <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ + <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ + <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ <U0001EE4D>..<U0001EE4F>;<U0001EE51>..<U0001EE52>;<U0001EE54>;/ <U0001EE57>;<U0001EE59>;<U0001EE5B>;<U0001EE5D>;<U0001EE5F>;/ <U0001EE61>..<U0001EE62>;<U0001EE64>;<U0001EE67>..<U0001EE6A>;/ @@ -900,19 +932,19 @@ graph / <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ - <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;/ - <U0001FBF0>..<U0001FBF9>;<U00020000>..<U0002A6DF>;/ - <U0002A700>..<U0002B739>;<U0002B740>..<U0002B81D>;/ - <U0002B820>..<U0002CEA1>;<U0002CEB0>..<U0002EBE0>;/ - <U0002EBF0>..<U0002EE5D>;<U0002F800>..<U0002FA1D>;/ - <U00030000>..<U0003134A>;<U00031350>..<U000323AF>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001F8B0>..<U0001F8BB>;<U0001F8C0>..<U0001F8C1>;/ + <U0001F900>..<U0001FA53>;<U0001FA60>..<U0001FA6D>;/ + <U0001FA70>..<U0001FA7C>;<U0001FA80>..<U0001FA89>;/ + <U0001FA8F>..<U0001FAC6>;<U0001FACE>..<U0001FADC>;/ + <U0001FADF>..<U0001FAE9>;<U0001FAF0>..<U0001FAF8>;/ + <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBF9>;/ + <U00020000>..<U0002A6DF>;<U0002A700>..<U0002B739>;/ + <U0002B740>..<U0002B81D>;<U0002B820>..<U0002CEA1>;/ + <U0002CEB0>..<U0002EBE0>;<U0002EBF0>..<U0002EE5D>;/ + <U0002F800>..<U0002FA1D>;<U00030000>..<U0003134A>;/ + <U00031350>..<U000323AF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> print / <U0020>..<U007E>;<U00A0>..<U0377>;<U037A>..<U037F>;<U0384>..<U038A>;/ @@ -921,7 +953,7 @@ print / <U05EF>..<U05F4>;<U0600>..<U070D>;<U070F>..<U074A>;<U074D>..<U07B1>;/ <U07C0>..<U07FA>;<U07FD>..<U082D>;<U0830>..<U083E>;<U0840>..<U085B>;/ <U085E>;<U0860>..<U086A>;<U0870>..<U088E>;<U0890>..<U0891>;/ - <U0898>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ + <U0897>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ <U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;<U09BC>..<U09C4>;/ <U09C7>..<U09C8>;<U09CB>..<U09CE>;<U09D7>;<U09DC>..<U09DD>;/ <U09DF>..<U09E3>;<U09E6>..<U09FE>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;/ @@ -967,38 +999,38 @@ print / <U1930>..<U193B>;<U1940>;<U1944>..<U196D>;<U1970>..<U1974>;/ <U1980>..<U19AB>;<U19B0>..<U19C9>;<U19D0>..<U19DA>;<U19DE>..<U1A1B>;/ <U1A1E>..<U1A5E>;<U1A60>..<U1A7C>;<U1A7F>..<U1A89>;<U1A90>..<U1A99>;/ - <U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;<U1B50>..<U1B7E>;/ - <U1B80>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C88>;/ - <U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;/ - <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ - <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ - <U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;/ - <U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2000>..<U2027>;<U202A>..<U2064>;/ - <U2066>..<U2071>;<U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;/ - <U20D0>..<U20F0>;<U2100>..<U218B>;<U2190>..<U2426>;<U2440>..<U244A>;/ - <U2460>..<U2B73>;<U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;/ - <U2D27>;<U2D2D>;<U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;/ - <U2DA0>..<U2DA6>;<U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;/ - <U2DC0>..<U2DC6>;<U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;/ - <U2DE0>..<U2E5D>;<U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;/ - <U2FF0>..<U303F>;<U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;/ - <U3131>..<U318E>;<U3190>..<U31E3>;<U31EF>..<U321E>;<U3220>..<UA48C>;/ - <UA490>..<UA4C6>;<UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA82C>;/ - <UA830>..<UA839>;<UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;/ - <UA8E0>..<UA953>;<UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;/ - <UA9DE>..<UA9FE>;<UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;/ - <UAA5C>..<UAAC2>;<UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;/ - <UAB11>..<UAB16>;<UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;/ - <UAB70>..<UABED>;<UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;/ - <UD7CB>..<UD7FB>;<UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;/ - <UFB13>..<UFB17>;<UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;/ - <UFB40>..<UFB41>;<UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;/ - <UFD92>..<UFDC7>;<UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;/ - <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;/ - <UFEFF>;<UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;/ - <UFFD2>..<UFFD7>;<UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;/ - <UFFF9>..<UFFFD>;<U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ + <U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;<U1B4E>..<U1BF3>;/ + <U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C8A>;<U1C90>..<U1CBA>;/ + <U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;<U1F18>..<U1F1D>;/ + <U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;<U1F59>;<U1F5B>;/ + <U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;<U1FB6>..<U1FC4>;/ + <U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;<U1FF2>..<U1FF4>;/ + <U1FF6>..<U1FFE>;<U2000>..<U2027>;<U202A>..<U2064>;<U2066>..<U2071>;/ + <U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;/ + <U2100>..<U218B>;<U2190>..<U2429>;<U2440>..<U244A>;<U2460>..<U2B73>;/ + <U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;/ + <U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;/ + <U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;/ + <U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;/ + <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U303F>;/ + <U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;/ + <U3190>..<U31E5>;<U31EF>..<U321E>;<U3220>..<UA48C>;<UA490>..<UA4C6>;/ + <UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CD>;<UA7D0>..<UA7D1>;/ + <UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA82C>;<UA830>..<UA839>;/ + <UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;<UA8E0>..<UA953>;/ + <UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;<UA9DE>..<UA9FE>;/ + <UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;<UAA5C>..<UAAC2>;/ + <UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;<UAB11>..<UAB16>;/ + <UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;<UAB70>..<UABED>;/ + <UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;<UD7CB>..<UD7FB>;/ + <UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;<UFB13>..<UFB17>;/ + <UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;<UFB40>..<UFB41>;/ + <UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;<UFD92>..<UFDC7>;/ + <UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;<UFE54>..<UFE66>;/ + <UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;<UFEFF>;/ + <UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;<UFFD2>..<UFFD7>;/ + <UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ + <U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ <U00010028>..<U0001003A>;<U0001003C>..<U0001003D>;/ <U0001003F>..<U0001004D>;<U00010050>..<U0001005D>;/ <U00010080>..<U000100FA>;<U00010100>..<U00010102>;/ @@ -1015,94 +1047,105 @@ print / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010857>..<U0001089E>;/ - <U000108A7>..<U000108AF>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U000108FB>..<U0001091B>;/ - <U0001091F>..<U00010939>;<U0001093F>;<U00010980>..<U000109B7>;/ - <U000109BC>..<U000109CF>;<U000109D2>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A38>..<U00010A3A>;<U00010A3F>..<U00010A48>;/ - <U00010A50>..<U00010A58>;<U00010A60>..<U00010A9F>;/ - <U00010AC0>..<U00010AE6>;<U00010AEB>..<U00010AF6>;/ - <U00010B00>..<U00010B35>;<U00010B39>..<U00010B55>;/ - <U00010B58>..<U00010B72>;<U00010B78>..<U00010B91>;/ - <U00010B99>..<U00010B9C>;<U00010BA9>..<U00010BAF>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010CFA>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E60>..<U00010E7E>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010857>..<U0001089E>;<U000108A7>..<U000108AF>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U000108FB>..<U0001091B>;<U0001091F>..<U00010939>;<U0001093F>;/ + <U00010980>..<U000109B7>;<U000109BC>..<U000109CF>;/ + <U000109D2>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A38>..<U00010A3A>;/ + <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ + <U00010A60>..<U00010A9F>;<U00010AC0>..<U00010AE6>;/ + <U00010AEB>..<U00010AF6>;<U00010B00>..<U00010B35>;/ + <U00010B39>..<U00010B55>;<U00010B58>..<U00010B72>;/ + <U00010B78>..<U00010B91>;<U00010B99>..<U00010B9C>;/ + <U00010BA9>..<U00010BAF>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010CFA>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>..<U00010D85>;/ + <U00010D8E>..<U00010D8F>;<U00010E60>..<U00010E7E>;/ <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAD>;/ - <U00010EB0>..<U00010EB1>;<U00010EFD>..<U00010F27>;/ - <U00010F30>..<U00010F59>;<U00010F70>..<U00010F89>;/ - <U00010FB0>..<U00010FCB>;<U00010FE0>..<U00010FF6>;/ - <U00011000>..<U0001104D>;<U00011052>..<U00011075>;/ - <U0001107F>..<U000110C2>;<U000110CD>;<U000110D0>..<U000110E8>;/ - <U000110F0>..<U000110F9>;<U00011100>..<U00011134>;/ - <U00011136>..<U00011147>;<U00011150>..<U00011176>;/ - <U00011180>..<U000111DF>;<U000111E1>..<U000111F4>;/ - <U00011200>..<U00011211>;<U00011213>..<U00011241>;/ - <U00011280>..<U00011286>;<U00011288>;<U0001128A>..<U0001128D>;/ - <U0001128F>..<U0001129D>;<U0001129F>..<U000112A9>;/ - <U000112B0>..<U000112EA>;<U000112F0>..<U000112F9>;/ - <U00011300>..<U00011303>;<U00011305>..<U0001130C>;/ - <U0001130F>..<U00011310>;<U00011313>..<U00011328>;/ - <U0001132A>..<U00011330>;<U00011332>..<U00011333>;/ - <U00011335>..<U00011339>;<U0001133B>..<U00011344>;/ - <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011350>;/ - <U00011357>;<U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011400>..<U0001145B>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;/ + <U00010EFC>..<U00010F27>;<U00010F30>..<U00010F59>;/ + <U00010F70>..<U00010F89>;<U00010FB0>..<U00010FCB>;/ + <U00010FE0>..<U00010FF6>;<U00011000>..<U0001104D>;/ + <U00011052>..<U00011075>;<U0001107F>..<U000110C2>;<U000110CD>;/ + <U000110D0>..<U000110E8>;<U000110F0>..<U000110F9>;/ + <U00011100>..<U00011134>;<U00011136>..<U00011147>;/ + <U00011150>..<U00011176>;<U00011180>..<U000111DF>;/ + <U000111E1>..<U000111F4>;<U00011200>..<U00011211>;/ + <U00011213>..<U00011241>;<U00011280>..<U00011286>;<U00011288>;/ + <U0001128A>..<U0001128D>;<U0001128F>..<U0001129D>;/ + <U0001129F>..<U000112A9>;<U000112B0>..<U000112EA>;/ + <U000112F0>..<U000112F9>;<U00011300>..<U00011303>;/ + <U00011305>..<U0001130C>;<U0001130F>..<U00011310>;/ + <U00011313>..<U00011328>;<U0001132A>..<U00011330>;/ + <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ + <U0001133B>..<U00011344>;<U00011347>..<U00011348>;/ + <U0001134B>..<U0001134D>;<U00011350>;<U00011357>;/ + <U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ + <U00011370>..<U00011374>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113D5>;<U000113D7>..<U000113D8>;/ + <U000113E1>..<U000113E2>;<U00011400>..<U0001145B>;/ <U0001145D>..<U00011461>;<U00011480>..<U000114C7>;/ <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ <U000115B8>..<U000115DD>;<U00011600>..<U00011644>;/ <U00011650>..<U00011659>;<U00011660>..<U0001166C>;/ <U00011680>..<U000116B9>;<U000116C0>..<U000116C9>;/ - <U00011700>..<U0001171A>;<U0001171D>..<U0001172B>;/ - <U00011730>..<U00011746>;<U00011800>..<U0001183B>;/ - <U000118A0>..<U000118F2>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U00011946>;<U00011950>..<U00011959>;/ - <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ - <U000119DA>..<U000119E4>;<U00011A00>..<U00011A47>;/ - <U00011A50>..<U00011AA2>;<U00011AB0>..<U00011AF8>;/ - <U00011B00>..<U00011B09>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C45>;/ - <U00011C50>..<U00011C6C>;<U00011C70>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D47>;<U00011D50>..<U00011D59>;/ - <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ - <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ - <U00011D93>..<U00011D98>;<U00011DA0>..<U00011DA9>;/ - <U00011EE0>..<U00011EF8>;<U00011F00>..<U00011F10>;/ - <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F59>;<U00011FB0>;/ - <U00011FC0>..<U00011FF1>;<U00011FFF>..<U00012399>;/ - <U00012400>..<U0001246E>;<U00012470>..<U00012474>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF2>;/ - <U00013000>..<U00013455>;<U00014400>..<U00014646>;/ - <U00016800>..<U00016A38>;<U00016A40>..<U00016A5E>;/ - <U00016A60>..<U00016A69>;<U00016A6E>..<U00016ABE>;/ - <U00016AC0>..<U00016AC9>;<U00016AD0>..<U00016AED>;/ - <U00016AF0>..<U00016AF5>;<U00016B00>..<U00016B45>;/ - <U00016B50>..<U00016B59>;<U00016B5B>..<U00016B61>;/ - <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U000116D0>..<U000116E3>;<U00011700>..<U0001171A>;/ + <U0001171D>..<U0001172B>;<U00011730>..<U00011746>;/ + <U00011800>..<U0001183B>;<U000118A0>..<U000118F2>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U00011946>;/ + <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ + <U000119AA>..<U000119D7>;<U000119DA>..<U000119E4>;/ + <U00011A00>..<U00011A47>;<U00011A50>..<U00011AA2>;/ + <U00011AB0>..<U00011AF8>;<U00011B00>..<U00011B09>;/ + <U00011BC0>..<U00011BE1>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C45>;<U00011C50>..<U00011C6C>;/ + <U00011C70>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D47>;/ + <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ + <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ + <U00011D90>..<U00011D91>;<U00011D93>..<U00011D98>;/ + <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF8>;/ + <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ + <U00011F3E>..<U00011F5A>;<U00011FB0>;<U00011FC0>..<U00011FF1>;/ + <U00011FFF>..<U00012399>;<U00012400>..<U0001246E>;/ + <U00012470>..<U00012474>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF2>;<U00013000>..<U00013455>;/ + <U00013460>..<U000143FA>;<U00014400>..<U00014646>;/ + <U00016100>..<U00016139>;<U00016800>..<U00016A38>;/ + <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ + <U00016A6E>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ + <U00016AD0>..<U00016AED>;<U00016AF0>..<U00016AF5>;/ + <U00016B00>..<U00016B45>;<U00016B50>..<U00016B59>;/ + <U00016B5B>..<U00016B61>;<U00016B63>..<U00016B77>;/ + <U00016B7D>..<U00016B8F>;<U00016D40>..<U00016D79>;/ <U00016E40>..<U00016E9A>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;/ - <U0001BC9C>..<U0001BCA3>;<U0001CF00>..<U0001CF2D>;/ + <U0001BC9C>..<U0001BCA3>;<U0001CC00>..<U0001CCF9>;/ + <U0001CD00>..<U0001CEB3>;<U0001CF00>..<U0001CF2D>;/ <U0001CF30>..<U0001CF46>;<U0001CF50>..<U0001CFC3>;/ <U0001D000>..<U0001D0F5>;<U0001D100>..<U0001D126>;/ <U0001D129>..<U0001D1EA>;<U0001D200>..<U0001D245>;/ @@ -1125,16 +1168,16 @@ print / <U0001E100>..<U0001E12C>;<U0001E130>..<U0001E13D>;/ <U0001E140>..<U0001E149>;<U0001E14E>..<U0001E14F>;/ <U0001E290>..<U0001E2AE>;<U0001E2C0>..<U0001E2F9>;<U0001E2FF>;/ - <U0001E4D0>..<U0001E4F9>;<U0001E7E0>..<U0001E7E6>;/ - <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ - <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ - <U0001E8C7>..<U0001E8D6>;<U0001E900>..<U0001E94B>;/ - <U0001E950>..<U0001E959>;<U0001E95E>..<U0001E95F>;/ - <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ - <U0001EE00>..<U0001EE03>;<U0001EE05>..<U0001EE1F>;/ - <U0001EE21>..<U0001EE22>;<U0001EE24>;<U0001EE27>;/ - <U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;<U0001EE39>;/ - <U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ + <U0001E4D0>..<U0001E4F9>;<U0001E5D0>..<U0001E5FA>;<U0001E5FF>;/ + <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ + <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ + <U0001E800>..<U0001E8C4>;<U0001E8C7>..<U0001E8D6>;/ + <U0001E900>..<U0001E94B>;<U0001E950>..<U0001E959>;/ + <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ + <U0001ED01>..<U0001ED3D>;<U0001EE00>..<U0001EE03>;/ + <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ + <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ + <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ <U0001EE4D>..<U0001EE4F>;<U0001EE51>..<U0001EE52>;<U0001EE54>;/ <U0001EE57>;<U0001EE59>;<U0001EE5B>;<U0001EE5D>;<U0001EE5F>;/ <U0001EE61>..<U0001EE62>;<U0001EE64>;<U0001EE67>..<U0001EE6A>;/ @@ -1154,19 +1197,19 @@ print / <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ - <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;/ - <U0001FBF0>..<U0001FBF9>;<U00020000>..<U0002A6DF>;/ - <U0002A700>..<U0002B739>;<U0002B740>..<U0002B81D>;/ - <U0002B820>..<U0002CEA1>;<U0002CEB0>..<U0002EBE0>;/ - <U0002EBF0>..<U0002EE5D>;<U0002F800>..<U0002FA1D>;/ - <U00030000>..<U0003134A>;<U00031350>..<U000323AF>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001F8B0>..<U0001F8BB>;<U0001F8C0>..<U0001F8C1>;/ + <U0001F900>..<U0001FA53>;<U0001FA60>..<U0001FA6D>;/ + <U0001FA70>..<U0001FA7C>;<U0001FA80>..<U0001FA89>;/ + <U0001FA8F>..<U0001FAC6>;<U0001FACE>..<U0001FADC>;/ + <U0001FADF>..<U0001FAE9>;<U0001FAF0>..<U0001FAF8>;/ + <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBF9>;/ + <U00020000>..<U0002A6DF>;<U0002A700>..<U0002B739>;/ + <U0002B740>..<U0002B81D>;<U0002B820>..<U0002CEA1>;/ + <U0002CEB0>..<U0002EBE0>;<U0002EBF0>..<U0002EE5D>;/ + <U0002F800>..<U0002FA1D>;<U00030000>..<U0003134A>;/ + <U00031350>..<U000323AF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> % The "xdigit" class must only contain the BASIC LATIN digits and A-F, a-f, % says ISO C 99 (sections 7.25.2.1.12 and 6.4.4.1). @@ -1210,402 +1253,414 @@ toupper / (<U0177>,<U0176>);(<U017A>,<U0179>);(<U017C>,<U017B>);(<U017E>,<U017D>);/ (<U017F>,<U0053>);(<U0180>,<U0243>);(<U0183>,<U0182>);(<U0185>,<U0184>);/ (<U0188>,<U0187>);(<U018C>,<U018B>);(<U0192>,<U0191>);(<U0195>,<U01F6>);/ - (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019E>,<U0220>);(<U01A1>,<U01A0>);/ - (<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);(<U01AD>,<U01AC>);/ - (<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);(<U01B9>,<U01B8>);/ - (<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C5>,<U01C4>);(<U01C6>,<U01C4>);/ - (<U01C8>,<U01C7>);(<U01C9>,<U01C7>);(<U01CB>,<U01CA>);(<U01CC>,<U01CA>);/ - (<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);(<U01D4>,<U01D3>);/ - (<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);(<U01DC>,<U01DB>);/ - (<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);(<U01E3>,<U01E2>);/ - (<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);(<U01EB>,<U01EA>);/ - (<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F2>,<U01F1>);(<U01F3>,<U01F1>);/ - (<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);(<U01FD>,<U01FC>);/ - (<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);(<U0205>,<U0204>);/ - (<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);(<U020D>,<U020C>);/ - (<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);(<U0215>,<U0214>);/ - (<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);(<U021D>,<U021C>);/ - (<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);(<U0227>,<U0226>);/ - (<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);(<U022F>,<U022E>);/ - (<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);(<U023F>,<U2C7E>);/ - (<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);(<U0249>,<U0248>);/ - (<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);(<U0250>,<U2C6F>);/ - (<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);(<U0254>,<U0186>);/ - (<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);(<U025B>,<U0190>);/ - (<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);(<U0263>,<U0194>);/ - (<U0265>,<UA78D>);(<U0266>,<UA7AA>);(<U0268>,<U0197>);(<U0269>,<U0196>);/ - (<U026A>,<UA7AE>);(<U026B>,<U2C62>);(<U026C>,<UA7AD>);(<U026F>,<U019C>);/ - (<U0271>,<U2C6E>);(<U0272>,<U019D>);(<U0275>,<U019F>);(<U027D>,<U2C64>);/ - (<U0280>,<U01A6>);(<U0282>,<UA7C5>);(<U0283>,<U01A9>);(<U0287>,<UA7B1>);/ - (<U0288>,<U01AE>);(<U0289>,<U0244>);(<U028A>,<U01B1>);(<U028B>,<U01B2>);/ - (<U028C>,<U0245>);(<U0292>,<U01B7>);(<U029D>,<UA7B2>);(<U029E>,<UA7B0>);/ - (<U0345>,<U0399>);(<U0371>,<U0370>);(<U0373>,<U0372>);(<U0377>,<U0376>);/ - (<U037B>,<U03FD>);(<U037C>,<U03FE>);(<U037D>,<U03FF>);(<U03AC>,<U0386>);/ - (<U03AD>,<U0388>);(<U03AE>,<U0389>);(<U03AF>,<U038A>);(<U03B1>,<U0391>);/ - (<U03B2>,<U0392>);(<U03B3>,<U0393>);(<U03B4>,<U0394>);(<U03B5>,<U0395>);/ - (<U03B6>,<U0396>);(<U03B7>,<U0397>);(<U03B8>,<U0398>);(<U03B9>,<U0399>);/ - (<U03BA>,<U039A>);(<U03BB>,<U039B>);(<U03BC>,<U039C>);(<U03BD>,<U039D>);/ - (<U03BE>,<U039E>);(<U03BF>,<U039F>);(<U03C0>,<U03A0>);(<U03C1>,<U03A1>);/ - (<U03C2>,<U03A3>);(<U03C3>,<U03A3>);(<U03C4>,<U03A4>);(<U03C5>,<U03A5>);/ - (<U03C6>,<U03A6>);(<U03C7>,<U03A7>);(<U03C8>,<U03A8>);(<U03C9>,<U03A9>);/ - (<U03CA>,<U03AA>);(<U03CB>,<U03AB>);(<U03CC>,<U038C>);(<U03CD>,<U038E>);/ - (<U03CE>,<U038F>);(<U03D0>,<U0392>);(<U03D1>,<U0398>);(<U03D5>,<U03A6>);/ - (<U03D6>,<U03A0>);(<U03D7>,<U03CF>);(<U03D9>,<U03D8>);(<U03DB>,<U03DA>);/ - (<U03DD>,<U03DC>);(<U03DF>,<U03DE>);(<U03E1>,<U03E0>);(<U03E3>,<U03E2>);/ - (<U03E5>,<U03E4>);(<U03E7>,<U03E6>);(<U03E9>,<U03E8>);(<U03EB>,<U03EA>);/ - (<U03ED>,<U03EC>);(<U03EF>,<U03EE>);(<U03F0>,<U039A>);(<U03F1>,<U03A1>);/ - (<U03F2>,<U03F9>);(<U03F3>,<U037F>);(<U03F5>,<U0395>);(<U03F8>,<U03F7>);/ - (<U03FB>,<U03FA>);(<U0430>,<U0410>);(<U0431>,<U0411>);(<U0432>,<U0412>);/ - (<U0433>,<U0413>);(<U0434>,<U0414>);(<U0435>,<U0415>);(<U0436>,<U0416>);/ - (<U0437>,<U0417>);(<U0438>,<U0418>);(<U0439>,<U0419>);(<U043A>,<U041A>);/ - (<U043B>,<U041B>);(<U043C>,<U041C>);(<U043D>,<U041D>);(<U043E>,<U041E>);/ - (<U043F>,<U041F>);(<U0440>,<U0420>);(<U0441>,<U0421>);(<U0442>,<U0422>);/ - (<U0443>,<U0423>);(<U0444>,<U0424>);(<U0445>,<U0425>);(<U0446>,<U0426>);/ - (<U0447>,<U0427>);(<U0448>,<U0428>);(<U0449>,<U0429>);(<U044A>,<U042A>);/ - (<U044B>,<U042B>);(<U044C>,<U042C>);(<U044D>,<U042D>);(<U044E>,<U042E>);/ - (<U044F>,<U042F>);(<U0450>,<U0400>);(<U0451>,<U0401>);(<U0452>,<U0402>);/ - (<U0453>,<U0403>);(<U0454>,<U0404>);(<U0455>,<U0405>);(<U0456>,<U0406>);/ - (<U0457>,<U0407>);(<U0458>,<U0408>);(<U0459>,<U0409>);(<U045A>,<U040A>);/ - (<U045B>,<U040B>);(<U045C>,<U040C>);(<U045D>,<U040D>);(<U045E>,<U040E>);/ - (<U045F>,<U040F>);(<U0461>,<U0460>);(<U0463>,<U0462>);(<U0465>,<U0464>);/ - (<U0467>,<U0466>);(<U0469>,<U0468>);(<U046B>,<U046A>);(<U046D>,<U046C>);/ - (<U046F>,<U046E>);(<U0471>,<U0470>);(<U0473>,<U0472>);(<U0475>,<U0474>);/ - (<U0477>,<U0476>);(<U0479>,<U0478>);(<U047B>,<U047A>);(<U047D>,<U047C>);/ - (<U047F>,<U047E>);(<U0481>,<U0480>);(<U048B>,<U048A>);(<U048D>,<U048C>);/ - (<U048F>,<U048E>);(<U0491>,<U0490>);(<U0493>,<U0492>);(<U0495>,<U0494>);/ - (<U0497>,<U0496>);(<U0499>,<U0498>);(<U049B>,<U049A>);(<U049D>,<U049C>);/ - (<U049F>,<U049E>);(<U04A1>,<U04A0>);(<U04A3>,<U04A2>);(<U04A5>,<U04A4>);/ - (<U04A7>,<U04A6>);(<U04A9>,<U04A8>);(<U04AB>,<U04AA>);(<U04AD>,<U04AC>);/ - (<U04AF>,<U04AE>);(<U04B1>,<U04B0>);(<U04B3>,<U04B2>);(<U04B5>,<U04B4>);/ - (<U04B7>,<U04B6>);(<U04B9>,<U04B8>);(<U04BB>,<U04BA>);(<U04BD>,<U04BC>);/ - (<U04BF>,<U04BE>);(<U04C2>,<U04C1>);(<U04C4>,<U04C3>);(<U04C6>,<U04C5>);/ - (<U04C8>,<U04C7>);(<U04CA>,<U04C9>);(<U04CC>,<U04CB>);(<U04CE>,<U04CD>);/ - (<U04CF>,<U04C0>);(<U04D1>,<U04D0>);(<U04D3>,<U04D2>);(<U04D5>,<U04D4>);/ - (<U04D7>,<U04D6>);(<U04D9>,<U04D8>);(<U04DB>,<U04DA>);(<U04DD>,<U04DC>);/ - (<U04DF>,<U04DE>);(<U04E1>,<U04E0>);(<U04E3>,<U04E2>);(<U04E5>,<U04E4>);/ - (<U04E7>,<U04E6>);(<U04E9>,<U04E8>);(<U04EB>,<U04EA>);(<U04ED>,<U04EC>);/ - (<U04EF>,<U04EE>);(<U04F1>,<U04F0>);(<U04F3>,<U04F2>);(<U04F5>,<U04F4>);/ - (<U04F7>,<U04F6>);(<U04F9>,<U04F8>);(<U04FB>,<U04FA>);(<U04FD>,<U04FC>);/ - (<U04FF>,<U04FE>);(<U0501>,<U0500>);(<U0503>,<U0502>);(<U0505>,<U0504>);/ - (<U0507>,<U0506>);(<U0509>,<U0508>);(<U050B>,<U050A>);(<U050D>,<U050C>);/ - (<U050F>,<U050E>);(<U0511>,<U0510>);(<U0513>,<U0512>);(<U0515>,<U0514>);/ - (<U0517>,<U0516>);(<U0519>,<U0518>);(<U051B>,<U051A>);(<U051D>,<U051C>);/ - (<U051F>,<U051E>);(<U0521>,<U0520>);(<U0523>,<U0522>);(<U0525>,<U0524>);/ - (<U0527>,<U0526>);(<U0529>,<U0528>);(<U052B>,<U052A>);(<U052D>,<U052C>);/ - (<U052F>,<U052E>);(<U0561>,<U0531>);(<U0562>,<U0532>);(<U0563>,<U0533>);/ - (<U0564>,<U0534>);(<U0565>,<U0535>);(<U0566>,<U0536>);(<U0567>,<U0537>);/ - (<U0568>,<U0538>);(<U0569>,<U0539>);(<U056A>,<U053A>);(<U056B>,<U053B>);/ - (<U056C>,<U053C>);(<U056D>,<U053D>);(<U056E>,<U053E>);(<U056F>,<U053F>);/ - (<U0570>,<U0540>);(<U0571>,<U0541>);(<U0572>,<U0542>);(<U0573>,<U0543>);/ - (<U0574>,<U0544>);(<U0575>,<U0545>);(<U0576>,<U0546>);(<U0577>,<U0547>);/ - (<U0578>,<U0548>);(<U0579>,<U0549>);(<U057A>,<U054A>);(<U057B>,<U054B>);/ - (<U057C>,<U054C>);(<U057D>,<U054D>);(<U057E>,<U054E>);(<U057F>,<U054F>);/ - (<U0580>,<U0550>);(<U0581>,<U0551>);(<U0582>,<U0552>);(<U0583>,<U0553>);/ - (<U0584>,<U0554>);(<U0585>,<U0555>);(<U0586>,<U0556>);(<U10D0>,<U1C90>);/ - (<U10D1>,<U1C91>);(<U10D2>,<U1C92>);(<U10D3>,<U1C93>);(<U10D4>,<U1C94>);/ - (<U10D5>,<U1C95>);(<U10D6>,<U1C96>);(<U10D7>,<U1C97>);(<U10D8>,<U1C98>);/ - (<U10D9>,<U1C99>);(<U10DA>,<U1C9A>);(<U10DB>,<U1C9B>);(<U10DC>,<U1C9C>);/ - (<U10DD>,<U1C9D>);(<U10DE>,<U1C9E>);(<U10DF>,<U1C9F>);(<U10E0>,<U1CA0>);/ - (<U10E1>,<U1CA1>);(<U10E2>,<U1CA2>);(<U10E3>,<U1CA3>);(<U10E4>,<U1CA4>);/ - (<U10E5>,<U1CA5>);(<U10E6>,<U1CA6>);(<U10E7>,<U1CA7>);(<U10E8>,<U1CA8>);/ - (<U10E9>,<U1CA9>);(<U10EA>,<U1CAA>);(<U10EB>,<U1CAB>);(<U10EC>,<U1CAC>);/ - (<U10ED>,<U1CAD>);(<U10EE>,<U1CAE>);(<U10EF>,<U1CAF>);(<U10F0>,<U1CB0>);/ - (<U10F1>,<U1CB1>);(<U10F2>,<U1CB2>);(<U10F3>,<U1CB3>);(<U10F4>,<U1CB4>);/ - (<U10F5>,<U1CB5>);(<U10F6>,<U1CB6>);(<U10F7>,<U1CB7>);(<U10F8>,<U1CB8>);/ - (<U10F9>,<U1CB9>);(<U10FA>,<U1CBA>);(<U10FD>,<U1CBD>);(<U10FE>,<U1CBE>);/ - (<U10FF>,<U1CBF>);(<U13F8>,<U13F0>);(<U13F9>,<U13F1>);(<U13FA>,<U13F2>);/ - (<U13FB>,<U13F3>);(<U13FC>,<U13F4>);(<U13FD>,<U13F5>);(<U1C80>,<U0412>);/ - (<U1C81>,<U0414>);(<U1C82>,<U041E>);(<U1C83>,<U0421>);(<U1C84>,<U0422>);/ - (<U1C85>,<U0422>);(<U1C86>,<U042A>);(<U1C87>,<U0462>);(<U1C88>,<UA64A>);/ - (<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);/ - (<U1E03>,<U1E02>);(<U1E05>,<U1E04>);(<U1E07>,<U1E06>);(<U1E09>,<U1E08>);/ - (<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);/ - (<U1E13>,<U1E12>);(<U1E15>,<U1E14>);(<U1E17>,<U1E16>);(<U1E19>,<U1E18>);/ - (<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);/ - (<U1E23>,<U1E22>);(<U1E25>,<U1E24>);(<U1E27>,<U1E26>);(<U1E29>,<U1E28>);/ - (<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);/ - (<U1E33>,<U1E32>);(<U1E35>,<U1E34>);(<U1E37>,<U1E36>);(<U1E39>,<U1E38>);/ - (<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);/ - (<U1E43>,<U1E42>);(<U1E45>,<U1E44>);(<U1E47>,<U1E46>);(<U1E49>,<U1E48>);/ - (<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);/ - (<U1E53>,<U1E52>);(<U1E55>,<U1E54>);(<U1E57>,<U1E56>);(<U1E59>,<U1E58>);/ - (<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);/ - (<U1E63>,<U1E62>);(<U1E65>,<U1E64>);(<U1E67>,<U1E66>);(<U1E69>,<U1E68>);/ - (<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);/ - (<U1E73>,<U1E72>);(<U1E75>,<U1E74>);(<U1E77>,<U1E76>);(<U1E79>,<U1E78>);/ - (<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);/ - (<U1E83>,<U1E82>);(<U1E85>,<U1E84>);(<U1E87>,<U1E86>);(<U1E89>,<U1E88>);/ - (<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);/ - (<U1E93>,<U1E92>);(<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);/ - (<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);/ - (<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);/ - (<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);/ - (<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);/ - (<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);/ - (<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);/ - (<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);/ - (<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);/ - (<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);/ - (<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);/ - (<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);/ - (<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);/ - (<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);/ - (<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);/ - (<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);/ - (<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);(<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);/ - (<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);/ - (<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);(<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);/ - (<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);/ - (<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);(<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);/ - (<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);/ - (<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);/ - (<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);/ - (<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);/ - (<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);/ - (<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);/ - (<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);/ - (<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);(<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);/ - (<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);/ - (<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);(<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);/ - (<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);/ - (<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);/ - (<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);/ - (<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);/ - (<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);/ - (<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);/ - (<U214E>,<U2132>);(<U2170>,<U2160>);(<U2171>,<U2161>);(<U2172>,<U2162>);/ - (<U2173>,<U2163>);(<U2174>,<U2164>);(<U2175>,<U2165>);(<U2176>,<U2166>);/ - (<U2177>,<U2167>);(<U2178>,<U2168>);(<U2179>,<U2169>);(<U217A>,<U216A>);/ - (<U217B>,<U216B>);(<U217C>,<U216C>);(<U217D>,<U216D>);(<U217E>,<U216E>);/ - (<U217F>,<U216F>);(<U2184>,<U2183>);(<U24D0>,<U24B6>);(<U24D1>,<U24B7>);/ - (<U24D2>,<U24B8>);(<U24D3>,<U24B9>);(<U24D4>,<U24BA>);(<U24D5>,<U24BB>);/ - (<U24D6>,<U24BC>);(<U24D7>,<U24BD>);(<U24D8>,<U24BE>);(<U24D9>,<U24BF>);/ - (<U24DA>,<U24C0>);(<U24DB>,<U24C1>);(<U24DC>,<U24C2>);(<U24DD>,<U24C3>);/ - (<U24DE>,<U24C4>);(<U24DF>,<U24C5>);(<U24E0>,<U24C6>);(<U24E1>,<U24C7>);/ - (<U24E2>,<U24C8>);(<U24E3>,<U24C9>);(<U24E4>,<U24CA>);(<U24E5>,<U24CB>);/ - (<U24E6>,<U24CC>);(<U24E7>,<U24CD>);(<U24E8>,<U24CE>);(<U24E9>,<U24CF>);/ - (<U2C30>,<U2C00>);(<U2C31>,<U2C01>);(<U2C32>,<U2C02>);(<U2C33>,<U2C03>);/ - (<U2C34>,<U2C04>);(<U2C35>,<U2C05>);(<U2C36>,<U2C06>);(<U2C37>,<U2C07>);/ - (<U2C38>,<U2C08>);(<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);/ - (<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);/ - (<U2C40>,<U2C10>);(<U2C41>,<U2C11>);(<U2C42>,<U2C12>);(<U2C43>,<U2C13>);/ - (<U2C44>,<U2C14>);(<U2C45>,<U2C15>);(<U2C46>,<U2C16>);(<U2C47>,<U2C17>);/ - (<U2C48>,<U2C18>);(<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);/ - (<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);/ - (<U2C50>,<U2C20>);(<U2C51>,<U2C21>);(<U2C52>,<U2C22>);(<U2C53>,<U2C23>);/ - (<U2C54>,<U2C24>);(<U2C55>,<U2C25>);(<U2C56>,<U2C26>);(<U2C57>,<U2C27>);/ - (<U2C58>,<U2C28>);(<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);/ - (<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);/ - (<U2C61>,<U2C60>);(<U2C65>,<U023A>);(<U2C66>,<U023E>);(<U2C68>,<U2C67>);/ - (<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);(<U2C76>,<U2C75>);/ - (<U2C81>,<U2C80>);(<U2C83>,<U2C82>);(<U2C85>,<U2C84>);(<U2C87>,<U2C86>);/ - (<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);/ - (<U2C91>,<U2C90>);(<U2C93>,<U2C92>);(<U2C95>,<U2C94>);(<U2C97>,<U2C96>);/ - (<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);/ - (<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);/ - (<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);/ - (<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);/ - (<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);/ - (<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);/ - (<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);/ - (<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);/ - (<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);/ - (<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);/ - (<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);(<U2D01>,<U10A1>);(<U2D02>,<U10A2>);/ - (<U2D03>,<U10A3>);(<U2D04>,<U10A4>);(<U2D05>,<U10A5>);(<U2D06>,<U10A6>);/ - (<U2D07>,<U10A7>);(<U2D08>,<U10A8>);(<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);/ - (<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);/ - (<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);(<U2D11>,<U10B1>);(<U2D12>,<U10B2>);/ - (<U2D13>,<U10B3>);(<U2D14>,<U10B4>);(<U2D15>,<U10B5>);(<U2D16>,<U10B6>);/ - (<U2D17>,<U10B7>);(<U2D18>,<U10B8>);(<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);/ - (<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);/ - (<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);(<U2D21>,<U10C1>);(<U2D22>,<U10C2>);/ - (<U2D23>,<U10C3>);(<U2D24>,<U10C4>);(<U2D25>,<U10C5>);(<U2D27>,<U10C7>);/ - (<U2D2D>,<U10CD>);(<UA641>,<UA640>);(<UA643>,<UA642>);(<UA645>,<UA644>);/ - (<UA647>,<UA646>);(<UA649>,<UA648>);(<UA64B>,<UA64A>);(<UA64D>,<UA64C>);/ - (<UA64F>,<UA64E>);(<UA651>,<UA650>);(<UA653>,<UA652>);(<UA655>,<UA654>);/ - (<UA657>,<UA656>);(<UA659>,<UA658>);(<UA65B>,<UA65A>);(<UA65D>,<UA65C>);/ - (<UA65F>,<UA65E>);(<UA661>,<UA660>);(<UA663>,<UA662>);(<UA665>,<UA664>);/ - (<UA667>,<UA666>);(<UA669>,<UA668>);(<UA66B>,<UA66A>);(<UA66D>,<UA66C>);/ - (<UA681>,<UA680>);(<UA683>,<UA682>);(<UA685>,<UA684>);(<UA687>,<UA686>);/ - (<UA689>,<UA688>);(<UA68B>,<UA68A>);(<UA68D>,<UA68C>);(<UA68F>,<UA68E>);/ - (<UA691>,<UA690>);(<UA693>,<UA692>);(<UA695>,<UA694>);(<UA697>,<UA696>);/ - (<UA699>,<UA698>);(<UA69B>,<UA69A>);(<UA723>,<UA722>);(<UA725>,<UA724>);/ - (<UA727>,<UA726>);(<UA729>,<UA728>);(<UA72B>,<UA72A>);(<UA72D>,<UA72C>);/ - (<UA72F>,<UA72E>);(<UA733>,<UA732>);(<UA735>,<UA734>);(<UA737>,<UA736>);/ - (<UA739>,<UA738>);(<UA73B>,<UA73A>);(<UA73D>,<UA73C>);(<UA73F>,<UA73E>);/ - (<UA741>,<UA740>);(<UA743>,<UA742>);(<UA745>,<UA744>);(<UA747>,<UA746>);/ - (<UA749>,<UA748>);(<UA74B>,<UA74A>);(<UA74D>,<UA74C>);(<UA74F>,<UA74E>);/ - (<UA751>,<UA750>);(<UA753>,<UA752>);(<UA755>,<UA754>);(<UA757>,<UA756>);/ - (<UA759>,<UA758>);(<UA75B>,<UA75A>);(<UA75D>,<UA75C>);(<UA75F>,<UA75E>);/ - (<UA761>,<UA760>);(<UA763>,<UA762>);(<UA765>,<UA764>);(<UA767>,<UA766>);/ - (<UA769>,<UA768>);(<UA76B>,<UA76A>);(<UA76D>,<UA76C>);(<UA76F>,<UA76E>);/ - (<UA77A>,<UA779>);(<UA77C>,<UA77B>);(<UA77F>,<UA77E>);(<UA781>,<UA780>);/ - (<UA783>,<UA782>);(<UA785>,<UA784>);(<UA787>,<UA786>);(<UA78C>,<UA78B>);/ - (<UA791>,<UA790>);(<UA793>,<UA792>);(<UA794>,<UA7C4>);(<UA797>,<UA796>);/ - (<UA799>,<UA798>);(<UA79B>,<UA79A>);(<UA79D>,<UA79C>);(<UA79F>,<UA79E>);/ - (<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);/ - (<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);/ - (<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);/ - (<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);(<UA7D1>,<UA7D0>);/ - (<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);(<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);/ - (<UAB70>,<U13A0>);(<UAB71>,<U13A1>);(<UAB72>,<U13A2>);(<UAB73>,<U13A3>);/ - (<UAB74>,<U13A4>);(<UAB75>,<U13A5>);(<UAB76>,<U13A6>);(<UAB77>,<U13A7>);/ - (<UAB78>,<U13A8>);(<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);/ - (<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);/ - (<UAB80>,<U13B0>);(<UAB81>,<U13B1>);(<UAB82>,<U13B2>);(<UAB83>,<U13B3>);/ - (<UAB84>,<U13B4>);(<UAB85>,<U13B5>);(<UAB86>,<U13B6>);(<UAB87>,<U13B7>);/ - (<UAB88>,<U13B8>);(<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);/ - (<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);/ - (<UAB90>,<U13C0>);(<UAB91>,<U13C1>);(<UAB92>,<U13C2>);(<UAB93>,<U13C3>);/ - (<UAB94>,<U13C4>);(<UAB95>,<U13C5>);(<UAB96>,<U13C6>);(<UAB97>,<U13C7>);/ - (<UAB98>,<U13C8>);(<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);/ - (<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);/ - (<UABA0>,<U13D0>);(<UABA1>,<U13D1>);(<UABA2>,<U13D2>);(<UABA3>,<U13D3>);/ - (<UABA4>,<U13D4>);(<UABA5>,<U13D5>);(<UABA6>,<U13D6>);(<UABA7>,<U13D7>);/ - (<UABA8>,<U13D8>);(<UABA9>,<U13D9>);(<UABAA>,<U13DA>);(<UABAB>,<U13DB>);/ - (<UABAC>,<U13DC>);(<UABAD>,<U13DD>);(<UABAE>,<U13DE>);(<UABAF>,<U13DF>);/ - (<UABB0>,<U13E0>);(<UABB1>,<U13E1>);(<UABB2>,<U13E2>);(<UABB3>,<U13E3>);/ - (<UABB4>,<U13E4>);(<UABB5>,<U13E5>);(<UABB6>,<U13E6>);(<UABB7>,<U13E7>);/ - (<UABB8>,<U13E8>);(<UABB9>,<U13E9>);(<UABBA>,<U13EA>);(<UABBB>,<U13EB>);/ - (<UABBC>,<U13EC>);(<UABBD>,<U13ED>);(<UABBE>,<U13EE>);(<UABBF>,<U13EF>);/ - (<UFF41>,<UFF21>);(<UFF42>,<UFF22>);(<UFF43>,<UFF23>);(<UFF44>,<UFF24>);/ - (<UFF45>,<UFF25>);(<UFF46>,<UFF26>);(<UFF47>,<UFF27>);(<UFF48>,<UFF28>);/ - (<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);/ - (<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);/ - (<UFF51>,<UFF31>);(<UFF52>,<UFF32>);(<UFF53>,<UFF33>);(<UFF54>,<UFF34>);/ - (<UFF55>,<UFF35>);(<UFF56>,<UFF36>);(<UFF57>,<UFF37>);(<UFF58>,<UFF38>);/ - (<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);(<U00010428>,<U00010400>);/ - (<U00010429>,<U00010401>);(<U0001042A>,<U00010402>);/ - (<U0001042B>,<U00010403>);(<U0001042C>,<U00010404>);/ - (<U0001042D>,<U00010405>);(<U0001042E>,<U00010406>);/ - (<U0001042F>,<U00010407>);(<U00010430>,<U00010408>);/ - (<U00010431>,<U00010409>);(<U00010432>,<U0001040A>);/ - (<U00010433>,<U0001040B>);(<U00010434>,<U0001040C>);/ - (<U00010435>,<U0001040D>);(<U00010436>,<U0001040E>);/ - (<U00010437>,<U0001040F>);(<U00010438>,<U00010410>);/ - (<U00010439>,<U00010411>);(<U0001043A>,<U00010412>);/ - (<U0001043B>,<U00010413>);(<U0001043C>,<U00010414>);/ - (<U0001043D>,<U00010415>);(<U0001043E>,<U00010416>);/ - (<U0001043F>,<U00010417>);(<U00010440>,<U00010418>);/ - (<U00010441>,<U00010419>);(<U00010442>,<U0001041A>);/ - (<U00010443>,<U0001041B>);(<U00010444>,<U0001041C>);/ - (<U00010445>,<U0001041D>);(<U00010446>,<U0001041E>);/ - (<U00010447>,<U0001041F>);(<U00010448>,<U00010420>);/ - (<U00010449>,<U00010421>);(<U0001044A>,<U00010422>);/ - (<U0001044B>,<U00010423>);(<U0001044C>,<U00010424>);/ - (<U0001044D>,<U00010425>);(<U0001044E>,<U00010426>);/ - (<U0001044F>,<U00010427>);(<U000104D8>,<U000104B0>);/ - (<U000104D9>,<U000104B1>);(<U000104DA>,<U000104B2>);/ - (<U000104DB>,<U000104B3>);(<U000104DC>,<U000104B4>);/ - (<U000104DD>,<U000104B5>);(<U000104DE>,<U000104B6>);/ - (<U000104DF>,<U000104B7>);(<U000104E0>,<U000104B8>);/ - (<U000104E1>,<U000104B9>);(<U000104E2>,<U000104BA>);/ - (<U000104E3>,<U000104BB>);(<U000104E4>,<U000104BC>);/ - (<U000104E5>,<U000104BD>);(<U000104E6>,<U000104BE>);/ - (<U000104E7>,<U000104BF>);(<U000104E8>,<U000104C0>);/ - (<U000104E9>,<U000104C1>);(<U000104EA>,<U000104C2>);/ - (<U000104EB>,<U000104C3>);(<U000104EC>,<U000104C4>);/ - (<U000104ED>,<U000104C5>);(<U000104EE>,<U000104C6>);/ - (<U000104EF>,<U000104C7>);(<U000104F0>,<U000104C8>);/ - (<U000104F1>,<U000104C9>);(<U000104F2>,<U000104CA>);/ - (<U000104F3>,<U000104CB>);(<U000104F4>,<U000104CC>);/ - (<U000104F5>,<U000104CD>);(<U000104F6>,<U000104CE>);/ - (<U000104F7>,<U000104CF>);(<U000104F8>,<U000104D0>);/ - (<U000104F9>,<U000104D1>);(<U000104FA>,<U000104D2>);/ - (<U000104FB>,<U000104D3>);(<U00010597>,<U00010570>);/ - (<U00010598>,<U00010571>);(<U00010599>,<U00010572>);/ - (<U0001059A>,<U00010573>);(<U0001059B>,<U00010574>);/ - (<U0001059C>,<U00010575>);(<U0001059D>,<U00010576>);/ - (<U0001059E>,<U00010577>);(<U0001059F>,<U00010578>);/ - (<U000105A0>,<U00010579>);(<U000105A1>,<U0001057A>);/ - (<U000105A3>,<U0001057C>);(<U000105A4>,<U0001057D>);/ - (<U000105A5>,<U0001057E>);(<U000105A6>,<U0001057F>);/ - (<U000105A7>,<U00010580>);(<U000105A8>,<U00010581>);/ - (<U000105A9>,<U00010582>);(<U000105AA>,<U00010583>);/ - (<U000105AB>,<U00010584>);(<U000105AC>,<U00010585>);/ - (<U000105AD>,<U00010586>);(<U000105AE>,<U00010587>);/ - (<U000105AF>,<U00010588>);(<U000105B0>,<U00010589>);/ - (<U000105B1>,<U0001058A>);(<U000105B3>,<U0001058C>);/ - (<U000105B4>,<U0001058D>);(<U000105B5>,<U0001058E>);/ - (<U000105B6>,<U0001058F>);(<U000105B7>,<U00010590>);/ - (<U000105B8>,<U00010591>);(<U000105B9>,<U00010592>);/ - (<U000105BB>,<U00010594>);(<U000105BC>,<U00010595>);/ - (<U00010CC0>,<U00010C80>);(<U00010CC1>,<U00010C81>);/ - (<U00010CC2>,<U00010C82>);(<U00010CC3>,<U00010C83>);/ - (<U00010CC4>,<U00010C84>);(<U00010CC5>,<U00010C85>);/ - (<U00010CC6>,<U00010C86>);(<U00010CC7>,<U00010C87>);/ - (<U00010CC8>,<U00010C88>);(<U00010CC9>,<U00010C89>);/ - (<U00010CCA>,<U00010C8A>);(<U00010CCB>,<U00010C8B>);/ - (<U00010CCC>,<U00010C8C>);(<U00010CCD>,<U00010C8D>);/ - (<U00010CCE>,<U00010C8E>);(<U00010CCF>,<U00010C8F>);/ - (<U00010CD0>,<U00010C90>);(<U00010CD1>,<U00010C91>);/ - (<U00010CD2>,<U00010C92>);(<U00010CD3>,<U00010C93>);/ - (<U00010CD4>,<U00010C94>);(<U00010CD5>,<U00010C95>);/ - (<U00010CD6>,<U00010C96>);(<U00010CD7>,<U00010C97>);/ - (<U00010CD8>,<U00010C98>);(<U00010CD9>,<U00010C99>);/ - (<U00010CDA>,<U00010C9A>);(<U00010CDB>,<U00010C9B>);/ - (<U00010CDC>,<U00010C9C>);(<U00010CDD>,<U00010C9D>);/ - (<U00010CDE>,<U00010C9E>);(<U00010CDF>,<U00010C9F>);/ - (<U00010CE0>,<U00010CA0>);(<U00010CE1>,<U00010CA1>);/ - (<U00010CE2>,<U00010CA2>);(<U00010CE3>,<U00010CA3>);/ - (<U00010CE4>,<U00010CA4>);(<U00010CE5>,<U00010CA5>);/ - (<U00010CE6>,<U00010CA6>);(<U00010CE7>,<U00010CA7>);/ - (<U00010CE8>,<U00010CA8>);(<U00010CE9>,<U00010CA9>);/ - (<U00010CEA>,<U00010CAA>);(<U00010CEB>,<U00010CAB>);/ - (<U00010CEC>,<U00010CAC>);(<U00010CED>,<U00010CAD>);/ - (<U00010CEE>,<U00010CAE>);(<U00010CEF>,<U00010CAF>);/ - (<U00010CF0>,<U00010CB0>);(<U00010CF1>,<U00010CB1>);/ - (<U00010CF2>,<U00010CB2>);(<U000118C0>,<U000118A0>);/ - (<U000118C1>,<U000118A1>);(<U000118C2>,<U000118A2>);/ - (<U000118C3>,<U000118A3>);(<U000118C4>,<U000118A4>);/ - (<U000118C5>,<U000118A5>);(<U000118C6>,<U000118A6>);/ - (<U000118C7>,<U000118A7>);(<U000118C8>,<U000118A8>);/ - (<U000118C9>,<U000118A9>);(<U000118CA>,<U000118AA>);/ - (<U000118CB>,<U000118AB>);(<U000118CC>,<U000118AC>);/ - (<U000118CD>,<U000118AD>);(<U000118CE>,<U000118AE>);/ - (<U000118CF>,<U000118AF>);(<U000118D0>,<U000118B0>);/ - (<U000118D1>,<U000118B1>);(<U000118D2>,<U000118B2>);/ - (<U000118D3>,<U000118B3>);(<U000118D4>,<U000118B4>);/ - (<U000118D5>,<U000118B5>);(<U000118D6>,<U000118B6>);/ - (<U000118D7>,<U000118B7>);(<U000118D8>,<U000118B8>);/ - (<U000118D9>,<U000118B9>);(<U000118DA>,<U000118BA>);/ - (<U000118DB>,<U000118BB>);(<U000118DC>,<U000118BC>);/ - (<U000118DD>,<U000118BD>);(<U000118DE>,<U000118BE>);/ - (<U000118DF>,<U000118BF>);(<U00016E60>,<U00016E40>);/ - (<U00016E61>,<U00016E41>);(<U00016E62>,<U00016E42>);/ - (<U00016E63>,<U00016E43>);(<U00016E64>,<U00016E44>);/ - (<U00016E65>,<U00016E45>);(<U00016E66>,<U00016E46>);/ - (<U00016E67>,<U00016E47>);(<U00016E68>,<U00016E48>);/ - (<U00016E69>,<U00016E49>);(<U00016E6A>,<U00016E4A>);/ - (<U00016E6B>,<U00016E4B>);(<U00016E6C>,<U00016E4C>);/ - (<U00016E6D>,<U00016E4D>);(<U00016E6E>,<U00016E4E>);/ - (<U00016E6F>,<U00016E4F>);(<U00016E70>,<U00016E50>);/ - (<U00016E71>,<U00016E51>);(<U00016E72>,<U00016E52>);/ - (<U00016E73>,<U00016E53>);(<U00016E74>,<U00016E54>);/ - (<U00016E75>,<U00016E55>);(<U00016E76>,<U00016E56>);/ - (<U00016E77>,<U00016E57>);(<U00016E78>,<U00016E58>);/ - (<U00016E79>,<U00016E59>);(<U00016E7A>,<U00016E5A>);/ - (<U00016E7B>,<U00016E5B>);(<U00016E7C>,<U00016E5C>);/ - (<U00016E7D>,<U00016E5D>);(<U00016E7E>,<U00016E5E>);/ - (<U00016E7F>,<U00016E5F>);(<U0001E922>,<U0001E900>);/ - (<U0001E923>,<U0001E901>);(<U0001E924>,<U0001E902>);/ - (<U0001E925>,<U0001E903>);(<U0001E926>,<U0001E904>);/ - (<U0001E927>,<U0001E905>);(<U0001E928>,<U0001E906>);/ - (<U0001E929>,<U0001E907>);(<U0001E92A>,<U0001E908>);/ - (<U0001E92B>,<U0001E909>);(<U0001E92C>,<U0001E90A>);/ - (<U0001E92D>,<U0001E90B>);(<U0001E92E>,<U0001E90C>);/ - (<U0001E92F>,<U0001E90D>);(<U0001E930>,<U0001E90E>);/ - (<U0001E931>,<U0001E90F>);(<U0001E932>,<U0001E910>);/ - (<U0001E933>,<U0001E911>);(<U0001E934>,<U0001E912>);/ - (<U0001E935>,<U0001E913>);(<U0001E936>,<U0001E914>);/ - (<U0001E937>,<U0001E915>);(<U0001E938>,<U0001E916>);/ - (<U0001E939>,<U0001E917>);(<U0001E93A>,<U0001E918>);/ - (<U0001E93B>,<U0001E919>);(<U0001E93C>,<U0001E91A>);/ - (<U0001E93D>,<U0001E91B>);(<U0001E93E>,<U0001E91C>);/ - (<U0001E93F>,<U0001E91D>);(<U0001E940>,<U0001E91E>);/ - (<U0001E941>,<U0001E91F>);(<U0001E942>,<U0001E920>);/ - (<U0001E943>,<U0001E921>) + (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019B>,<UA7DC>);(<U019E>,<U0220>);/ + (<U01A1>,<U01A0>);(<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);/ + (<U01AD>,<U01AC>);(<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);/ + (<U01B9>,<U01B8>);(<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C5>,<U01C4>);/ + (<U01C6>,<U01C4>);(<U01C8>,<U01C7>);(<U01C9>,<U01C7>);(<U01CB>,<U01CA>);/ + (<U01CC>,<U01CA>);(<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);/ + (<U01D4>,<U01D3>);(<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);/ + (<U01DC>,<U01DB>);(<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);/ + (<U01E3>,<U01E2>);(<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);/ + (<U01EB>,<U01EA>);(<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F2>,<U01F1>);/ + (<U01F3>,<U01F1>);(<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);/ + (<U01FD>,<U01FC>);(<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);/ + (<U0205>,<U0204>);(<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);/ + (<U020D>,<U020C>);(<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);/ + (<U0215>,<U0214>);(<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);/ + (<U021D>,<U021C>);(<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);/ + (<U0227>,<U0226>);(<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);/ + (<U022F>,<U022E>);(<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);/ + (<U023F>,<U2C7E>);(<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);/ + (<U0249>,<U0248>);(<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);/ + (<U0250>,<U2C6F>);(<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);/ + (<U0254>,<U0186>);(<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);/ + (<U025B>,<U0190>);(<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);/ + (<U0263>,<U0194>);(<U0264>,<UA7CB>);(<U0265>,<UA78D>);(<U0266>,<UA7AA>);/ + (<U0268>,<U0197>);(<U0269>,<U0196>);(<U026A>,<UA7AE>);(<U026B>,<U2C62>);/ + (<U026C>,<UA7AD>);(<U026F>,<U019C>);(<U0271>,<U2C6E>);(<U0272>,<U019D>);/ + (<U0275>,<U019F>);(<U027D>,<U2C64>);(<U0280>,<U01A6>);(<U0282>,<UA7C5>);/ + (<U0283>,<U01A9>);(<U0287>,<UA7B1>);(<U0288>,<U01AE>);(<U0289>,<U0244>);/ + (<U028A>,<U01B1>);(<U028B>,<U01B2>);(<U028C>,<U0245>);(<U0292>,<U01B7>);/ + (<U029D>,<UA7B2>);(<U029E>,<UA7B0>);(<U0345>,<U0399>);(<U0371>,<U0370>);/ + (<U0373>,<U0372>);(<U0377>,<U0376>);(<U037B>,<U03FD>);(<U037C>,<U03FE>);/ + (<U037D>,<U03FF>);(<U03AC>,<U0386>);(<U03AD>,<U0388>);(<U03AE>,<U0389>);/ + (<U03AF>,<U038A>);(<U03B1>,<U0391>);(<U03B2>,<U0392>);(<U03B3>,<U0393>);/ + (<U03B4>,<U0394>);(<U03B5>,<U0395>);(<U03B6>,<U0396>);(<U03B7>,<U0397>);/ + (<U03B8>,<U0398>);(<U03B9>,<U0399>);(<U03BA>,<U039A>);(<U03BB>,<U039B>);/ + (<U03BC>,<U039C>);(<U03BD>,<U039D>);(<U03BE>,<U039E>);(<U03BF>,<U039F>);/ + (<U03C0>,<U03A0>);(<U03C1>,<U03A1>);(<U03C2>,<U03A3>);(<U03C3>,<U03A3>);/ + (<U03C4>,<U03A4>);(<U03C5>,<U03A5>);(<U03C6>,<U03A6>);(<U03C7>,<U03A7>);/ + (<U03C8>,<U03A8>);(<U03C9>,<U03A9>);(<U03CA>,<U03AA>);(<U03CB>,<U03AB>);/ + (<U03CC>,<U038C>);(<U03CD>,<U038E>);(<U03CE>,<U038F>);(<U03D0>,<U0392>);/ + (<U03D1>,<U0398>);(<U03D5>,<U03A6>);(<U03D6>,<U03A0>);(<U03D7>,<U03CF>);/ + (<U03D9>,<U03D8>);(<U03DB>,<U03DA>);(<U03DD>,<U03DC>);(<U03DF>,<U03DE>);/ + (<U03E1>,<U03E0>);(<U03E3>,<U03E2>);(<U03E5>,<U03E4>);(<U03E7>,<U03E6>);/ + (<U03E9>,<U03E8>);(<U03EB>,<U03EA>);(<U03ED>,<U03EC>);(<U03EF>,<U03EE>);/ + (<U03F0>,<U039A>);(<U03F1>,<U03A1>);(<U03F2>,<U03F9>);(<U03F3>,<U037F>);/ + (<U03F5>,<U0395>);(<U03F8>,<U03F7>);(<U03FB>,<U03FA>);(<U0430>,<U0410>);/ + (<U0431>,<U0411>);(<U0432>,<U0412>);(<U0433>,<U0413>);(<U0434>,<U0414>);/ + (<U0435>,<U0415>);(<U0436>,<U0416>);(<U0437>,<U0417>);(<U0438>,<U0418>);/ + (<U0439>,<U0419>);(<U043A>,<U041A>);(<U043B>,<U041B>);(<U043C>,<U041C>);/ + (<U043D>,<U041D>);(<U043E>,<U041E>);(<U043F>,<U041F>);(<U0440>,<U0420>);/ + (<U0441>,<U0421>);(<U0442>,<U0422>);(<U0443>,<U0423>);(<U0444>,<U0424>);/ + (<U0445>,<U0425>);(<U0446>,<U0426>);(<U0447>,<U0427>);(<U0448>,<U0428>);/ + (<U0449>,<U0429>);(<U044A>,<U042A>);(<U044B>,<U042B>);(<U044C>,<U042C>);/ + (<U044D>,<U042D>);(<U044E>,<U042E>);(<U044F>,<U042F>);(<U0450>,<U0400>);/ + (<U0451>,<U0401>);(<U0452>,<U0402>);(<U0453>,<U0403>);(<U0454>,<U0404>);/ + (<U0455>,<U0405>);(<U0456>,<U0406>);(<U0457>,<U0407>);(<U0458>,<U0408>);/ + (<U0459>,<U0409>);(<U045A>,<U040A>);(<U045B>,<U040B>);(<U045C>,<U040C>);/ + (<U045D>,<U040D>);(<U045E>,<U040E>);(<U045F>,<U040F>);(<U0461>,<U0460>);/ + (<U0463>,<U0462>);(<U0465>,<U0464>);(<U0467>,<U0466>);(<U0469>,<U0468>);/ + (<U046B>,<U046A>);(<U046D>,<U046C>);(<U046F>,<U046E>);(<U0471>,<U0470>);/ + (<U0473>,<U0472>);(<U0475>,<U0474>);(<U0477>,<U0476>);(<U0479>,<U0478>);/ + (<U047B>,<U047A>);(<U047D>,<U047C>);(<U047F>,<U047E>);(<U0481>,<U0480>);/ + (<U048B>,<U048A>);(<U048D>,<U048C>);(<U048F>,<U048E>);(<U0491>,<U0490>);/ + (<U0493>,<U0492>);(<U0495>,<U0494>);(<U0497>,<U0496>);(<U0499>,<U0498>);/ + (<U049B>,<U049A>);(<U049D>,<U049C>);(<U049F>,<U049E>);(<U04A1>,<U04A0>);/ + (<U04A3>,<U04A2>);(<U04A5>,<U04A4>);(<U04A7>,<U04A6>);(<U04A9>,<U04A8>);/ + (<U04AB>,<U04AA>);(<U04AD>,<U04AC>);(<U04AF>,<U04AE>);(<U04B1>,<U04B0>);/ + (<U04B3>,<U04B2>);(<U04B5>,<U04B4>);(<U04B7>,<U04B6>);(<U04B9>,<U04B8>);/ + (<U04BB>,<U04BA>);(<U04BD>,<U04BC>);(<U04BF>,<U04BE>);(<U04C2>,<U04C1>);/ + (<U04C4>,<U04C3>);(<U04C6>,<U04C5>);(<U04C8>,<U04C7>);(<U04CA>,<U04C9>);/ + (<U04CC>,<U04CB>);(<U04CE>,<U04CD>);(<U04CF>,<U04C0>);(<U04D1>,<U04D0>);/ + (<U04D3>,<U04D2>);(<U04D5>,<U04D4>);(<U04D7>,<U04D6>);(<U04D9>,<U04D8>);/ + (<U04DB>,<U04DA>);(<U04DD>,<U04DC>);(<U04DF>,<U04DE>);(<U04E1>,<U04E0>);/ + (<U04E3>,<U04E2>);(<U04E5>,<U04E4>);(<U04E7>,<U04E6>);(<U04E9>,<U04E8>);/ + (<U04EB>,<U04EA>);(<U04ED>,<U04EC>);(<U04EF>,<U04EE>);(<U04F1>,<U04F0>);/ + (<U04F3>,<U04F2>);(<U04F5>,<U04F4>);(<U04F7>,<U04F6>);(<U04F9>,<U04F8>);/ + (<U04FB>,<U04FA>);(<U04FD>,<U04FC>);(<U04FF>,<U04FE>);(<U0501>,<U0500>);/ + (<U0503>,<U0502>);(<U0505>,<U0504>);(<U0507>,<U0506>);(<U0509>,<U0508>);/ + (<U050B>,<U050A>);(<U050D>,<U050C>);(<U050F>,<U050E>);(<U0511>,<U0510>);/ + (<U0513>,<U0512>);(<U0515>,<U0514>);(<U0517>,<U0516>);(<U0519>,<U0518>);/ + (<U051B>,<U051A>);(<U051D>,<U051C>);(<U051F>,<U051E>);(<U0521>,<U0520>);/ + (<U0523>,<U0522>);(<U0525>,<U0524>);(<U0527>,<U0526>);(<U0529>,<U0528>);/ + (<U052B>,<U052A>);(<U052D>,<U052C>);(<U052F>,<U052E>);(<U0561>,<U0531>);/ + (<U0562>,<U0532>);(<U0563>,<U0533>);(<U0564>,<U0534>);(<U0565>,<U0535>);/ + (<U0566>,<U0536>);(<U0567>,<U0537>);(<U0568>,<U0538>);(<U0569>,<U0539>);/ + (<U056A>,<U053A>);(<U056B>,<U053B>);(<U056C>,<U053C>);(<U056D>,<U053D>);/ + (<U056E>,<U053E>);(<U056F>,<U053F>);(<U0570>,<U0540>);(<U0571>,<U0541>);/ + (<U0572>,<U0542>);(<U0573>,<U0543>);(<U0574>,<U0544>);(<U0575>,<U0545>);/ + (<U0576>,<U0546>);(<U0577>,<U0547>);(<U0578>,<U0548>);(<U0579>,<U0549>);/ + (<U057A>,<U054A>);(<U057B>,<U054B>);(<U057C>,<U054C>);(<U057D>,<U054D>);/ + (<U057E>,<U054E>);(<U057F>,<U054F>);(<U0580>,<U0550>);(<U0581>,<U0551>);/ + (<U0582>,<U0552>);(<U0583>,<U0553>);(<U0584>,<U0554>);(<U0585>,<U0555>);/ + (<U0586>,<U0556>);(<U10D0>,<U1C90>);(<U10D1>,<U1C91>);(<U10D2>,<U1C92>);/ + (<U10D3>,<U1C93>);(<U10D4>,<U1C94>);(<U10D5>,<U1C95>);(<U10D6>,<U1C96>);/ + (<U10D7>,<U1C97>);(<U10D8>,<U1C98>);(<U10D9>,<U1C99>);(<U10DA>,<U1C9A>);/ + (<U10DB>,<U1C9B>);(<U10DC>,<U1C9C>);(<U10DD>,<U1C9D>);(<U10DE>,<U1C9E>);/ + (<U10DF>,<U1C9F>);(<U10E0>,<U1CA0>);(<U10E1>,<U1CA1>);(<U10E2>,<U1CA2>);/ + (<U10E3>,<U1CA3>);(<U10E4>,<U1CA4>);(<U10E5>,<U1CA5>);(<U10E6>,<U1CA6>);/ + (<U10E7>,<U1CA7>);(<U10E8>,<U1CA8>);(<U10E9>,<U1CA9>);(<U10EA>,<U1CAA>);/ + (<U10EB>,<U1CAB>);(<U10EC>,<U1CAC>);(<U10ED>,<U1CAD>);(<U10EE>,<U1CAE>);/ + (<U10EF>,<U1CAF>);(<U10F0>,<U1CB0>);(<U10F1>,<U1CB1>);(<U10F2>,<U1CB2>);/ + (<U10F3>,<U1CB3>);(<U10F4>,<U1CB4>);(<U10F5>,<U1CB5>);(<U10F6>,<U1CB6>);/ + (<U10F7>,<U1CB7>);(<U10F8>,<U1CB8>);(<U10F9>,<U1CB9>);(<U10FA>,<U1CBA>);/ + (<U10FD>,<U1CBD>);(<U10FE>,<U1CBE>);(<U10FF>,<U1CBF>);(<U13F8>,<U13F0>);/ + (<U13F9>,<U13F1>);(<U13FA>,<U13F2>);(<U13FB>,<U13F3>);(<U13FC>,<U13F4>);/ + (<U13FD>,<U13F5>);(<U1C80>,<U0412>);(<U1C81>,<U0414>);(<U1C82>,<U041E>);/ + (<U1C83>,<U0421>);(<U1C84>,<U0422>);(<U1C85>,<U0422>);(<U1C86>,<U042A>);/ + (<U1C87>,<U0462>);(<U1C88>,<UA64A>);(<U1C8A>,<U1C89>);(<U1D79>,<UA77D>);/ + (<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);(<U1E03>,<U1E02>);/ + (<U1E05>,<U1E04>);(<U1E07>,<U1E06>);(<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);/ + (<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);(<U1E13>,<U1E12>);/ + (<U1E15>,<U1E14>);(<U1E17>,<U1E16>);(<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);/ + (<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);(<U1E23>,<U1E22>);/ + (<U1E25>,<U1E24>);(<U1E27>,<U1E26>);(<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);/ + (<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);(<U1E33>,<U1E32>);/ + (<U1E35>,<U1E34>);(<U1E37>,<U1E36>);(<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);/ + (<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);(<U1E43>,<U1E42>);/ + (<U1E45>,<U1E44>);(<U1E47>,<U1E46>);(<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);/ + (<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);(<U1E53>,<U1E52>);/ + (<U1E55>,<U1E54>);(<U1E57>,<U1E56>);(<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);/ + (<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);(<U1E63>,<U1E62>);/ + (<U1E65>,<U1E64>);(<U1E67>,<U1E66>);(<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);/ + (<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);(<U1E73>,<U1E72>);/ + (<U1E75>,<U1E74>);(<U1E77>,<U1E76>);(<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);/ + (<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);(<U1E83>,<U1E82>);/ + (<U1E85>,<U1E84>);(<U1E87>,<U1E86>);(<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);/ + (<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);(<U1E93>,<U1E92>);/ + (<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);/ + (<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);/ + (<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);/ + (<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);/ + (<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);/ + (<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);/ + (<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);/ + (<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);/ + (<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);/ + (<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);/ + (<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);/ + (<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);/ + (<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);(<U1F01>,<U1F09>);/ + (<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);/ + (<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);(<U1F11>,<U1F19>);/ + (<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);/ + (<U1F20>,<U1F28>);(<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);/ + (<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);/ + (<U1F30>,<U1F38>);(<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);/ + (<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);/ + (<U1F40>,<U1F48>);(<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);/ + (<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);/ + (<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);(<U1F61>,<U1F69>);/ + (<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);/ + (<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);/ + (<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);/ + (<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);/ + (<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);/ + (<U1F80>,<U1F88>);(<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);/ + (<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);/ + (<U1F90>,<U1F98>);(<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);/ + (<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);/ + (<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);/ + (<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);/ + (<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);/ + (<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);/ + (<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);(<U214E>,<U2132>);/ + (<U2170>,<U2160>);(<U2171>,<U2161>);(<U2172>,<U2162>);(<U2173>,<U2163>);/ + (<U2174>,<U2164>);(<U2175>,<U2165>);(<U2176>,<U2166>);(<U2177>,<U2167>);/ + (<U2178>,<U2168>);(<U2179>,<U2169>);(<U217A>,<U216A>);(<U217B>,<U216B>);/ + (<U217C>,<U216C>);(<U217D>,<U216D>);(<U217E>,<U216E>);(<U217F>,<U216F>);/ + (<U2184>,<U2183>);(<U24D0>,<U24B6>);(<U24D1>,<U24B7>);(<U24D2>,<U24B8>);/ + (<U24D3>,<U24B9>);(<U24D4>,<U24BA>);(<U24D5>,<U24BB>);(<U24D6>,<U24BC>);/ + (<U24D7>,<U24BD>);(<U24D8>,<U24BE>);(<U24D9>,<U24BF>);(<U24DA>,<U24C0>);/ + (<U24DB>,<U24C1>);(<U24DC>,<U24C2>);(<U24DD>,<U24C3>);(<U24DE>,<U24C4>);/ + (<U24DF>,<U24C5>);(<U24E0>,<U24C6>);(<U24E1>,<U24C7>);(<U24E2>,<U24C8>);/ + (<U24E3>,<U24C9>);(<U24E4>,<U24CA>);(<U24E5>,<U24CB>);(<U24E6>,<U24CC>);/ + (<U24E7>,<U24CD>);(<U24E8>,<U24CE>);(<U24E9>,<U24CF>);(<U2C30>,<U2C00>);/ + (<U2C31>,<U2C01>);(<U2C32>,<U2C02>);(<U2C33>,<U2C03>);(<U2C34>,<U2C04>);/ + (<U2C35>,<U2C05>);(<U2C36>,<U2C06>);(<U2C37>,<U2C07>);(<U2C38>,<U2C08>);/ + (<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);/ + (<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);/ + (<U2C41>,<U2C11>);(<U2C42>,<U2C12>);(<U2C43>,<U2C13>);(<U2C44>,<U2C14>);/ + (<U2C45>,<U2C15>);(<U2C46>,<U2C16>);(<U2C47>,<U2C17>);(<U2C48>,<U2C18>);/ + (<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);/ + (<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);/ + (<U2C51>,<U2C21>);(<U2C52>,<U2C22>);(<U2C53>,<U2C23>);(<U2C54>,<U2C24>);/ + (<U2C55>,<U2C25>);(<U2C56>,<U2C26>);(<U2C57>,<U2C27>);(<U2C58>,<U2C28>);/ + (<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);/ + (<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);/ + (<U2C65>,<U023A>);(<U2C66>,<U023E>);(<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);/ + (<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);(<U2C76>,<U2C75>);(<U2C81>,<U2C80>);/ + (<U2C83>,<U2C82>);(<U2C85>,<U2C84>);(<U2C87>,<U2C86>);(<U2C89>,<U2C88>);/ + (<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);/ + (<U2C93>,<U2C92>);(<U2C95>,<U2C94>);(<U2C97>,<U2C96>);(<U2C99>,<U2C98>);/ + (<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);/ + (<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);/ + (<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);/ + (<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);/ + (<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);/ + (<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);/ + (<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);/ + (<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);/ + (<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);/ + (<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);/ + (<U2D00>,<U10A0>);(<U2D01>,<U10A1>);(<U2D02>,<U10A2>);(<U2D03>,<U10A3>);/ + (<U2D04>,<U10A4>);(<U2D05>,<U10A5>);(<U2D06>,<U10A6>);(<U2D07>,<U10A7>);/ + (<U2D08>,<U10A8>);(<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);/ + (<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);/ + (<U2D10>,<U10B0>);(<U2D11>,<U10B1>);(<U2D12>,<U10B2>);(<U2D13>,<U10B3>);/ + (<U2D14>,<U10B4>);(<U2D15>,<U10B5>);(<U2D16>,<U10B6>);(<U2D17>,<U10B7>);/ + (<U2D18>,<U10B8>);(<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);/ + (<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);/ + (<U2D20>,<U10C0>);(<U2D21>,<U10C1>);(<U2D22>,<U10C2>);(<U2D23>,<U10C3>);/ + (<U2D24>,<U10C4>);(<U2D25>,<U10C5>);(<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);/ + (<UA641>,<UA640>);(<UA643>,<UA642>);(<UA645>,<UA644>);(<UA647>,<UA646>);/ + (<UA649>,<UA648>);(<UA64B>,<UA64A>);(<UA64D>,<UA64C>);(<UA64F>,<UA64E>);/ + (<UA651>,<UA650>);(<UA653>,<UA652>);(<UA655>,<UA654>);(<UA657>,<UA656>);/ + (<UA659>,<UA658>);(<UA65B>,<UA65A>);(<UA65D>,<UA65C>);(<UA65F>,<UA65E>);/ + (<UA661>,<UA660>);(<UA663>,<UA662>);(<UA665>,<UA664>);(<UA667>,<UA666>);/ + (<UA669>,<UA668>);(<UA66B>,<UA66A>);(<UA66D>,<UA66C>);(<UA681>,<UA680>);/ + (<UA683>,<UA682>);(<UA685>,<UA684>);(<UA687>,<UA686>);(<UA689>,<UA688>);/ + (<UA68B>,<UA68A>);(<UA68D>,<UA68C>);(<UA68F>,<UA68E>);(<UA691>,<UA690>);/ + (<UA693>,<UA692>);(<UA695>,<UA694>);(<UA697>,<UA696>);(<UA699>,<UA698>);/ + (<UA69B>,<UA69A>);(<UA723>,<UA722>);(<UA725>,<UA724>);(<UA727>,<UA726>);/ + (<UA729>,<UA728>);(<UA72B>,<UA72A>);(<UA72D>,<UA72C>);(<UA72F>,<UA72E>);/ + (<UA733>,<UA732>);(<UA735>,<UA734>);(<UA737>,<UA736>);(<UA739>,<UA738>);/ + (<UA73B>,<UA73A>);(<UA73D>,<UA73C>);(<UA73F>,<UA73E>);(<UA741>,<UA740>);/ + (<UA743>,<UA742>);(<UA745>,<UA744>);(<UA747>,<UA746>);(<UA749>,<UA748>);/ + (<UA74B>,<UA74A>);(<UA74D>,<UA74C>);(<UA74F>,<UA74E>);(<UA751>,<UA750>);/ + (<UA753>,<UA752>);(<UA755>,<UA754>);(<UA757>,<UA756>);(<UA759>,<UA758>);/ + (<UA75B>,<UA75A>);(<UA75D>,<UA75C>);(<UA75F>,<UA75E>);(<UA761>,<UA760>);/ + (<UA763>,<UA762>);(<UA765>,<UA764>);(<UA767>,<UA766>);(<UA769>,<UA768>);/ + (<UA76B>,<UA76A>);(<UA76D>,<UA76C>);(<UA76F>,<UA76E>);(<UA77A>,<UA779>);/ + (<UA77C>,<UA77B>);(<UA77F>,<UA77E>);(<UA781>,<UA780>);(<UA783>,<UA782>);/ + (<UA785>,<UA784>);(<UA787>,<UA786>);(<UA78C>,<UA78B>);(<UA791>,<UA790>);/ + (<UA793>,<UA792>);(<UA794>,<UA7C4>);(<UA797>,<UA796>);(<UA799>,<UA798>);/ + (<UA79B>,<UA79A>);(<UA79D>,<UA79C>);(<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);/ + (<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);/ + (<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);/ + (<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);/ + (<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);(<UA7CD>,<UA7CC>);(<UA7D1>,<UA7D0>);/ + (<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);(<UA7DB>,<UA7DA>);(<UA7F6>,<UA7F5>);/ + (<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);(<UAB71>,<U13A1>);(<UAB72>,<U13A2>);/ + (<UAB73>,<U13A3>);(<UAB74>,<U13A4>);(<UAB75>,<U13A5>);(<UAB76>,<U13A6>);/ + (<UAB77>,<U13A7>);(<UAB78>,<U13A8>);(<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);/ + (<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);/ + (<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);(<UAB81>,<U13B1>);(<UAB82>,<U13B2>);/ + (<UAB83>,<U13B3>);(<UAB84>,<U13B4>);(<UAB85>,<U13B5>);(<UAB86>,<U13B6>);/ + (<UAB87>,<U13B7>);(<UAB88>,<U13B8>);(<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);/ + (<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);/ + (<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);(<UAB91>,<U13C1>);(<UAB92>,<U13C2>);/ + (<UAB93>,<U13C3>);(<UAB94>,<U13C4>);(<UAB95>,<U13C5>);(<UAB96>,<U13C6>);/ + (<UAB97>,<U13C7>);(<UAB98>,<U13C8>);(<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);/ + (<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);/ + (<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);(<UABA1>,<U13D1>);(<UABA2>,<U13D2>);/ + (<UABA3>,<U13D3>);(<UABA4>,<U13D4>);(<UABA5>,<U13D5>);(<UABA6>,<U13D6>);/ + (<UABA7>,<U13D7>);(<UABA8>,<U13D8>);(<UABA9>,<U13D9>);(<UABAA>,<U13DA>);/ + (<UABAB>,<U13DB>);(<UABAC>,<U13DC>);(<UABAD>,<U13DD>);(<UABAE>,<U13DE>);/ + (<UABAF>,<U13DF>);(<UABB0>,<U13E0>);(<UABB1>,<U13E1>);(<UABB2>,<U13E2>);/ + (<UABB3>,<U13E3>);(<UABB4>,<U13E4>);(<UABB5>,<U13E5>);(<UABB6>,<U13E6>);/ + (<UABB7>,<U13E7>);(<UABB8>,<U13E8>);(<UABB9>,<U13E9>);(<UABBA>,<U13EA>);/ + (<UABBB>,<U13EB>);(<UABBC>,<U13EC>);(<UABBD>,<U13ED>);(<UABBE>,<U13EE>);/ + (<UABBF>,<U13EF>);(<UFF41>,<UFF21>);(<UFF42>,<UFF22>);(<UFF43>,<UFF23>);/ + (<UFF44>,<UFF24>);(<UFF45>,<UFF25>);(<UFF46>,<UFF26>);(<UFF47>,<UFF27>);/ + (<UFF48>,<UFF28>);(<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);/ + (<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);/ + (<UFF50>,<UFF30>);(<UFF51>,<UFF31>);(<UFF52>,<UFF32>);(<UFF53>,<UFF33>);/ + (<UFF54>,<UFF34>);(<UFF55>,<UFF35>);(<UFF56>,<UFF36>);(<UFF57>,<UFF37>);/ + (<UFF58>,<UFF38>);(<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);/ + (<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ + (<U0001042A>,<U00010402>);(<U0001042B>,<U00010403>);/ + (<U0001042C>,<U00010404>);(<U0001042D>,<U00010405>);/ + (<U0001042E>,<U00010406>);(<U0001042F>,<U00010407>);/ + (<U00010430>,<U00010408>);(<U00010431>,<U00010409>);/ + (<U00010432>,<U0001040A>);(<U00010433>,<U0001040B>);/ + (<U00010434>,<U0001040C>);(<U00010435>,<U0001040D>);/ + (<U00010436>,<U0001040E>);(<U00010437>,<U0001040F>);/ + (<U00010438>,<U00010410>);(<U00010439>,<U00010411>);/ + (<U0001043A>,<U00010412>);(<U0001043B>,<U00010413>);/ + (<U0001043C>,<U00010414>);(<U0001043D>,<U00010415>);/ + (<U0001043E>,<U00010416>);(<U0001043F>,<U00010417>);/ + (<U00010440>,<U00010418>);(<U00010441>,<U00010419>);/ + (<U00010442>,<U0001041A>);(<U00010443>,<U0001041B>);/ + (<U00010444>,<U0001041C>);(<U00010445>,<U0001041D>);/ + (<U00010446>,<U0001041E>);(<U00010447>,<U0001041F>);/ + (<U00010448>,<U00010420>);(<U00010449>,<U00010421>);/ + (<U0001044A>,<U00010422>);(<U0001044B>,<U00010423>);/ + (<U0001044C>,<U00010424>);(<U0001044D>,<U00010425>);/ + (<U0001044E>,<U00010426>);(<U0001044F>,<U00010427>);/ + (<U000104D8>,<U000104B0>);(<U000104D9>,<U000104B1>);/ + (<U000104DA>,<U000104B2>);(<U000104DB>,<U000104B3>);/ + (<U000104DC>,<U000104B4>);(<U000104DD>,<U000104B5>);/ + (<U000104DE>,<U000104B6>);(<U000104DF>,<U000104B7>);/ + (<U000104E0>,<U000104B8>);(<U000104E1>,<U000104B9>);/ + (<U000104E2>,<U000104BA>);(<U000104E3>,<U000104BB>);/ + (<U000104E4>,<U000104BC>);(<U000104E5>,<U000104BD>);/ + (<U000104E6>,<U000104BE>);(<U000104E7>,<U000104BF>);/ + (<U000104E8>,<U000104C0>);(<U000104E9>,<U000104C1>);/ + (<U000104EA>,<U000104C2>);(<U000104EB>,<U000104C3>);/ + (<U000104EC>,<U000104C4>);(<U000104ED>,<U000104C5>);/ + (<U000104EE>,<U000104C6>);(<U000104EF>,<U000104C7>);/ + (<U000104F0>,<U000104C8>);(<U000104F1>,<U000104C9>);/ + (<U000104F2>,<U000104CA>);(<U000104F3>,<U000104CB>);/ + (<U000104F4>,<U000104CC>);(<U000104F5>,<U000104CD>);/ + (<U000104F6>,<U000104CE>);(<U000104F7>,<U000104CF>);/ + (<U000104F8>,<U000104D0>);(<U000104F9>,<U000104D1>);/ + (<U000104FA>,<U000104D2>);(<U000104FB>,<U000104D3>);/ + (<U00010597>,<U00010570>);(<U00010598>,<U00010571>);/ + (<U00010599>,<U00010572>);(<U0001059A>,<U00010573>);/ + (<U0001059B>,<U00010574>);(<U0001059C>,<U00010575>);/ + (<U0001059D>,<U00010576>);(<U0001059E>,<U00010577>);/ + (<U0001059F>,<U00010578>);(<U000105A0>,<U00010579>);/ + (<U000105A1>,<U0001057A>);(<U000105A3>,<U0001057C>);/ + (<U000105A4>,<U0001057D>);(<U000105A5>,<U0001057E>);/ + (<U000105A6>,<U0001057F>);(<U000105A7>,<U00010580>);/ + (<U000105A8>,<U00010581>);(<U000105A9>,<U00010582>);/ + (<U000105AA>,<U00010583>);(<U000105AB>,<U00010584>);/ + (<U000105AC>,<U00010585>);(<U000105AD>,<U00010586>);/ + (<U000105AE>,<U00010587>);(<U000105AF>,<U00010588>);/ + (<U000105B0>,<U00010589>);(<U000105B1>,<U0001058A>);/ + (<U000105B3>,<U0001058C>);(<U000105B4>,<U0001058D>);/ + (<U000105B5>,<U0001058E>);(<U000105B6>,<U0001058F>);/ + (<U000105B7>,<U00010590>);(<U000105B8>,<U00010591>);/ + (<U000105B9>,<U00010592>);(<U000105BB>,<U00010594>);/ + (<U000105BC>,<U00010595>);(<U00010CC0>,<U00010C80>);/ + (<U00010CC1>,<U00010C81>);(<U00010CC2>,<U00010C82>);/ + (<U00010CC3>,<U00010C83>);(<U00010CC4>,<U00010C84>);/ + (<U00010CC5>,<U00010C85>);(<U00010CC6>,<U00010C86>);/ + (<U00010CC7>,<U00010C87>);(<U00010CC8>,<U00010C88>);/ + (<U00010CC9>,<U00010C89>);(<U00010CCA>,<U00010C8A>);/ + (<U00010CCB>,<U00010C8B>);(<U00010CCC>,<U00010C8C>);/ + (<U00010CCD>,<U00010C8D>);(<U00010CCE>,<U00010C8E>);/ + (<U00010CCF>,<U00010C8F>);(<U00010CD0>,<U00010C90>);/ + (<U00010CD1>,<U00010C91>);(<U00010CD2>,<U00010C92>);/ + (<U00010CD3>,<U00010C93>);(<U00010CD4>,<U00010C94>);/ + (<U00010CD5>,<U00010C95>);(<U00010CD6>,<U00010C96>);/ + (<U00010CD7>,<U00010C97>);(<U00010CD8>,<U00010C98>);/ + (<U00010CD9>,<U00010C99>);(<U00010CDA>,<U00010C9A>);/ + (<U00010CDB>,<U00010C9B>);(<U00010CDC>,<U00010C9C>);/ + (<U00010CDD>,<U00010C9D>);(<U00010CDE>,<U00010C9E>);/ + (<U00010CDF>,<U00010C9F>);(<U00010CE0>,<U00010CA0>);/ + (<U00010CE1>,<U00010CA1>);(<U00010CE2>,<U00010CA2>);/ + (<U00010CE3>,<U00010CA3>);(<U00010CE4>,<U00010CA4>);/ + (<U00010CE5>,<U00010CA5>);(<U00010CE6>,<U00010CA6>);/ + (<U00010CE7>,<U00010CA7>);(<U00010CE8>,<U00010CA8>);/ + (<U00010CE9>,<U00010CA9>);(<U00010CEA>,<U00010CAA>);/ + (<U00010CEB>,<U00010CAB>);(<U00010CEC>,<U00010CAC>);/ + (<U00010CED>,<U00010CAD>);(<U00010CEE>,<U00010CAE>);/ + (<U00010CEF>,<U00010CAF>);(<U00010CF0>,<U00010CB0>);/ + (<U00010CF1>,<U00010CB1>);(<U00010CF2>,<U00010CB2>);/ + (<U00010D70>,<U00010D50>);(<U00010D71>,<U00010D51>);/ + (<U00010D72>,<U00010D52>);(<U00010D73>,<U00010D53>);/ + (<U00010D74>,<U00010D54>);(<U00010D75>,<U00010D55>);/ + (<U00010D76>,<U00010D56>);(<U00010D77>,<U00010D57>);/ + (<U00010D78>,<U00010D58>);(<U00010D79>,<U00010D59>);/ + (<U00010D7A>,<U00010D5A>);(<U00010D7B>,<U00010D5B>);/ + (<U00010D7C>,<U00010D5C>);(<U00010D7D>,<U00010D5D>);/ + (<U00010D7E>,<U00010D5E>);(<U00010D7F>,<U00010D5F>);/ + (<U00010D80>,<U00010D60>);(<U00010D81>,<U00010D61>);/ + (<U00010D82>,<U00010D62>);(<U00010D83>,<U00010D63>);/ + (<U00010D84>,<U00010D64>);(<U00010D85>,<U00010D65>);/ + (<U000118C0>,<U000118A0>);(<U000118C1>,<U000118A1>);/ + (<U000118C2>,<U000118A2>);(<U000118C3>,<U000118A3>);/ + (<U000118C4>,<U000118A4>);(<U000118C5>,<U000118A5>);/ + (<U000118C6>,<U000118A6>);(<U000118C7>,<U000118A7>);/ + (<U000118C8>,<U000118A8>);(<U000118C9>,<U000118A9>);/ + (<U000118CA>,<U000118AA>);(<U000118CB>,<U000118AB>);/ + (<U000118CC>,<U000118AC>);(<U000118CD>,<U000118AD>);/ + (<U000118CE>,<U000118AE>);(<U000118CF>,<U000118AF>);/ + (<U000118D0>,<U000118B0>);(<U000118D1>,<U000118B1>);/ + (<U000118D2>,<U000118B2>);(<U000118D3>,<U000118B3>);/ + (<U000118D4>,<U000118B4>);(<U000118D5>,<U000118B5>);/ + (<U000118D6>,<U000118B6>);(<U000118D7>,<U000118B7>);/ + (<U000118D8>,<U000118B8>);(<U000118D9>,<U000118B9>);/ + (<U000118DA>,<U000118BA>);(<U000118DB>,<U000118BB>);/ + (<U000118DC>,<U000118BC>);(<U000118DD>,<U000118BD>);/ + (<U000118DE>,<U000118BE>);(<U000118DF>,<U000118BF>);/ + (<U00016E60>,<U00016E40>);(<U00016E61>,<U00016E41>);/ + (<U00016E62>,<U00016E42>);(<U00016E63>,<U00016E43>);/ + (<U00016E64>,<U00016E44>);(<U00016E65>,<U00016E45>);/ + (<U00016E66>,<U00016E46>);(<U00016E67>,<U00016E47>);/ + (<U00016E68>,<U00016E48>);(<U00016E69>,<U00016E49>);/ + (<U00016E6A>,<U00016E4A>);(<U00016E6B>,<U00016E4B>);/ + (<U00016E6C>,<U00016E4C>);(<U00016E6D>,<U00016E4D>);/ + (<U00016E6E>,<U00016E4E>);(<U00016E6F>,<U00016E4F>);/ + (<U00016E70>,<U00016E50>);(<U00016E71>,<U00016E51>);/ + (<U00016E72>,<U00016E52>);(<U00016E73>,<U00016E53>);/ + (<U00016E74>,<U00016E54>);(<U00016E75>,<U00016E55>);/ + (<U00016E76>,<U00016E56>);(<U00016E77>,<U00016E57>);/ + (<U00016E78>,<U00016E58>);(<U00016E79>,<U00016E59>);/ + (<U00016E7A>,<U00016E5A>);(<U00016E7B>,<U00016E5B>);/ + (<U00016E7C>,<U00016E5C>);(<U00016E7D>,<U00016E5D>);/ + (<U00016E7E>,<U00016E5E>);(<U00016E7F>,<U00016E5F>);/ + (<U0001E922>,<U0001E900>);(<U0001E923>,<U0001E901>);/ + (<U0001E924>,<U0001E902>);(<U0001E925>,<U0001E903>);/ + (<U0001E926>,<U0001E904>);(<U0001E927>,<U0001E905>);/ + (<U0001E928>,<U0001E906>);(<U0001E929>,<U0001E907>);/ + (<U0001E92A>,<U0001E908>);(<U0001E92B>,<U0001E909>);/ + (<U0001E92C>,<U0001E90A>);(<U0001E92D>,<U0001E90B>);/ + (<U0001E92E>,<U0001E90C>);(<U0001E92F>,<U0001E90D>);/ + (<U0001E930>,<U0001E90E>);(<U0001E931>,<U0001E90F>);/ + (<U0001E932>,<U0001E910>);(<U0001E933>,<U0001E911>);/ + (<U0001E934>,<U0001E912>);(<U0001E935>,<U0001E913>);/ + (<U0001E936>,<U0001E914>);(<U0001E937>,<U0001E915>);/ + (<U0001E938>,<U0001E916>);(<U0001E939>,<U0001E917>);/ + (<U0001E93A>,<U0001E918>);(<U0001E93B>,<U0001E919>);/ + (<U0001E93C>,<U0001E91A>);(<U0001E93D>,<U0001E91B>);/ + (<U0001E93E>,<U0001E91C>);(<U0001E93F>,<U0001E91D>);/ + (<U0001E940>,<U0001E91E>);(<U0001E941>,<U0001E91F>);/ + (<U0001E942>,<U0001E920>);(<U0001E943>,<U0001E921>) tolower / (<U0041>,<U0061>);(<U0042>,<U0062>);(<U0043>,<U0063>);(<U0044>,<U0064>);/ @@ -1756,281 +1811,294 @@ tolower / (<U13E7>,<UABB7>);(<U13E8>,<UABB8>);(<U13E9>,<UABB9>);(<U13EA>,<UABBA>);/ (<U13EB>,<UABBB>);(<U13EC>,<UABBC>);(<U13ED>,<UABBD>);(<U13EE>,<UABBE>);/ (<U13EF>,<UABBF>);(<U13F0>,<U13F8>);(<U13F1>,<U13F9>);(<U13F2>,<U13FA>);/ - (<U13F3>,<U13FB>);(<U13F4>,<U13FC>);(<U13F5>,<U13FD>);(<U1C90>,<U10D0>);/ - (<U1C91>,<U10D1>);(<U1C92>,<U10D2>);(<U1C93>,<U10D3>);(<U1C94>,<U10D4>);/ - (<U1C95>,<U10D5>);(<U1C96>,<U10D6>);(<U1C97>,<U10D7>);(<U1C98>,<U10D8>);/ - (<U1C99>,<U10D9>);(<U1C9A>,<U10DA>);(<U1C9B>,<U10DB>);(<U1C9C>,<U10DC>);/ - (<U1C9D>,<U10DD>);(<U1C9E>,<U10DE>);(<U1C9F>,<U10DF>);(<U1CA0>,<U10E0>);/ - (<U1CA1>,<U10E1>);(<U1CA2>,<U10E2>);(<U1CA3>,<U10E3>);(<U1CA4>,<U10E4>);/ - (<U1CA5>,<U10E5>);(<U1CA6>,<U10E6>);(<U1CA7>,<U10E7>);(<U1CA8>,<U10E8>);/ - (<U1CA9>,<U10E9>);(<U1CAA>,<U10EA>);(<U1CAB>,<U10EB>);(<U1CAC>,<U10EC>);/ - (<U1CAD>,<U10ED>);(<U1CAE>,<U10EE>);(<U1CAF>,<U10EF>);(<U1CB0>,<U10F0>);/ - (<U1CB1>,<U10F1>);(<U1CB2>,<U10F2>);(<U1CB3>,<U10F3>);(<U1CB4>,<U10F4>);/ - (<U1CB5>,<U10F5>);(<U1CB6>,<U10F6>);(<U1CB7>,<U10F7>);(<U1CB8>,<U10F8>);/ - (<U1CB9>,<U10F9>);(<U1CBA>,<U10FA>);(<U1CBD>,<U10FD>);(<U1CBE>,<U10FE>);/ - (<U1CBF>,<U10FF>);(<U1E00>,<U1E01>);(<U1E02>,<U1E03>);(<U1E04>,<U1E05>);/ - (<U1E06>,<U1E07>);(<U1E08>,<U1E09>);(<U1E0A>,<U1E0B>);(<U1E0C>,<U1E0D>);/ - (<U1E0E>,<U1E0F>);(<U1E10>,<U1E11>);(<U1E12>,<U1E13>);(<U1E14>,<U1E15>);/ - (<U1E16>,<U1E17>);(<U1E18>,<U1E19>);(<U1E1A>,<U1E1B>);(<U1E1C>,<U1E1D>);/ - (<U1E1E>,<U1E1F>);(<U1E20>,<U1E21>);(<U1E22>,<U1E23>);(<U1E24>,<U1E25>);/ - (<U1E26>,<U1E27>);(<U1E28>,<U1E29>);(<U1E2A>,<U1E2B>);(<U1E2C>,<U1E2D>);/ - (<U1E2E>,<U1E2F>);(<U1E30>,<U1E31>);(<U1E32>,<U1E33>);(<U1E34>,<U1E35>);/ - (<U1E36>,<U1E37>);(<U1E38>,<U1E39>);(<U1E3A>,<U1E3B>);(<U1E3C>,<U1E3D>);/ - (<U1E3E>,<U1E3F>);(<U1E40>,<U1E41>);(<U1E42>,<U1E43>);(<U1E44>,<U1E45>);/ - (<U1E46>,<U1E47>);(<U1E48>,<U1E49>);(<U1E4A>,<U1E4B>);(<U1E4C>,<U1E4D>);/ - (<U1E4E>,<U1E4F>);(<U1E50>,<U1E51>);(<U1E52>,<U1E53>);(<U1E54>,<U1E55>);/ - (<U1E56>,<U1E57>);(<U1E58>,<U1E59>);(<U1E5A>,<U1E5B>);(<U1E5C>,<U1E5D>);/ - (<U1E5E>,<U1E5F>);(<U1E60>,<U1E61>);(<U1E62>,<U1E63>);(<U1E64>,<U1E65>);/ - (<U1E66>,<U1E67>);(<U1E68>,<U1E69>);(<U1E6A>,<U1E6B>);(<U1E6C>,<U1E6D>);/ - (<U1E6E>,<U1E6F>);(<U1E70>,<U1E71>);(<U1E72>,<U1E73>);(<U1E74>,<U1E75>);/ - (<U1E76>,<U1E77>);(<U1E78>,<U1E79>);(<U1E7A>,<U1E7B>);(<U1E7C>,<U1E7D>);/ - (<U1E7E>,<U1E7F>);(<U1E80>,<U1E81>);(<U1E82>,<U1E83>);(<U1E84>,<U1E85>);/ - (<U1E86>,<U1E87>);(<U1E88>,<U1E89>);(<U1E8A>,<U1E8B>);(<U1E8C>,<U1E8D>);/ - (<U1E8E>,<U1E8F>);(<U1E90>,<U1E91>);(<U1E92>,<U1E93>);(<U1E94>,<U1E95>);/ - (<U1E9E>,<U00DF>);(<U1EA0>,<U1EA1>);(<U1EA2>,<U1EA3>);(<U1EA4>,<U1EA5>);/ - (<U1EA6>,<U1EA7>);(<U1EA8>,<U1EA9>);(<U1EAA>,<U1EAB>);(<U1EAC>,<U1EAD>);/ - (<U1EAE>,<U1EAF>);(<U1EB0>,<U1EB1>);(<U1EB2>,<U1EB3>);(<U1EB4>,<U1EB5>);/ - (<U1EB6>,<U1EB7>);(<U1EB8>,<U1EB9>);(<U1EBA>,<U1EBB>);(<U1EBC>,<U1EBD>);/ - (<U1EBE>,<U1EBF>);(<U1EC0>,<U1EC1>);(<U1EC2>,<U1EC3>);(<U1EC4>,<U1EC5>);/ - (<U1EC6>,<U1EC7>);(<U1EC8>,<U1EC9>);(<U1ECA>,<U1ECB>);(<U1ECC>,<U1ECD>);/ - (<U1ECE>,<U1ECF>);(<U1ED0>,<U1ED1>);(<U1ED2>,<U1ED3>);(<U1ED4>,<U1ED5>);/ - (<U1ED6>,<U1ED7>);(<U1ED8>,<U1ED9>);(<U1EDA>,<U1EDB>);(<U1EDC>,<U1EDD>);/ - (<U1EDE>,<U1EDF>);(<U1EE0>,<U1EE1>);(<U1EE2>,<U1EE3>);(<U1EE4>,<U1EE5>);/ - (<U1EE6>,<U1EE7>);(<U1EE8>,<U1EE9>);(<U1EEA>,<U1EEB>);(<U1EEC>,<U1EED>);/ - (<U1EEE>,<U1EEF>);(<U1EF0>,<U1EF1>);(<U1EF2>,<U1EF3>);(<U1EF4>,<U1EF5>);/ - (<U1EF6>,<U1EF7>);(<U1EF8>,<U1EF9>);(<U1EFA>,<U1EFB>);(<U1EFC>,<U1EFD>);/ - (<U1EFE>,<U1EFF>);(<U1F08>,<U1F00>);(<U1F09>,<U1F01>);(<U1F0A>,<U1F02>);/ - (<U1F0B>,<U1F03>);(<U1F0C>,<U1F04>);(<U1F0D>,<U1F05>);(<U1F0E>,<U1F06>);/ - (<U1F0F>,<U1F07>);(<U1F18>,<U1F10>);(<U1F19>,<U1F11>);(<U1F1A>,<U1F12>);/ - (<U1F1B>,<U1F13>);(<U1F1C>,<U1F14>);(<U1F1D>,<U1F15>);(<U1F28>,<U1F20>);/ - (<U1F29>,<U1F21>);(<U1F2A>,<U1F22>);(<U1F2B>,<U1F23>);(<U1F2C>,<U1F24>);/ - (<U1F2D>,<U1F25>);(<U1F2E>,<U1F26>);(<U1F2F>,<U1F27>);(<U1F38>,<U1F30>);/ - (<U1F39>,<U1F31>);(<U1F3A>,<U1F32>);(<U1F3B>,<U1F33>);(<U1F3C>,<U1F34>);/ - (<U1F3D>,<U1F35>);(<U1F3E>,<U1F36>);(<U1F3F>,<U1F37>);(<U1F48>,<U1F40>);/ - (<U1F49>,<U1F41>);(<U1F4A>,<U1F42>);(<U1F4B>,<U1F43>);(<U1F4C>,<U1F44>);/ - (<U1F4D>,<U1F45>);(<U1F59>,<U1F51>);(<U1F5B>,<U1F53>);(<U1F5D>,<U1F55>);/ - (<U1F5F>,<U1F57>);(<U1F68>,<U1F60>);(<U1F69>,<U1F61>);(<U1F6A>,<U1F62>);/ - (<U1F6B>,<U1F63>);(<U1F6C>,<U1F64>);(<U1F6D>,<U1F65>);(<U1F6E>,<U1F66>);/ - (<U1F6F>,<U1F67>);(<U1F88>,<U1F80>);(<U1F89>,<U1F81>);(<U1F8A>,<U1F82>);/ - (<U1F8B>,<U1F83>);(<U1F8C>,<U1F84>);(<U1F8D>,<U1F85>);(<U1F8E>,<U1F86>);/ - (<U1F8F>,<U1F87>);(<U1F98>,<U1F90>);(<U1F99>,<U1F91>);(<U1F9A>,<U1F92>);/ - (<U1F9B>,<U1F93>);(<U1F9C>,<U1F94>);(<U1F9D>,<U1F95>);(<U1F9E>,<U1F96>);/ - (<U1F9F>,<U1F97>);(<U1FA8>,<U1FA0>);(<U1FA9>,<U1FA1>);(<U1FAA>,<U1FA2>);/ - (<U1FAB>,<U1FA3>);(<U1FAC>,<U1FA4>);(<U1FAD>,<U1FA5>);(<U1FAE>,<U1FA6>);/ - (<U1FAF>,<U1FA7>);(<U1FB8>,<U1FB0>);(<U1FB9>,<U1FB1>);(<U1FBA>,<U1F70>);/ - (<U1FBB>,<U1F71>);(<U1FBC>,<U1FB3>);(<U1FC8>,<U1F72>);(<U1FC9>,<U1F73>);/ - (<U1FCA>,<U1F74>);(<U1FCB>,<U1F75>);(<U1FCC>,<U1FC3>);(<U1FD8>,<U1FD0>);/ - (<U1FD9>,<U1FD1>);(<U1FDA>,<U1F76>);(<U1FDB>,<U1F77>);(<U1FE8>,<U1FE0>);/ - (<U1FE9>,<U1FE1>);(<U1FEA>,<U1F7A>);(<U1FEB>,<U1F7B>);(<U1FEC>,<U1FE5>);/ - (<U1FF8>,<U1F78>);(<U1FF9>,<U1F79>);(<U1FFA>,<U1F7C>);(<U1FFB>,<U1F7D>);/ - (<U1FFC>,<U1FF3>);(<U2126>,<U03C9>);(<U212A>,<U006B>);(<U212B>,<U00E5>);/ - (<U2132>,<U214E>);(<U2160>,<U2170>);(<U2161>,<U2171>);(<U2162>,<U2172>);/ - (<U2163>,<U2173>);(<U2164>,<U2174>);(<U2165>,<U2175>);(<U2166>,<U2176>);/ - (<U2167>,<U2177>);(<U2168>,<U2178>);(<U2169>,<U2179>);(<U216A>,<U217A>);/ - (<U216B>,<U217B>);(<U216C>,<U217C>);(<U216D>,<U217D>);(<U216E>,<U217E>);/ - (<U216F>,<U217F>);(<U2183>,<U2184>);(<U24B6>,<U24D0>);(<U24B7>,<U24D1>);/ - (<U24B8>,<U24D2>);(<U24B9>,<U24D3>);(<U24BA>,<U24D4>);(<U24BB>,<U24D5>);/ - (<U24BC>,<U24D6>);(<U24BD>,<U24D7>);(<U24BE>,<U24D8>);(<U24BF>,<U24D9>);/ - (<U24C0>,<U24DA>);(<U24C1>,<U24DB>);(<U24C2>,<U24DC>);(<U24C3>,<U24DD>);/ - (<U24C4>,<U24DE>);(<U24C5>,<U24DF>);(<U24C6>,<U24E0>);(<U24C7>,<U24E1>);/ - (<U24C8>,<U24E2>);(<U24C9>,<U24E3>);(<U24CA>,<U24E4>);(<U24CB>,<U24E5>);/ - (<U24CC>,<U24E6>);(<U24CD>,<U24E7>);(<U24CE>,<U24E8>);(<U24CF>,<U24E9>);/ - (<U2C00>,<U2C30>);(<U2C01>,<U2C31>);(<U2C02>,<U2C32>);(<U2C03>,<U2C33>);/ - (<U2C04>,<U2C34>);(<U2C05>,<U2C35>);(<U2C06>,<U2C36>);(<U2C07>,<U2C37>);/ - (<U2C08>,<U2C38>);(<U2C09>,<U2C39>);(<U2C0A>,<U2C3A>);(<U2C0B>,<U2C3B>);/ - (<U2C0C>,<U2C3C>);(<U2C0D>,<U2C3D>);(<U2C0E>,<U2C3E>);(<U2C0F>,<U2C3F>);/ - (<U2C10>,<U2C40>);(<U2C11>,<U2C41>);(<U2C12>,<U2C42>);(<U2C13>,<U2C43>);/ - (<U2C14>,<U2C44>);(<U2C15>,<U2C45>);(<U2C16>,<U2C46>);(<U2C17>,<U2C47>);/ - (<U2C18>,<U2C48>);(<U2C19>,<U2C49>);(<U2C1A>,<U2C4A>);(<U2C1B>,<U2C4B>);/ - (<U2C1C>,<U2C4C>);(<U2C1D>,<U2C4D>);(<U2C1E>,<U2C4E>);(<U2C1F>,<U2C4F>);/ - (<U2C20>,<U2C50>);(<U2C21>,<U2C51>);(<U2C22>,<U2C52>);(<U2C23>,<U2C53>);/ - (<U2C24>,<U2C54>);(<U2C25>,<U2C55>);(<U2C26>,<U2C56>);(<U2C27>,<U2C57>);/ - (<U2C28>,<U2C58>);(<U2C29>,<U2C59>);(<U2C2A>,<U2C5A>);(<U2C2B>,<U2C5B>);/ - (<U2C2C>,<U2C5C>);(<U2C2D>,<U2C5D>);(<U2C2E>,<U2C5E>);(<U2C2F>,<U2C5F>);/ - (<U2C60>,<U2C61>);(<U2C62>,<U026B>);(<U2C63>,<U1D7D>);(<U2C64>,<U027D>);/ - (<U2C67>,<U2C68>);(<U2C69>,<U2C6A>);(<U2C6B>,<U2C6C>);(<U2C6D>,<U0251>);/ - (<U2C6E>,<U0271>);(<U2C6F>,<U0250>);(<U2C70>,<U0252>);(<U2C72>,<U2C73>);/ - (<U2C75>,<U2C76>);(<U2C7E>,<U023F>);(<U2C7F>,<U0240>);(<U2C80>,<U2C81>);/ - (<U2C82>,<U2C83>);(<U2C84>,<U2C85>);(<U2C86>,<U2C87>);(<U2C88>,<U2C89>);/ - (<U2C8A>,<U2C8B>);(<U2C8C>,<U2C8D>);(<U2C8E>,<U2C8F>);(<U2C90>,<U2C91>);/ - (<U2C92>,<U2C93>);(<U2C94>,<U2C95>);(<U2C96>,<U2C97>);(<U2C98>,<U2C99>);/ - (<U2C9A>,<U2C9B>);(<U2C9C>,<U2C9D>);(<U2C9E>,<U2C9F>);(<U2CA0>,<U2CA1>);/ - (<U2CA2>,<U2CA3>);(<U2CA4>,<U2CA5>);(<U2CA6>,<U2CA7>);(<U2CA8>,<U2CA9>);/ - (<U2CAA>,<U2CAB>);(<U2CAC>,<U2CAD>);(<U2CAE>,<U2CAF>);(<U2CB0>,<U2CB1>);/ - (<U2CB2>,<U2CB3>);(<U2CB4>,<U2CB5>);(<U2CB6>,<U2CB7>);(<U2CB8>,<U2CB9>);/ - (<U2CBA>,<U2CBB>);(<U2CBC>,<U2CBD>);(<U2CBE>,<U2CBF>);(<U2CC0>,<U2CC1>);/ - (<U2CC2>,<U2CC3>);(<U2CC4>,<U2CC5>);(<U2CC6>,<U2CC7>);(<U2CC8>,<U2CC9>);/ - (<U2CCA>,<U2CCB>);(<U2CCC>,<U2CCD>);(<U2CCE>,<U2CCF>);(<U2CD0>,<U2CD1>);/ - (<U2CD2>,<U2CD3>);(<U2CD4>,<U2CD5>);(<U2CD6>,<U2CD7>);(<U2CD8>,<U2CD9>);/ - (<U2CDA>,<U2CDB>);(<U2CDC>,<U2CDD>);(<U2CDE>,<U2CDF>);(<U2CE0>,<U2CE1>);/ - (<U2CE2>,<U2CE3>);(<U2CEB>,<U2CEC>);(<U2CED>,<U2CEE>);(<U2CF2>,<U2CF3>);/ - (<UA640>,<UA641>);(<UA642>,<UA643>);(<UA644>,<UA645>);(<UA646>,<UA647>);/ - (<UA648>,<UA649>);(<UA64A>,<UA64B>);(<UA64C>,<UA64D>);(<UA64E>,<UA64F>);/ - (<UA650>,<UA651>);(<UA652>,<UA653>);(<UA654>,<UA655>);(<UA656>,<UA657>);/ - (<UA658>,<UA659>);(<UA65A>,<UA65B>);(<UA65C>,<UA65D>);(<UA65E>,<UA65F>);/ - (<UA660>,<UA661>);(<UA662>,<UA663>);(<UA664>,<UA665>);(<UA666>,<UA667>);/ - (<UA668>,<UA669>);(<UA66A>,<UA66B>);(<UA66C>,<UA66D>);(<UA680>,<UA681>);/ - (<UA682>,<UA683>);(<UA684>,<UA685>);(<UA686>,<UA687>);(<UA688>,<UA689>);/ - (<UA68A>,<UA68B>);(<UA68C>,<UA68D>);(<UA68E>,<UA68F>);(<UA690>,<UA691>);/ - (<UA692>,<UA693>);(<UA694>,<UA695>);(<UA696>,<UA697>);(<UA698>,<UA699>);/ - (<UA69A>,<UA69B>);(<UA722>,<UA723>);(<UA724>,<UA725>);(<UA726>,<UA727>);/ - (<UA728>,<UA729>);(<UA72A>,<UA72B>);(<UA72C>,<UA72D>);(<UA72E>,<UA72F>);/ - (<UA732>,<UA733>);(<UA734>,<UA735>);(<UA736>,<UA737>);(<UA738>,<UA739>);/ - (<UA73A>,<UA73B>);(<UA73C>,<UA73D>);(<UA73E>,<UA73F>);(<UA740>,<UA741>);/ - (<UA742>,<UA743>);(<UA744>,<UA745>);(<UA746>,<UA747>);(<UA748>,<UA749>);/ - (<UA74A>,<UA74B>);(<UA74C>,<UA74D>);(<UA74E>,<UA74F>);(<UA750>,<UA751>);/ - (<UA752>,<UA753>);(<UA754>,<UA755>);(<UA756>,<UA757>);(<UA758>,<UA759>);/ - (<UA75A>,<UA75B>);(<UA75C>,<UA75D>);(<UA75E>,<UA75F>);(<UA760>,<UA761>);/ - (<UA762>,<UA763>);(<UA764>,<UA765>);(<UA766>,<UA767>);(<UA768>,<UA769>);/ - (<UA76A>,<UA76B>);(<UA76C>,<UA76D>);(<UA76E>,<UA76F>);(<UA779>,<UA77A>);/ - (<UA77B>,<UA77C>);(<UA77D>,<U1D79>);(<UA77E>,<UA77F>);(<UA780>,<UA781>);/ - (<UA782>,<UA783>);(<UA784>,<UA785>);(<UA786>,<UA787>);(<UA78B>,<UA78C>);/ - (<UA78D>,<U0265>);(<UA790>,<UA791>);(<UA792>,<UA793>);(<UA796>,<UA797>);/ - (<UA798>,<UA799>);(<UA79A>,<UA79B>);(<UA79C>,<UA79D>);(<UA79E>,<UA79F>);/ - (<UA7A0>,<UA7A1>);(<UA7A2>,<UA7A3>);(<UA7A4>,<UA7A5>);(<UA7A6>,<UA7A7>);/ - (<UA7A8>,<UA7A9>);(<UA7AA>,<U0266>);(<UA7AB>,<U025C>);(<UA7AC>,<U0261>);/ - (<UA7AD>,<U026C>);(<UA7AE>,<U026A>);(<UA7B0>,<U029E>);(<UA7B1>,<U0287>);/ - (<UA7B2>,<U029D>);(<UA7B3>,<UAB53>);(<UA7B4>,<UA7B5>);(<UA7B6>,<UA7B7>);/ - (<UA7B8>,<UA7B9>);(<UA7BA>,<UA7BB>);(<UA7BC>,<UA7BD>);(<UA7BE>,<UA7BF>);/ - (<UA7C0>,<UA7C1>);(<UA7C2>,<UA7C3>);(<UA7C4>,<UA794>);(<UA7C5>,<U0282>);/ - (<UA7C6>,<U1D8E>);(<UA7C7>,<UA7C8>);(<UA7C9>,<UA7CA>);(<UA7D0>,<UA7D1>);/ - (<UA7D6>,<UA7D7>);(<UA7D8>,<UA7D9>);(<UA7F5>,<UA7F6>);(<UFF21>,<UFF41>);/ - (<UFF22>,<UFF42>);(<UFF23>,<UFF43>);(<UFF24>,<UFF44>);(<UFF25>,<UFF45>);/ - (<UFF26>,<UFF46>);(<UFF27>,<UFF47>);(<UFF28>,<UFF48>);(<UFF29>,<UFF49>);/ - (<UFF2A>,<UFF4A>);(<UFF2B>,<UFF4B>);(<UFF2C>,<UFF4C>);(<UFF2D>,<UFF4D>);/ - (<UFF2E>,<UFF4E>);(<UFF2F>,<UFF4F>);(<UFF30>,<UFF50>);(<UFF31>,<UFF51>);/ - (<UFF32>,<UFF52>);(<UFF33>,<UFF53>);(<UFF34>,<UFF54>);(<UFF35>,<UFF55>);/ - (<UFF36>,<UFF56>);(<UFF37>,<UFF57>);(<UFF38>,<UFF58>);(<UFF39>,<UFF59>);/ - (<UFF3A>,<UFF5A>);(<U00010400>,<U00010428>);(<U00010401>,<U00010429>);/ - (<U00010402>,<U0001042A>);(<U00010403>,<U0001042B>);/ - (<U00010404>,<U0001042C>);(<U00010405>,<U0001042D>);/ - (<U00010406>,<U0001042E>);(<U00010407>,<U0001042F>);/ - (<U00010408>,<U00010430>);(<U00010409>,<U00010431>);/ - (<U0001040A>,<U00010432>);(<U0001040B>,<U00010433>);/ - (<U0001040C>,<U00010434>);(<U0001040D>,<U00010435>);/ - (<U0001040E>,<U00010436>);(<U0001040F>,<U00010437>);/ - (<U00010410>,<U00010438>);(<U00010411>,<U00010439>);/ - (<U00010412>,<U0001043A>);(<U00010413>,<U0001043B>);/ - (<U00010414>,<U0001043C>);(<U00010415>,<U0001043D>);/ - (<U00010416>,<U0001043E>);(<U00010417>,<U0001043F>);/ - (<U00010418>,<U00010440>);(<U00010419>,<U00010441>);/ - (<U0001041A>,<U00010442>);(<U0001041B>,<U00010443>);/ - (<U0001041C>,<U00010444>);(<U0001041D>,<U00010445>);/ - (<U0001041E>,<U00010446>);(<U0001041F>,<U00010447>);/ - (<U00010420>,<U00010448>);(<U00010421>,<U00010449>);/ - (<U00010422>,<U0001044A>);(<U00010423>,<U0001044B>);/ - (<U00010424>,<U0001044C>);(<U00010425>,<U0001044D>);/ - (<U00010426>,<U0001044E>);(<U00010427>,<U0001044F>);/ - (<U000104B0>,<U000104D8>);(<U000104B1>,<U000104D9>);/ - (<U000104B2>,<U000104DA>);(<U000104B3>,<U000104DB>);/ - (<U000104B4>,<U000104DC>);(<U000104B5>,<U000104DD>);/ - (<U000104B6>,<U000104DE>);(<U000104B7>,<U000104DF>);/ - (<U000104B8>,<U000104E0>);(<U000104B9>,<U000104E1>);/ - (<U000104BA>,<U000104E2>);(<U000104BB>,<U000104E3>);/ - (<U000104BC>,<U000104E4>);(<U000104BD>,<U000104E5>);/ - (<U000104BE>,<U000104E6>);(<U000104BF>,<U000104E7>);/ - (<U000104C0>,<U000104E8>);(<U000104C1>,<U000104E9>);/ - (<U000104C2>,<U000104EA>);(<U000104C3>,<U000104EB>);/ - (<U000104C4>,<U000104EC>);(<U000104C5>,<U000104ED>);/ - (<U000104C6>,<U000104EE>);(<U000104C7>,<U000104EF>);/ - (<U000104C8>,<U000104F0>);(<U000104C9>,<U000104F1>);/ - (<U000104CA>,<U000104F2>);(<U000104CB>,<U000104F3>);/ - (<U000104CC>,<U000104F4>);(<U000104CD>,<U000104F5>);/ - (<U000104CE>,<U000104F6>);(<U000104CF>,<U000104F7>);/ - (<U000104D0>,<U000104F8>);(<U000104D1>,<U000104F9>);/ - (<U000104D2>,<U000104FA>);(<U000104D3>,<U000104FB>);/ - (<U00010570>,<U00010597>);(<U00010571>,<U00010598>);/ - (<U00010572>,<U00010599>);(<U00010573>,<U0001059A>);/ - (<U00010574>,<U0001059B>);(<U00010575>,<U0001059C>);/ - (<U00010576>,<U0001059D>);(<U00010577>,<U0001059E>);/ - (<U00010578>,<U0001059F>);(<U00010579>,<U000105A0>);/ - (<U0001057A>,<U000105A1>);(<U0001057C>,<U000105A3>);/ - (<U0001057D>,<U000105A4>);(<U0001057E>,<U000105A5>);/ - (<U0001057F>,<U000105A6>);(<U00010580>,<U000105A7>);/ - (<U00010581>,<U000105A8>);(<U00010582>,<U000105A9>);/ - (<U00010583>,<U000105AA>);(<U00010584>,<U000105AB>);/ - (<U00010585>,<U000105AC>);(<U00010586>,<U000105AD>);/ - (<U00010587>,<U000105AE>);(<U00010588>,<U000105AF>);/ - (<U00010589>,<U000105B0>);(<U0001058A>,<U000105B1>);/ - (<U0001058C>,<U000105B3>);(<U0001058D>,<U000105B4>);/ - (<U0001058E>,<U000105B5>);(<U0001058F>,<U000105B6>);/ - (<U00010590>,<U000105B7>);(<U00010591>,<U000105B8>);/ - (<U00010592>,<U000105B9>);(<U00010594>,<U000105BB>);/ - (<U00010595>,<U000105BC>);(<U00010C80>,<U00010CC0>);/ - (<U00010C81>,<U00010CC1>);(<U00010C82>,<U00010CC2>);/ - (<U00010C83>,<U00010CC3>);(<U00010C84>,<U00010CC4>);/ - (<U00010C85>,<U00010CC5>);(<U00010C86>,<U00010CC6>);/ - (<U00010C87>,<U00010CC7>);(<U00010C88>,<U00010CC8>);/ - (<U00010C89>,<U00010CC9>);(<U00010C8A>,<U00010CCA>);/ - (<U00010C8B>,<U00010CCB>);(<U00010C8C>,<U00010CCC>);/ - (<U00010C8D>,<U00010CCD>);(<U00010C8E>,<U00010CCE>);/ - (<U00010C8F>,<U00010CCF>);(<U00010C90>,<U00010CD0>);/ - (<U00010C91>,<U00010CD1>);(<U00010C92>,<U00010CD2>);/ - (<U00010C93>,<U00010CD3>);(<U00010C94>,<U00010CD4>);/ - (<U00010C95>,<U00010CD5>);(<U00010C96>,<U00010CD6>);/ - (<U00010C97>,<U00010CD7>);(<U00010C98>,<U00010CD8>);/ - (<U00010C99>,<U00010CD9>);(<U00010C9A>,<U00010CDA>);/ - (<U00010C9B>,<U00010CDB>);(<U00010C9C>,<U00010CDC>);/ - (<U00010C9D>,<U00010CDD>);(<U00010C9E>,<U00010CDE>);/ - (<U00010C9F>,<U00010CDF>);(<U00010CA0>,<U00010CE0>);/ - (<U00010CA1>,<U00010CE1>);(<U00010CA2>,<U00010CE2>);/ - (<U00010CA3>,<U00010CE3>);(<U00010CA4>,<U00010CE4>);/ - (<U00010CA5>,<U00010CE5>);(<U00010CA6>,<U00010CE6>);/ - (<U00010CA7>,<U00010CE7>);(<U00010CA8>,<U00010CE8>);/ - (<U00010CA9>,<U00010CE9>);(<U00010CAA>,<U00010CEA>);/ - (<U00010CAB>,<U00010CEB>);(<U00010CAC>,<U00010CEC>);/ - (<U00010CAD>,<U00010CED>);(<U00010CAE>,<U00010CEE>);/ - (<U00010CAF>,<U00010CEF>);(<U00010CB0>,<U00010CF0>);/ - (<U00010CB1>,<U00010CF1>);(<U00010CB2>,<U00010CF2>);/ - (<U000118A0>,<U000118C0>);(<U000118A1>,<U000118C1>);/ - (<U000118A2>,<U000118C2>);(<U000118A3>,<U000118C3>);/ - (<U000118A4>,<U000118C4>);(<U000118A5>,<U000118C5>);/ - (<U000118A6>,<U000118C6>);(<U000118A7>,<U000118C7>);/ - (<U000118A8>,<U000118C8>);(<U000118A9>,<U000118C9>);/ - (<U000118AA>,<U000118CA>);(<U000118AB>,<U000118CB>);/ - (<U000118AC>,<U000118CC>);(<U000118AD>,<U000118CD>);/ - (<U000118AE>,<U000118CE>);(<U000118AF>,<U000118CF>);/ - (<U000118B0>,<U000118D0>);(<U000118B1>,<U000118D1>);/ - (<U000118B2>,<U000118D2>);(<U000118B3>,<U000118D3>);/ - (<U000118B4>,<U000118D4>);(<U000118B5>,<U000118D5>);/ - (<U000118B6>,<U000118D6>);(<U000118B7>,<U000118D7>);/ - (<U000118B8>,<U000118D8>);(<U000118B9>,<U000118D9>);/ - (<U000118BA>,<U000118DA>);(<U000118BB>,<U000118DB>);/ - (<U000118BC>,<U000118DC>);(<U000118BD>,<U000118DD>);/ - (<U000118BE>,<U000118DE>);(<U000118BF>,<U000118DF>);/ - (<U00016E40>,<U00016E60>);(<U00016E41>,<U00016E61>);/ - (<U00016E42>,<U00016E62>);(<U00016E43>,<U00016E63>);/ - (<U00016E44>,<U00016E64>);(<U00016E45>,<U00016E65>);/ - (<U00016E46>,<U00016E66>);(<U00016E47>,<U00016E67>);/ - (<U00016E48>,<U00016E68>);(<U00016E49>,<U00016E69>);/ - (<U00016E4A>,<U00016E6A>);(<U00016E4B>,<U00016E6B>);/ - (<U00016E4C>,<U00016E6C>);(<U00016E4D>,<U00016E6D>);/ - (<U00016E4E>,<U00016E6E>);(<U00016E4F>,<U00016E6F>);/ - (<U00016E50>,<U00016E70>);(<U00016E51>,<U00016E71>);/ - (<U00016E52>,<U00016E72>);(<U00016E53>,<U00016E73>);/ - (<U00016E54>,<U00016E74>);(<U00016E55>,<U00016E75>);/ - (<U00016E56>,<U00016E76>);(<U00016E57>,<U00016E77>);/ - (<U00016E58>,<U00016E78>);(<U00016E59>,<U00016E79>);/ - (<U00016E5A>,<U00016E7A>);(<U00016E5B>,<U00016E7B>);/ - (<U00016E5C>,<U00016E7C>);(<U00016E5D>,<U00016E7D>);/ - (<U00016E5E>,<U00016E7E>);(<U00016E5F>,<U00016E7F>);/ - (<U0001E900>,<U0001E922>);(<U0001E901>,<U0001E923>);/ - (<U0001E902>,<U0001E924>);(<U0001E903>,<U0001E925>);/ - (<U0001E904>,<U0001E926>);(<U0001E905>,<U0001E927>);/ - (<U0001E906>,<U0001E928>);(<U0001E907>,<U0001E929>);/ - (<U0001E908>,<U0001E92A>);(<U0001E909>,<U0001E92B>);/ - (<U0001E90A>,<U0001E92C>);(<U0001E90B>,<U0001E92D>);/ - (<U0001E90C>,<U0001E92E>);(<U0001E90D>,<U0001E92F>);/ - (<U0001E90E>,<U0001E930>);(<U0001E90F>,<U0001E931>);/ - (<U0001E910>,<U0001E932>);(<U0001E911>,<U0001E933>);/ - (<U0001E912>,<U0001E934>);(<U0001E913>,<U0001E935>);/ - (<U0001E914>,<U0001E936>);(<U0001E915>,<U0001E937>);/ - (<U0001E916>,<U0001E938>);(<U0001E917>,<U0001E939>);/ - (<U0001E918>,<U0001E93A>);(<U0001E919>,<U0001E93B>);/ - (<U0001E91A>,<U0001E93C>);(<U0001E91B>,<U0001E93D>);/ - (<U0001E91C>,<U0001E93E>);(<U0001E91D>,<U0001E93F>);/ - (<U0001E91E>,<U0001E940>);(<U0001E91F>,<U0001E941>);/ - (<U0001E920>,<U0001E942>);(<U0001E921>,<U0001E943>) + (<U13F3>,<U13FB>);(<U13F4>,<U13FC>);(<U13F5>,<U13FD>);(<U1C89>,<U1C8A>);/ + (<U1C90>,<U10D0>);(<U1C91>,<U10D1>);(<U1C92>,<U10D2>);(<U1C93>,<U10D3>);/ + (<U1C94>,<U10D4>);(<U1C95>,<U10D5>);(<U1C96>,<U10D6>);(<U1C97>,<U10D7>);/ + (<U1C98>,<U10D8>);(<U1C99>,<U10D9>);(<U1C9A>,<U10DA>);(<U1C9B>,<U10DB>);/ + (<U1C9C>,<U10DC>);(<U1C9D>,<U10DD>);(<U1C9E>,<U10DE>);(<U1C9F>,<U10DF>);/ + (<U1CA0>,<U10E0>);(<U1CA1>,<U10E1>);(<U1CA2>,<U10E2>);(<U1CA3>,<U10E3>);/ + (<U1CA4>,<U10E4>);(<U1CA5>,<U10E5>);(<U1CA6>,<U10E6>);(<U1CA7>,<U10E7>);/ + (<U1CA8>,<U10E8>);(<U1CA9>,<U10E9>);(<U1CAA>,<U10EA>);(<U1CAB>,<U10EB>);/ + (<U1CAC>,<U10EC>);(<U1CAD>,<U10ED>);(<U1CAE>,<U10EE>);(<U1CAF>,<U10EF>);/ + (<U1CB0>,<U10F0>);(<U1CB1>,<U10F1>);(<U1CB2>,<U10F2>);(<U1CB3>,<U10F3>);/ + (<U1CB4>,<U10F4>);(<U1CB5>,<U10F5>);(<U1CB6>,<U10F6>);(<U1CB7>,<U10F7>);/ + (<U1CB8>,<U10F8>);(<U1CB9>,<U10F9>);(<U1CBA>,<U10FA>);(<U1CBD>,<U10FD>);/ + (<U1CBE>,<U10FE>);(<U1CBF>,<U10FF>);(<U1E00>,<U1E01>);(<U1E02>,<U1E03>);/ + (<U1E04>,<U1E05>);(<U1E06>,<U1E07>);(<U1E08>,<U1E09>);(<U1E0A>,<U1E0B>);/ + (<U1E0C>,<U1E0D>);(<U1E0E>,<U1E0F>);(<U1E10>,<U1E11>);(<U1E12>,<U1E13>);/ + (<U1E14>,<U1E15>);(<U1E16>,<U1E17>);(<U1E18>,<U1E19>);(<U1E1A>,<U1E1B>);/ + (<U1E1C>,<U1E1D>);(<U1E1E>,<U1E1F>);(<U1E20>,<U1E21>);(<U1E22>,<U1E23>);/ + (<U1E24>,<U1E25>);(<U1E26>,<U1E27>);(<U1E28>,<U1E29>);(<U1E2A>,<U1E2B>);/ + (<U1E2C>,<U1E2D>);(<U1E2E>,<U1E2F>);(<U1E30>,<U1E31>);(<U1E32>,<U1E33>);/ + (<U1E34>,<U1E35>);(<U1E36>,<U1E37>);(<U1E38>,<U1E39>);(<U1E3A>,<U1E3B>);/ + (<U1E3C>,<U1E3D>);(<U1E3E>,<U1E3F>);(<U1E40>,<U1E41>);(<U1E42>,<U1E43>);/ + (<U1E44>,<U1E45>);(<U1E46>,<U1E47>);(<U1E48>,<U1E49>);(<U1E4A>,<U1E4B>);/ + (<U1E4C>,<U1E4D>);(<U1E4E>,<U1E4F>);(<U1E50>,<U1E51>);(<U1E52>,<U1E53>);/ + (<U1E54>,<U1E55>);(<U1E56>,<U1E57>);(<U1E58>,<U1E59>);(<U1E5A>,<U1E5B>);/ + (<U1E5C>,<U1E5D>);(<U1E5E>,<U1E5F>);(<U1E60>,<U1E61>);(<U1E62>,<U1E63>);/ + (<U1E64>,<U1E65>);(<U1E66>,<U1E67>);(<U1E68>,<U1E69>);(<U1E6A>,<U1E6B>);/ + (<U1E6C>,<U1E6D>);(<U1E6E>,<U1E6F>);(<U1E70>,<U1E71>);(<U1E72>,<U1E73>);/ + (<U1E74>,<U1E75>);(<U1E76>,<U1E77>);(<U1E78>,<U1E79>);(<U1E7A>,<U1E7B>);/ + (<U1E7C>,<U1E7D>);(<U1E7E>,<U1E7F>);(<U1E80>,<U1E81>);(<U1E82>,<U1E83>);/ + (<U1E84>,<U1E85>);(<U1E86>,<U1E87>);(<U1E88>,<U1E89>);(<U1E8A>,<U1E8B>);/ + (<U1E8C>,<U1E8D>);(<U1E8E>,<U1E8F>);(<U1E90>,<U1E91>);(<U1E92>,<U1E93>);/ + (<U1E94>,<U1E95>);(<U1E9E>,<U00DF>);(<U1EA0>,<U1EA1>);(<U1EA2>,<U1EA3>);/ + (<U1EA4>,<U1EA5>);(<U1EA6>,<U1EA7>);(<U1EA8>,<U1EA9>);(<U1EAA>,<U1EAB>);/ + (<U1EAC>,<U1EAD>);(<U1EAE>,<U1EAF>);(<U1EB0>,<U1EB1>);(<U1EB2>,<U1EB3>);/ + (<U1EB4>,<U1EB5>);(<U1EB6>,<U1EB7>);(<U1EB8>,<U1EB9>);(<U1EBA>,<U1EBB>);/ + (<U1EBC>,<U1EBD>);(<U1EBE>,<U1EBF>);(<U1EC0>,<U1EC1>);(<U1EC2>,<U1EC3>);/ + (<U1EC4>,<U1EC5>);(<U1EC6>,<U1EC7>);(<U1EC8>,<U1EC9>);(<U1ECA>,<U1ECB>);/ + (<U1ECC>,<U1ECD>);(<U1ECE>,<U1ECF>);(<U1ED0>,<U1ED1>);(<U1ED2>,<U1ED3>);/ + (<U1ED4>,<U1ED5>);(<U1ED6>,<U1ED7>);(<U1ED8>,<U1ED9>);(<U1EDA>,<U1EDB>);/ + (<U1EDC>,<U1EDD>);(<U1EDE>,<U1EDF>);(<U1EE0>,<U1EE1>);(<U1EE2>,<U1EE3>);/ + (<U1EE4>,<U1EE5>);(<U1EE6>,<U1EE7>);(<U1EE8>,<U1EE9>);(<U1EEA>,<U1EEB>);/ + (<U1EEC>,<U1EED>);(<U1EEE>,<U1EEF>);(<U1EF0>,<U1EF1>);(<U1EF2>,<U1EF3>);/ + (<U1EF4>,<U1EF5>);(<U1EF6>,<U1EF7>);(<U1EF8>,<U1EF9>);(<U1EFA>,<U1EFB>);/ + (<U1EFC>,<U1EFD>);(<U1EFE>,<U1EFF>);(<U1F08>,<U1F00>);(<U1F09>,<U1F01>);/ + (<U1F0A>,<U1F02>);(<U1F0B>,<U1F03>);(<U1F0C>,<U1F04>);(<U1F0D>,<U1F05>);/ + (<U1F0E>,<U1F06>);(<U1F0F>,<U1F07>);(<U1F18>,<U1F10>);(<U1F19>,<U1F11>);/ + (<U1F1A>,<U1F12>);(<U1F1B>,<U1F13>);(<U1F1C>,<U1F14>);(<U1F1D>,<U1F15>);/ + (<U1F28>,<U1F20>);(<U1F29>,<U1F21>);(<U1F2A>,<U1F22>);(<U1F2B>,<U1F23>);/ + (<U1F2C>,<U1F24>);(<U1F2D>,<U1F25>);(<U1F2E>,<U1F26>);(<U1F2F>,<U1F27>);/ + (<U1F38>,<U1F30>);(<U1F39>,<U1F31>);(<U1F3A>,<U1F32>);(<U1F3B>,<U1F33>);/ + (<U1F3C>,<U1F34>);(<U1F3D>,<U1F35>);(<U1F3E>,<U1F36>);(<U1F3F>,<U1F37>);/ + (<U1F48>,<U1F40>);(<U1F49>,<U1F41>);(<U1F4A>,<U1F42>);(<U1F4B>,<U1F43>);/ + (<U1F4C>,<U1F44>);(<U1F4D>,<U1F45>);(<U1F59>,<U1F51>);(<U1F5B>,<U1F53>);/ + (<U1F5D>,<U1F55>);(<U1F5F>,<U1F57>);(<U1F68>,<U1F60>);(<U1F69>,<U1F61>);/ + (<U1F6A>,<U1F62>);(<U1F6B>,<U1F63>);(<U1F6C>,<U1F64>);(<U1F6D>,<U1F65>);/ + (<U1F6E>,<U1F66>);(<U1F6F>,<U1F67>);(<U1F88>,<U1F80>);(<U1F89>,<U1F81>);/ + (<U1F8A>,<U1F82>);(<U1F8B>,<U1F83>);(<U1F8C>,<U1F84>);(<U1F8D>,<U1F85>);/ + (<U1F8E>,<U1F86>);(<U1F8F>,<U1F87>);(<U1F98>,<U1F90>);(<U1F99>,<U1F91>);/ + (<U1F9A>,<U1F92>);(<U1F9B>,<U1F93>);(<U1F9C>,<U1F94>);(<U1F9D>,<U1F95>);/ + (<U1F9E>,<U1F96>);(<U1F9F>,<U1F97>);(<U1FA8>,<U1FA0>);(<U1FA9>,<U1FA1>);/ + (<U1FAA>,<U1FA2>);(<U1FAB>,<U1FA3>);(<U1FAC>,<U1FA4>);(<U1FAD>,<U1FA5>);/ + (<U1FAE>,<U1FA6>);(<U1FAF>,<U1FA7>);(<U1FB8>,<U1FB0>);(<U1FB9>,<U1FB1>);/ + (<U1FBA>,<U1F70>);(<U1FBB>,<U1F71>);(<U1FBC>,<U1FB3>);(<U1FC8>,<U1F72>);/ + (<U1FC9>,<U1F73>);(<U1FCA>,<U1F74>);(<U1FCB>,<U1F75>);(<U1FCC>,<U1FC3>);/ + (<U1FD8>,<U1FD0>);(<U1FD9>,<U1FD1>);(<U1FDA>,<U1F76>);(<U1FDB>,<U1F77>);/ + (<U1FE8>,<U1FE0>);(<U1FE9>,<U1FE1>);(<U1FEA>,<U1F7A>);(<U1FEB>,<U1F7B>);/ + (<U1FEC>,<U1FE5>);(<U1FF8>,<U1F78>);(<U1FF9>,<U1F79>);(<U1FFA>,<U1F7C>);/ + (<U1FFB>,<U1F7D>);(<U1FFC>,<U1FF3>);(<U2126>,<U03C9>);(<U212A>,<U006B>);/ + (<U212B>,<U00E5>);(<U2132>,<U214E>);(<U2160>,<U2170>);(<U2161>,<U2171>);/ + (<U2162>,<U2172>);(<U2163>,<U2173>);(<U2164>,<U2174>);(<U2165>,<U2175>);/ + (<U2166>,<U2176>);(<U2167>,<U2177>);(<U2168>,<U2178>);(<U2169>,<U2179>);/ + (<U216A>,<U217A>);(<U216B>,<U217B>);(<U216C>,<U217C>);(<U216D>,<U217D>);/ + (<U216E>,<U217E>);(<U216F>,<U217F>);(<U2183>,<U2184>);(<U24B6>,<U24D0>);/ + (<U24B7>,<U24D1>);(<U24B8>,<U24D2>);(<U24B9>,<U24D3>);(<U24BA>,<U24D4>);/ + (<U24BB>,<U24D5>);(<U24BC>,<U24D6>);(<U24BD>,<U24D7>);(<U24BE>,<U24D8>);/ + (<U24BF>,<U24D9>);(<U24C0>,<U24DA>);(<U24C1>,<U24DB>);(<U24C2>,<U24DC>);/ + (<U24C3>,<U24DD>);(<U24C4>,<U24DE>);(<U24C5>,<U24DF>);(<U24C6>,<U24E0>);/ + (<U24C7>,<U24E1>);(<U24C8>,<U24E2>);(<U24C9>,<U24E3>);(<U24CA>,<U24E4>);/ + (<U24CB>,<U24E5>);(<U24CC>,<U24E6>);(<U24CD>,<U24E7>);(<U24CE>,<U24E8>);/ + (<U24CF>,<U24E9>);(<U2C00>,<U2C30>);(<U2C01>,<U2C31>);(<U2C02>,<U2C32>);/ + (<U2C03>,<U2C33>);(<U2C04>,<U2C34>);(<U2C05>,<U2C35>);(<U2C06>,<U2C36>);/ + (<U2C07>,<U2C37>);(<U2C08>,<U2C38>);(<U2C09>,<U2C39>);(<U2C0A>,<U2C3A>);/ + (<U2C0B>,<U2C3B>);(<U2C0C>,<U2C3C>);(<U2C0D>,<U2C3D>);(<U2C0E>,<U2C3E>);/ + (<U2C0F>,<U2C3F>);(<U2C10>,<U2C40>);(<U2C11>,<U2C41>);(<U2C12>,<U2C42>);/ + (<U2C13>,<U2C43>);(<U2C14>,<U2C44>);(<U2C15>,<U2C45>);(<U2C16>,<U2C46>);/ + (<U2C17>,<U2C47>);(<U2C18>,<U2C48>);(<U2C19>,<U2C49>);(<U2C1A>,<U2C4A>);/ + (<U2C1B>,<U2C4B>);(<U2C1C>,<U2C4C>);(<U2C1D>,<U2C4D>);(<U2C1E>,<U2C4E>);/ + (<U2C1F>,<U2C4F>);(<U2C20>,<U2C50>);(<U2C21>,<U2C51>);(<U2C22>,<U2C52>);/ + (<U2C23>,<U2C53>);(<U2C24>,<U2C54>);(<U2C25>,<U2C55>);(<U2C26>,<U2C56>);/ + (<U2C27>,<U2C57>);(<U2C28>,<U2C58>);(<U2C29>,<U2C59>);(<U2C2A>,<U2C5A>);/ + (<U2C2B>,<U2C5B>);(<U2C2C>,<U2C5C>);(<U2C2D>,<U2C5D>);(<U2C2E>,<U2C5E>);/ + (<U2C2F>,<U2C5F>);(<U2C60>,<U2C61>);(<U2C62>,<U026B>);(<U2C63>,<U1D7D>);/ + (<U2C64>,<U027D>);(<U2C67>,<U2C68>);(<U2C69>,<U2C6A>);(<U2C6B>,<U2C6C>);/ + (<U2C6D>,<U0251>);(<U2C6E>,<U0271>);(<U2C6F>,<U0250>);(<U2C70>,<U0252>);/ + (<U2C72>,<U2C73>);(<U2C75>,<U2C76>);(<U2C7E>,<U023F>);(<U2C7F>,<U0240>);/ + (<U2C80>,<U2C81>);(<U2C82>,<U2C83>);(<U2C84>,<U2C85>);(<U2C86>,<U2C87>);/ + (<U2C88>,<U2C89>);(<U2C8A>,<U2C8B>);(<U2C8C>,<U2C8D>);(<U2C8E>,<U2C8F>);/ + (<U2C90>,<U2C91>);(<U2C92>,<U2C93>);(<U2C94>,<U2C95>);(<U2C96>,<U2C97>);/ + (<U2C98>,<U2C99>);(<U2C9A>,<U2C9B>);(<U2C9C>,<U2C9D>);(<U2C9E>,<U2C9F>);/ + (<U2CA0>,<U2CA1>);(<U2CA2>,<U2CA3>);(<U2CA4>,<U2CA5>);(<U2CA6>,<U2CA7>);/ + (<U2CA8>,<U2CA9>);(<U2CAA>,<U2CAB>);(<U2CAC>,<U2CAD>);(<U2CAE>,<U2CAF>);/ + (<U2CB0>,<U2CB1>);(<U2CB2>,<U2CB3>);(<U2CB4>,<U2CB5>);(<U2CB6>,<U2CB7>);/ + (<U2CB8>,<U2CB9>);(<U2CBA>,<U2CBB>);(<U2CBC>,<U2CBD>);(<U2CBE>,<U2CBF>);/ + (<U2CC0>,<U2CC1>);(<U2CC2>,<U2CC3>);(<U2CC4>,<U2CC5>);(<U2CC6>,<U2CC7>);/ + (<U2CC8>,<U2CC9>);(<U2CCA>,<U2CCB>);(<U2CCC>,<U2CCD>);(<U2CCE>,<U2CCF>);/ + (<U2CD0>,<U2CD1>);(<U2CD2>,<U2CD3>);(<U2CD4>,<U2CD5>);(<U2CD6>,<U2CD7>);/ + (<U2CD8>,<U2CD9>);(<U2CDA>,<U2CDB>);(<U2CDC>,<U2CDD>);(<U2CDE>,<U2CDF>);/ + (<U2CE0>,<U2CE1>);(<U2CE2>,<U2CE3>);(<U2CEB>,<U2CEC>);(<U2CED>,<U2CEE>);/ + (<U2CF2>,<U2CF3>);(<UA640>,<UA641>);(<UA642>,<UA643>);(<UA644>,<UA645>);/ + (<UA646>,<UA647>);(<UA648>,<UA649>);(<UA64A>,<UA64B>);(<UA64C>,<UA64D>);/ + (<UA64E>,<UA64F>);(<UA650>,<UA651>);(<UA652>,<UA653>);(<UA654>,<UA655>);/ + (<UA656>,<UA657>);(<UA658>,<UA659>);(<UA65A>,<UA65B>);(<UA65C>,<UA65D>);/ + (<UA65E>,<UA65F>);(<UA660>,<UA661>);(<UA662>,<UA663>);(<UA664>,<UA665>);/ + (<UA666>,<UA667>);(<UA668>,<UA669>);(<UA66A>,<UA66B>);(<UA66C>,<UA66D>);/ + (<UA680>,<UA681>);(<UA682>,<UA683>);(<UA684>,<UA685>);(<UA686>,<UA687>);/ + (<UA688>,<UA689>);(<UA68A>,<UA68B>);(<UA68C>,<UA68D>);(<UA68E>,<UA68F>);/ + (<UA690>,<UA691>);(<UA692>,<UA693>);(<UA694>,<UA695>);(<UA696>,<UA697>);/ + (<UA698>,<UA699>);(<UA69A>,<UA69B>);(<UA722>,<UA723>);(<UA724>,<UA725>);/ + (<UA726>,<UA727>);(<UA728>,<UA729>);(<UA72A>,<UA72B>);(<UA72C>,<UA72D>);/ + (<UA72E>,<UA72F>);(<UA732>,<UA733>);(<UA734>,<UA735>);(<UA736>,<UA737>);/ + (<UA738>,<UA739>);(<UA73A>,<UA73B>);(<UA73C>,<UA73D>);(<UA73E>,<UA73F>);/ + (<UA740>,<UA741>);(<UA742>,<UA743>);(<UA744>,<UA745>);(<UA746>,<UA747>);/ + (<UA748>,<UA749>);(<UA74A>,<UA74B>);(<UA74C>,<UA74D>);(<UA74E>,<UA74F>);/ + (<UA750>,<UA751>);(<UA752>,<UA753>);(<UA754>,<UA755>);(<UA756>,<UA757>);/ + (<UA758>,<UA759>);(<UA75A>,<UA75B>);(<UA75C>,<UA75D>);(<UA75E>,<UA75F>);/ + (<UA760>,<UA761>);(<UA762>,<UA763>);(<UA764>,<UA765>);(<UA766>,<UA767>);/ + (<UA768>,<UA769>);(<UA76A>,<UA76B>);(<UA76C>,<UA76D>);(<UA76E>,<UA76F>);/ + (<UA779>,<UA77A>);(<UA77B>,<UA77C>);(<UA77D>,<U1D79>);(<UA77E>,<UA77F>);/ + (<UA780>,<UA781>);(<UA782>,<UA783>);(<UA784>,<UA785>);(<UA786>,<UA787>);/ + (<UA78B>,<UA78C>);(<UA78D>,<U0265>);(<UA790>,<UA791>);(<UA792>,<UA793>);/ + (<UA796>,<UA797>);(<UA798>,<UA799>);(<UA79A>,<UA79B>);(<UA79C>,<UA79D>);/ + (<UA79E>,<UA79F>);(<UA7A0>,<UA7A1>);(<UA7A2>,<UA7A3>);(<UA7A4>,<UA7A5>);/ + (<UA7A6>,<UA7A7>);(<UA7A8>,<UA7A9>);(<UA7AA>,<U0266>);(<UA7AB>,<U025C>);/ + (<UA7AC>,<U0261>);(<UA7AD>,<U026C>);(<UA7AE>,<U026A>);(<UA7B0>,<U029E>);/ + (<UA7B1>,<U0287>);(<UA7B2>,<U029D>);(<UA7B3>,<UAB53>);(<UA7B4>,<UA7B5>);/ + (<UA7B6>,<UA7B7>);(<UA7B8>,<UA7B9>);(<UA7BA>,<UA7BB>);(<UA7BC>,<UA7BD>);/ + (<UA7BE>,<UA7BF>);(<UA7C0>,<UA7C1>);(<UA7C2>,<UA7C3>);(<UA7C4>,<UA794>);/ + (<UA7C5>,<U0282>);(<UA7C6>,<U1D8E>);(<UA7C7>,<UA7C8>);(<UA7C9>,<UA7CA>);/ + (<UA7CB>,<U0264>);(<UA7CC>,<UA7CD>);(<UA7D0>,<UA7D1>);(<UA7D6>,<UA7D7>);/ + (<UA7D8>,<UA7D9>);(<UA7DA>,<UA7DB>);(<UA7DC>,<U019B>);(<UA7F5>,<UA7F6>);/ + (<UFF21>,<UFF41>);(<UFF22>,<UFF42>);(<UFF23>,<UFF43>);(<UFF24>,<UFF44>);/ + (<UFF25>,<UFF45>);(<UFF26>,<UFF46>);(<UFF27>,<UFF47>);(<UFF28>,<UFF48>);/ + (<UFF29>,<UFF49>);(<UFF2A>,<UFF4A>);(<UFF2B>,<UFF4B>);(<UFF2C>,<UFF4C>);/ + (<UFF2D>,<UFF4D>);(<UFF2E>,<UFF4E>);(<UFF2F>,<UFF4F>);(<UFF30>,<UFF50>);/ + (<UFF31>,<UFF51>);(<UFF32>,<UFF52>);(<UFF33>,<UFF53>);(<UFF34>,<UFF54>);/ + (<UFF35>,<UFF55>);(<UFF36>,<UFF56>);(<UFF37>,<UFF57>);(<UFF38>,<UFF58>);/ + (<UFF39>,<UFF59>);(<UFF3A>,<UFF5A>);(<U00010400>,<U00010428>);/ + (<U00010401>,<U00010429>);(<U00010402>,<U0001042A>);/ + (<U00010403>,<U0001042B>);(<U00010404>,<U0001042C>);/ + (<U00010405>,<U0001042D>);(<U00010406>,<U0001042E>);/ + (<U00010407>,<U0001042F>);(<U00010408>,<U00010430>);/ + (<U00010409>,<U00010431>);(<U0001040A>,<U00010432>);/ + (<U0001040B>,<U00010433>);(<U0001040C>,<U00010434>);/ + (<U0001040D>,<U00010435>);(<U0001040E>,<U00010436>);/ + (<U0001040F>,<U00010437>);(<U00010410>,<U00010438>);/ + (<U00010411>,<U00010439>);(<U00010412>,<U0001043A>);/ + (<U00010413>,<U0001043B>);(<U00010414>,<U0001043C>);/ + (<U00010415>,<U0001043D>);(<U00010416>,<U0001043E>);/ + (<U00010417>,<U0001043F>);(<U00010418>,<U00010440>);/ + (<U00010419>,<U00010441>);(<U0001041A>,<U00010442>);/ + (<U0001041B>,<U00010443>);(<U0001041C>,<U00010444>);/ + (<U0001041D>,<U00010445>);(<U0001041E>,<U00010446>);/ + (<U0001041F>,<U00010447>);(<U00010420>,<U00010448>);/ + (<U00010421>,<U00010449>);(<U00010422>,<U0001044A>);/ + (<U00010423>,<U0001044B>);(<U00010424>,<U0001044C>);/ + (<U00010425>,<U0001044D>);(<U00010426>,<U0001044E>);/ + (<U00010427>,<U0001044F>);(<U000104B0>,<U000104D8>);/ + (<U000104B1>,<U000104D9>);(<U000104B2>,<U000104DA>);/ + (<U000104B3>,<U000104DB>);(<U000104B4>,<U000104DC>);/ + (<U000104B5>,<U000104DD>);(<U000104B6>,<U000104DE>);/ + (<U000104B7>,<U000104DF>);(<U000104B8>,<U000104E0>);/ + (<U000104B9>,<U000104E1>);(<U000104BA>,<U000104E2>);/ + (<U000104BB>,<U000104E3>);(<U000104BC>,<U000104E4>);/ + (<U000104BD>,<U000104E5>);(<U000104BE>,<U000104E6>);/ + (<U000104BF>,<U000104E7>);(<U000104C0>,<U000104E8>);/ + (<U000104C1>,<U000104E9>);(<U000104C2>,<U000104EA>);/ + (<U000104C3>,<U000104EB>);(<U000104C4>,<U000104EC>);/ + (<U000104C5>,<U000104ED>);(<U000104C6>,<U000104EE>);/ + (<U000104C7>,<U000104EF>);(<U000104C8>,<U000104F0>);/ + (<U000104C9>,<U000104F1>);(<U000104CA>,<U000104F2>);/ + (<U000104CB>,<U000104F3>);(<U000104CC>,<U000104F4>);/ + (<U000104CD>,<U000104F5>);(<U000104CE>,<U000104F6>);/ + (<U000104CF>,<U000104F7>);(<U000104D0>,<U000104F8>);/ + (<U000104D1>,<U000104F9>);(<U000104D2>,<U000104FA>);/ + (<U000104D3>,<U000104FB>);(<U00010570>,<U00010597>);/ + (<U00010571>,<U00010598>);(<U00010572>,<U00010599>);/ + (<U00010573>,<U0001059A>);(<U00010574>,<U0001059B>);/ + (<U00010575>,<U0001059C>);(<U00010576>,<U0001059D>);/ + (<U00010577>,<U0001059E>);(<U00010578>,<U0001059F>);/ + (<U00010579>,<U000105A0>);(<U0001057A>,<U000105A1>);/ + (<U0001057C>,<U000105A3>);(<U0001057D>,<U000105A4>);/ + (<U0001057E>,<U000105A5>);(<U0001057F>,<U000105A6>);/ + (<U00010580>,<U000105A7>);(<U00010581>,<U000105A8>);/ + (<U00010582>,<U000105A9>);(<U00010583>,<U000105AA>);/ + (<U00010584>,<U000105AB>);(<U00010585>,<U000105AC>);/ + (<U00010586>,<U000105AD>);(<U00010587>,<U000105AE>);/ + (<U00010588>,<U000105AF>);(<U00010589>,<U000105B0>);/ + (<U0001058A>,<U000105B1>);(<U0001058C>,<U000105B3>);/ + (<U0001058D>,<U000105B4>);(<U0001058E>,<U000105B5>);/ + (<U0001058F>,<U000105B6>);(<U00010590>,<U000105B7>);/ + (<U00010591>,<U000105B8>);(<U00010592>,<U000105B9>);/ + (<U00010594>,<U000105BB>);(<U00010595>,<U000105BC>);/ + (<U00010C80>,<U00010CC0>);(<U00010C81>,<U00010CC1>);/ + (<U00010C82>,<U00010CC2>);(<U00010C83>,<U00010CC3>);/ + (<U00010C84>,<U00010CC4>);(<U00010C85>,<U00010CC5>);/ + (<U00010C86>,<U00010CC6>);(<U00010C87>,<U00010CC7>);/ + (<U00010C88>,<U00010CC8>);(<U00010C89>,<U00010CC9>);/ + (<U00010C8A>,<U00010CCA>);(<U00010C8B>,<U00010CCB>);/ + (<U00010C8C>,<U00010CCC>);(<U00010C8D>,<U00010CCD>);/ + (<U00010C8E>,<U00010CCE>);(<U00010C8F>,<U00010CCF>);/ + (<U00010C90>,<U00010CD0>);(<U00010C91>,<U00010CD1>);/ + (<U00010C92>,<U00010CD2>);(<U00010C93>,<U00010CD3>);/ + (<U00010C94>,<U00010CD4>);(<U00010C95>,<U00010CD5>);/ + (<U00010C96>,<U00010CD6>);(<U00010C97>,<U00010CD7>);/ + (<U00010C98>,<U00010CD8>);(<U00010C99>,<U00010CD9>);/ + (<U00010C9A>,<U00010CDA>);(<U00010C9B>,<U00010CDB>);/ + (<U00010C9C>,<U00010CDC>);(<U00010C9D>,<U00010CDD>);/ + (<U00010C9E>,<U00010CDE>);(<U00010C9F>,<U00010CDF>);/ + (<U00010CA0>,<U00010CE0>);(<U00010CA1>,<U00010CE1>);/ + (<U00010CA2>,<U00010CE2>);(<U00010CA3>,<U00010CE3>);/ + (<U00010CA4>,<U00010CE4>);(<U00010CA5>,<U00010CE5>);/ + (<U00010CA6>,<U00010CE6>);(<U00010CA7>,<U00010CE7>);/ + (<U00010CA8>,<U00010CE8>);(<U00010CA9>,<U00010CE9>);/ + (<U00010CAA>,<U00010CEA>);(<U00010CAB>,<U00010CEB>);/ + (<U00010CAC>,<U00010CEC>);(<U00010CAD>,<U00010CED>);/ + (<U00010CAE>,<U00010CEE>);(<U00010CAF>,<U00010CEF>);/ + (<U00010CB0>,<U00010CF0>);(<U00010CB1>,<U00010CF1>);/ + (<U00010CB2>,<U00010CF2>);(<U00010D50>,<U00010D70>);/ + (<U00010D51>,<U00010D71>);(<U00010D52>,<U00010D72>);/ + (<U00010D53>,<U00010D73>);(<U00010D54>,<U00010D74>);/ + (<U00010D55>,<U00010D75>);(<U00010D56>,<U00010D76>);/ + (<U00010D57>,<U00010D77>);(<U00010D58>,<U00010D78>);/ + (<U00010D59>,<U00010D79>);(<U00010D5A>,<U00010D7A>);/ + (<U00010D5B>,<U00010D7B>);(<U00010D5C>,<U00010D7C>);/ + (<U00010D5D>,<U00010D7D>);(<U00010D5E>,<U00010D7E>);/ + (<U00010D5F>,<U00010D7F>);(<U00010D60>,<U00010D80>);/ + (<U00010D61>,<U00010D81>);(<U00010D62>,<U00010D82>);/ + (<U00010D63>,<U00010D83>);(<U00010D64>,<U00010D84>);/ + (<U00010D65>,<U00010D85>);(<U000118A0>,<U000118C0>);/ + (<U000118A1>,<U000118C1>);(<U000118A2>,<U000118C2>);/ + (<U000118A3>,<U000118C3>);(<U000118A4>,<U000118C4>);/ + (<U000118A5>,<U000118C5>);(<U000118A6>,<U000118C6>);/ + (<U000118A7>,<U000118C7>);(<U000118A8>,<U000118C8>);/ + (<U000118A9>,<U000118C9>);(<U000118AA>,<U000118CA>);/ + (<U000118AB>,<U000118CB>);(<U000118AC>,<U000118CC>);/ + (<U000118AD>,<U000118CD>);(<U000118AE>,<U000118CE>);/ + (<U000118AF>,<U000118CF>);(<U000118B0>,<U000118D0>);/ + (<U000118B1>,<U000118D1>);(<U000118B2>,<U000118D2>);/ + (<U000118B3>,<U000118D3>);(<U000118B4>,<U000118D4>);/ + (<U000118B5>,<U000118D5>);(<U000118B6>,<U000118D6>);/ + (<U000118B7>,<U000118D7>);(<U000118B8>,<U000118D8>);/ + (<U000118B9>,<U000118D9>);(<U000118BA>,<U000118DA>);/ + (<U000118BB>,<U000118DB>);(<U000118BC>,<U000118DC>);/ + (<U000118BD>,<U000118DD>);(<U000118BE>,<U000118DE>);/ + (<U000118BF>,<U000118DF>);(<U00016E40>,<U00016E60>);/ + (<U00016E41>,<U00016E61>);(<U00016E42>,<U00016E62>);/ + (<U00016E43>,<U00016E63>);(<U00016E44>,<U00016E64>);/ + (<U00016E45>,<U00016E65>);(<U00016E46>,<U00016E66>);/ + (<U00016E47>,<U00016E67>);(<U00016E48>,<U00016E68>);/ + (<U00016E49>,<U00016E69>);(<U00016E4A>,<U00016E6A>);/ + (<U00016E4B>,<U00016E6B>);(<U00016E4C>,<U00016E6C>);/ + (<U00016E4D>,<U00016E6D>);(<U00016E4E>,<U00016E6E>);/ + (<U00016E4F>,<U00016E6F>);(<U00016E50>,<U00016E70>);/ + (<U00016E51>,<U00016E71>);(<U00016E52>,<U00016E72>);/ + (<U00016E53>,<U00016E73>);(<U00016E54>,<U00016E74>);/ + (<U00016E55>,<U00016E75>);(<U00016E56>,<U00016E76>);/ + (<U00016E57>,<U00016E77>);(<U00016E58>,<U00016E78>);/ + (<U00016E59>,<U00016E79>);(<U00016E5A>,<U00016E7A>);/ + (<U00016E5B>,<U00016E7B>);(<U00016E5C>,<U00016E7C>);/ + (<U00016E5D>,<U00016E7D>);(<U00016E5E>,<U00016E7E>);/ + (<U00016E5F>,<U00016E7F>);(<U0001E900>,<U0001E922>);/ + (<U0001E901>,<U0001E923>);(<U0001E902>,<U0001E924>);/ + (<U0001E903>,<U0001E925>);(<U0001E904>,<U0001E926>);/ + (<U0001E905>,<U0001E927>);(<U0001E906>,<U0001E928>);/ + (<U0001E907>,<U0001E929>);(<U0001E908>,<U0001E92A>);/ + (<U0001E909>,<U0001E92B>);(<U0001E90A>,<U0001E92C>);/ + (<U0001E90B>,<U0001E92D>);(<U0001E90C>,<U0001E92E>);/ + (<U0001E90D>,<U0001E92F>);(<U0001E90E>,<U0001E930>);/ + (<U0001E90F>,<U0001E931>);(<U0001E910>,<U0001E932>);/ + (<U0001E911>,<U0001E933>);(<U0001E912>,<U0001E934>);/ + (<U0001E913>,<U0001E935>);(<U0001E914>,<U0001E936>);/ + (<U0001E915>,<U0001E937>);(<U0001E916>,<U0001E938>);/ + (<U0001E917>,<U0001E939>);(<U0001E918>,<U0001E93A>);/ + (<U0001E919>,<U0001E93B>);(<U0001E91A>,<U0001E93C>);/ + (<U0001E91B>,<U0001E93D>);(<U0001E91C>,<U0001E93E>);/ + (<U0001E91D>,<U0001E93F>);(<U0001E91E>,<U0001E940>);/ + (<U0001E91F>,<U0001E941>);(<U0001E920>,<U0001E942>);/ + (<U0001E921>,<U0001E943>) map "totitle"; / (<U0061>,<U0041>);(<U0062>,<U0042>);(<U0063>,<U0043>);(<U0064>,<U0044>);/ @@ -2065,261 +2133,262 @@ map "totitle"; / (<U0177>,<U0176>);(<U017A>,<U0179>);(<U017C>,<U017B>);(<U017E>,<U017D>);/ (<U017F>,<U0053>);(<U0180>,<U0243>);(<U0183>,<U0182>);(<U0185>,<U0184>);/ (<U0188>,<U0187>);(<U018C>,<U018B>);(<U0192>,<U0191>);(<U0195>,<U01F6>);/ - (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019E>,<U0220>);(<U01A1>,<U01A0>);/ - (<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);(<U01AD>,<U01AC>);/ - (<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);(<U01B9>,<U01B8>);/ - (<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C4>,<U01C5>);(<U01C6>,<U01C5>);/ - (<U01C7>,<U01C8>);(<U01C9>,<U01C8>);(<U01CA>,<U01CB>);(<U01CC>,<U01CB>);/ - (<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);(<U01D4>,<U01D3>);/ - (<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);(<U01DC>,<U01DB>);/ - (<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);(<U01E3>,<U01E2>);/ - (<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);(<U01EB>,<U01EA>);/ - (<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F1>,<U01F2>);(<U01F3>,<U01F2>);/ - (<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);(<U01FD>,<U01FC>);/ - (<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);(<U0205>,<U0204>);/ - (<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);(<U020D>,<U020C>);/ - (<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);(<U0215>,<U0214>);/ - (<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);(<U021D>,<U021C>);/ - (<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);(<U0227>,<U0226>);/ - (<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);(<U022F>,<U022E>);/ - (<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);(<U023F>,<U2C7E>);/ - (<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);(<U0249>,<U0248>);/ - (<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);(<U0250>,<U2C6F>);/ - (<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);(<U0254>,<U0186>);/ - (<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);(<U025B>,<U0190>);/ - (<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);(<U0263>,<U0194>);/ - (<U0265>,<UA78D>);(<U0266>,<UA7AA>);(<U0268>,<U0197>);(<U0269>,<U0196>);/ - (<U026A>,<UA7AE>);(<U026B>,<U2C62>);(<U026C>,<UA7AD>);(<U026F>,<U019C>);/ - (<U0271>,<U2C6E>);(<U0272>,<U019D>);(<U0275>,<U019F>);(<U027D>,<U2C64>);/ - (<U0280>,<U01A6>);(<U0282>,<UA7C5>);(<U0283>,<U01A9>);(<U0287>,<UA7B1>);/ - (<U0288>,<U01AE>);(<U0289>,<U0244>);(<U028A>,<U01B1>);(<U028B>,<U01B2>);/ - (<U028C>,<U0245>);(<U0292>,<U01B7>);(<U029D>,<UA7B2>);(<U029E>,<UA7B0>);/ - (<U0345>,<U0399>);(<U0371>,<U0370>);(<U0373>,<U0372>);(<U0377>,<U0376>);/ - (<U037B>,<U03FD>);(<U037C>,<U03FE>);(<U037D>,<U03FF>);(<U03AC>,<U0386>);/ - (<U03AD>,<U0388>);(<U03AE>,<U0389>);(<U03AF>,<U038A>);(<U03B1>,<U0391>);/ - (<U03B2>,<U0392>);(<U03B3>,<U0393>);(<U03B4>,<U0394>);(<U03B5>,<U0395>);/ - (<U03B6>,<U0396>);(<U03B7>,<U0397>);(<U03B8>,<U0398>);(<U03B9>,<U0399>);/ - (<U03BA>,<U039A>);(<U03BB>,<U039B>);(<U03BC>,<U039C>);(<U03BD>,<U039D>);/ - (<U03BE>,<U039E>);(<U03BF>,<U039F>);(<U03C0>,<U03A0>);(<U03C1>,<U03A1>);/ - (<U03C2>,<U03A3>);(<U03C3>,<U03A3>);(<U03C4>,<U03A4>);(<U03C5>,<U03A5>);/ - (<U03C6>,<U03A6>);(<U03C7>,<U03A7>);(<U03C8>,<U03A8>);(<U03C9>,<U03A9>);/ - (<U03CA>,<U03AA>);(<U03CB>,<U03AB>);(<U03CC>,<U038C>);(<U03CD>,<U038E>);/ - (<U03CE>,<U038F>);(<U03D0>,<U0392>);(<U03D1>,<U0398>);(<U03D5>,<U03A6>);/ - (<U03D6>,<U03A0>);(<U03D7>,<U03CF>);(<U03D9>,<U03D8>);(<U03DB>,<U03DA>);/ - (<U03DD>,<U03DC>);(<U03DF>,<U03DE>);(<U03E1>,<U03E0>);(<U03E3>,<U03E2>);/ - (<U03E5>,<U03E4>);(<U03E7>,<U03E6>);(<U03E9>,<U03E8>);(<U03EB>,<U03EA>);/ - (<U03ED>,<U03EC>);(<U03EF>,<U03EE>);(<U03F0>,<U039A>);(<U03F1>,<U03A1>);/ - (<U03F2>,<U03F9>);(<U03F3>,<U037F>);(<U03F5>,<U0395>);(<U03F8>,<U03F7>);/ - (<U03FB>,<U03FA>);(<U0430>,<U0410>);(<U0431>,<U0411>);(<U0432>,<U0412>);/ - (<U0433>,<U0413>);(<U0434>,<U0414>);(<U0435>,<U0415>);(<U0436>,<U0416>);/ - (<U0437>,<U0417>);(<U0438>,<U0418>);(<U0439>,<U0419>);(<U043A>,<U041A>);/ - (<U043B>,<U041B>);(<U043C>,<U041C>);(<U043D>,<U041D>);(<U043E>,<U041E>);/ - (<U043F>,<U041F>);(<U0440>,<U0420>);(<U0441>,<U0421>);(<U0442>,<U0422>);/ - (<U0443>,<U0423>);(<U0444>,<U0424>);(<U0445>,<U0425>);(<U0446>,<U0426>);/ - (<U0447>,<U0427>);(<U0448>,<U0428>);(<U0449>,<U0429>);(<U044A>,<U042A>);/ - (<U044B>,<U042B>);(<U044C>,<U042C>);(<U044D>,<U042D>);(<U044E>,<U042E>);/ - (<U044F>,<U042F>);(<U0450>,<U0400>);(<U0451>,<U0401>);(<U0452>,<U0402>);/ - (<U0453>,<U0403>);(<U0454>,<U0404>);(<U0455>,<U0405>);(<U0456>,<U0406>);/ - (<U0457>,<U0407>);(<U0458>,<U0408>);(<U0459>,<U0409>);(<U045A>,<U040A>);/ - (<U045B>,<U040B>);(<U045C>,<U040C>);(<U045D>,<U040D>);(<U045E>,<U040E>);/ - (<U045F>,<U040F>);(<U0461>,<U0460>);(<U0463>,<U0462>);(<U0465>,<U0464>);/ - (<U0467>,<U0466>);(<U0469>,<U0468>);(<U046B>,<U046A>);(<U046D>,<U046C>);/ - (<U046F>,<U046E>);(<U0471>,<U0470>);(<U0473>,<U0472>);(<U0475>,<U0474>);/ - (<U0477>,<U0476>);(<U0479>,<U0478>);(<U047B>,<U047A>);(<U047D>,<U047C>);/ - (<U047F>,<U047E>);(<U0481>,<U0480>);(<U048B>,<U048A>);(<U048D>,<U048C>);/ - (<U048F>,<U048E>);(<U0491>,<U0490>);(<U0493>,<U0492>);(<U0495>,<U0494>);/ - (<U0497>,<U0496>);(<U0499>,<U0498>);(<U049B>,<U049A>);(<U049D>,<U049C>);/ - (<U049F>,<U049E>);(<U04A1>,<U04A0>);(<U04A3>,<U04A2>);(<U04A5>,<U04A4>);/ - (<U04A7>,<U04A6>);(<U04A9>,<U04A8>);(<U04AB>,<U04AA>);(<U04AD>,<U04AC>);/ - (<U04AF>,<U04AE>);(<U04B1>,<U04B0>);(<U04B3>,<U04B2>);(<U04B5>,<U04B4>);/ - (<U04B7>,<U04B6>);(<U04B9>,<U04B8>);(<U04BB>,<U04BA>);(<U04BD>,<U04BC>);/ - (<U04BF>,<U04BE>);(<U04C2>,<U04C1>);(<U04C4>,<U04C3>);(<U04C6>,<U04C5>);/ - (<U04C8>,<U04C7>);(<U04CA>,<U04C9>);(<U04CC>,<U04CB>);(<U04CE>,<U04CD>);/ - (<U04CF>,<U04C0>);(<U04D1>,<U04D0>);(<U04D3>,<U04D2>);(<U04D5>,<U04D4>);/ - (<U04D7>,<U04D6>);(<U04D9>,<U04D8>);(<U04DB>,<U04DA>);(<U04DD>,<U04DC>);/ - (<U04DF>,<U04DE>);(<U04E1>,<U04E0>);(<U04E3>,<U04E2>);(<U04E5>,<U04E4>);/ - (<U04E7>,<U04E6>);(<U04E9>,<U04E8>);(<U04EB>,<U04EA>);(<U04ED>,<U04EC>);/ - (<U04EF>,<U04EE>);(<U04F1>,<U04F0>);(<U04F3>,<U04F2>);(<U04F5>,<U04F4>);/ - (<U04F7>,<U04F6>);(<U04F9>,<U04F8>);(<U04FB>,<U04FA>);(<U04FD>,<U04FC>);/ - (<U04FF>,<U04FE>);(<U0501>,<U0500>);(<U0503>,<U0502>);(<U0505>,<U0504>);/ - (<U0507>,<U0506>);(<U0509>,<U0508>);(<U050B>,<U050A>);(<U050D>,<U050C>);/ - (<U050F>,<U050E>);(<U0511>,<U0510>);(<U0513>,<U0512>);(<U0515>,<U0514>);/ - (<U0517>,<U0516>);(<U0519>,<U0518>);(<U051B>,<U051A>);(<U051D>,<U051C>);/ - (<U051F>,<U051E>);(<U0521>,<U0520>);(<U0523>,<U0522>);(<U0525>,<U0524>);/ - (<U0527>,<U0526>);(<U0529>,<U0528>);(<U052B>,<U052A>);(<U052D>,<U052C>);/ - (<U052F>,<U052E>);(<U0561>,<U0531>);(<U0562>,<U0532>);(<U0563>,<U0533>);/ - (<U0564>,<U0534>);(<U0565>,<U0535>);(<U0566>,<U0536>);(<U0567>,<U0537>);/ - (<U0568>,<U0538>);(<U0569>,<U0539>);(<U056A>,<U053A>);(<U056B>,<U053B>);/ - (<U056C>,<U053C>);(<U056D>,<U053D>);(<U056E>,<U053E>);(<U056F>,<U053F>);/ - (<U0570>,<U0540>);(<U0571>,<U0541>);(<U0572>,<U0542>);(<U0573>,<U0543>);/ - (<U0574>,<U0544>);(<U0575>,<U0545>);(<U0576>,<U0546>);(<U0577>,<U0547>);/ - (<U0578>,<U0548>);(<U0579>,<U0549>);(<U057A>,<U054A>);(<U057B>,<U054B>);/ - (<U057C>,<U054C>);(<U057D>,<U054D>);(<U057E>,<U054E>);(<U057F>,<U054F>);/ - (<U0580>,<U0550>);(<U0581>,<U0551>);(<U0582>,<U0552>);(<U0583>,<U0553>);/ - (<U0584>,<U0554>);(<U0585>,<U0555>);(<U0586>,<U0556>);(<U13F8>,<U13F0>);/ - (<U13F9>,<U13F1>);(<U13FA>,<U13F2>);(<U13FB>,<U13F3>);(<U13FC>,<U13F4>);/ - (<U13FD>,<U13F5>);(<U1C80>,<U0412>);(<U1C81>,<U0414>);(<U1C82>,<U041E>);/ - (<U1C83>,<U0421>);(<U1C84>,<U0422>);(<U1C85>,<U0422>);(<U1C86>,<U042A>);/ - (<U1C87>,<U0462>);(<U1C88>,<UA64A>);(<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);/ - (<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);(<U1E03>,<U1E02>);(<U1E05>,<U1E04>);/ - (<U1E07>,<U1E06>);(<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);/ - (<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);(<U1E13>,<U1E12>);(<U1E15>,<U1E14>);/ - (<U1E17>,<U1E16>);(<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);/ - (<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);(<U1E23>,<U1E22>);(<U1E25>,<U1E24>);/ - (<U1E27>,<U1E26>);(<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);/ - (<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);(<U1E33>,<U1E32>);(<U1E35>,<U1E34>);/ - (<U1E37>,<U1E36>);(<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);/ - (<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);(<U1E43>,<U1E42>);(<U1E45>,<U1E44>);/ - (<U1E47>,<U1E46>);(<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);/ - (<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);(<U1E53>,<U1E52>);(<U1E55>,<U1E54>);/ - (<U1E57>,<U1E56>);(<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);/ - (<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);(<U1E63>,<U1E62>);(<U1E65>,<U1E64>);/ - (<U1E67>,<U1E66>);(<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);/ - (<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);(<U1E73>,<U1E72>);(<U1E75>,<U1E74>);/ - (<U1E77>,<U1E76>);(<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);/ - (<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);(<U1E83>,<U1E82>);(<U1E85>,<U1E84>);/ - (<U1E87>,<U1E86>);(<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);/ - (<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);(<U1E93>,<U1E92>);(<U1E95>,<U1E94>);/ - (<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);/ - (<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);/ - (<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);/ - (<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);/ - (<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);/ - (<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);/ - (<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);/ - (<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);/ - (<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);/ - (<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);/ - (<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);/ - (<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);/ - (<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);(<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);/ - (<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);/ - (<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);(<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);/ - (<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);/ - (<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);/ - (<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);/ - (<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);/ - (<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);/ - (<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);/ - (<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);/ - (<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);(<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);/ - (<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);/ - (<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);/ - (<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);/ - (<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);/ - (<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);/ - (<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);/ - (<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);/ - (<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);/ - (<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);/ - (<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);/ - (<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);/ - (<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);/ - (<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);/ - (<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);(<U214E>,<U2132>);(<U2170>,<U2160>);/ - (<U2171>,<U2161>);(<U2172>,<U2162>);(<U2173>,<U2163>);(<U2174>,<U2164>);/ - (<U2175>,<U2165>);(<U2176>,<U2166>);(<U2177>,<U2167>);(<U2178>,<U2168>);/ - (<U2179>,<U2169>);(<U217A>,<U216A>);(<U217B>,<U216B>);(<U217C>,<U216C>);/ - (<U217D>,<U216D>);(<U217E>,<U216E>);(<U217F>,<U216F>);(<U2184>,<U2183>);/ - (<U24D0>,<U24B6>);(<U24D1>,<U24B7>);(<U24D2>,<U24B8>);(<U24D3>,<U24B9>);/ - (<U24D4>,<U24BA>);(<U24D5>,<U24BB>);(<U24D6>,<U24BC>);(<U24D7>,<U24BD>);/ - (<U24D8>,<U24BE>);(<U24D9>,<U24BF>);(<U24DA>,<U24C0>);(<U24DB>,<U24C1>);/ - (<U24DC>,<U24C2>);(<U24DD>,<U24C3>);(<U24DE>,<U24C4>);(<U24DF>,<U24C5>);/ - (<U24E0>,<U24C6>);(<U24E1>,<U24C7>);(<U24E2>,<U24C8>);(<U24E3>,<U24C9>);/ - (<U24E4>,<U24CA>);(<U24E5>,<U24CB>);(<U24E6>,<U24CC>);(<U24E7>,<U24CD>);/ - (<U24E8>,<U24CE>);(<U24E9>,<U24CF>);(<U2C30>,<U2C00>);(<U2C31>,<U2C01>);/ - (<U2C32>,<U2C02>);(<U2C33>,<U2C03>);(<U2C34>,<U2C04>);(<U2C35>,<U2C05>);/ - (<U2C36>,<U2C06>);(<U2C37>,<U2C07>);(<U2C38>,<U2C08>);(<U2C39>,<U2C09>);/ - (<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);/ - (<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);(<U2C41>,<U2C11>);/ - (<U2C42>,<U2C12>);(<U2C43>,<U2C13>);(<U2C44>,<U2C14>);(<U2C45>,<U2C15>);/ - (<U2C46>,<U2C16>);(<U2C47>,<U2C17>);(<U2C48>,<U2C18>);(<U2C49>,<U2C19>);/ - (<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);/ - (<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);(<U2C51>,<U2C21>);/ - (<U2C52>,<U2C22>);(<U2C53>,<U2C23>);(<U2C54>,<U2C24>);(<U2C55>,<U2C25>);/ - (<U2C56>,<U2C26>);(<U2C57>,<U2C27>);(<U2C58>,<U2C28>);(<U2C59>,<U2C29>);/ - (<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);/ - (<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);(<U2C65>,<U023A>);/ - (<U2C66>,<U023E>);(<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);/ - (<U2C73>,<U2C72>);(<U2C76>,<U2C75>);(<U2C81>,<U2C80>);(<U2C83>,<U2C82>);/ - (<U2C85>,<U2C84>);(<U2C87>,<U2C86>);(<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);/ - (<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);(<U2C93>,<U2C92>);/ - (<U2C95>,<U2C94>);(<U2C97>,<U2C96>);(<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);/ - (<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);/ - (<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);/ - (<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);/ - (<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);/ - (<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);/ - (<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);/ - (<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);/ - (<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);/ - (<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);/ - (<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);/ - (<U2D01>,<U10A1>);(<U2D02>,<U10A2>);(<U2D03>,<U10A3>);(<U2D04>,<U10A4>);/ - (<U2D05>,<U10A5>);(<U2D06>,<U10A6>);(<U2D07>,<U10A7>);(<U2D08>,<U10A8>);/ - (<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);/ - (<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);/ - (<U2D11>,<U10B1>);(<U2D12>,<U10B2>);(<U2D13>,<U10B3>);(<U2D14>,<U10B4>);/ - (<U2D15>,<U10B5>);(<U2D16>,<U10B6>);(<U2D17>,<U10B7>);(<U2D18>,<U10B8>);/ - (<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);/ - (<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);/ - (<U2D21>,<U10C1>);(<U2D22>,<U10C2>);(<U2D23>,<U10C3>);(<U2D24>,<U10C4>);/ - (<U2D25>,<U10C5>);(<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);(<UA641>,<UA640>);/ - (<UA643>,<UA642>);(<UA645>,<UA644>);(<UA647>,<UA646>);(<UA649>,<UA648>);/ - (<UA64B>,<UA64A>);(<UA64D>,<UA64C>);(<UA64F>,<UA64E>);(<UA651>,<UA650>);/ - (<UA653>,<UA652>);(<UA655>,<UA654>);(<UA657>,<UA656>);(<UA659>,<UA658>);/ - (<UA65B>,<UA65A>);(<UA65D>,<UA65C>);(<UA65F>,<UA65E>);(<UA661>,<UA660>);/ - (<UA663>,<UA662>);(<UA665>,<UA664>);(<UA667>,<UA666>);(<UA669>,<UA668>);/ - (<UA66B>,<UA66A>);(<UA66D>,<UA66C>);(<UA681>,<UA680>);(<UA683>,<UA682>);/ - (<UA685>,<UA684>);(<UA687>,<UA686>);(<UA689>,<UA688>);(<UA68B>,<UA68A>);/ - (<UA68D>,<UA68C>);(<UA68F>,<UA68E>);(<UA691>,<UA690>);(<UA693>,<UA692>);/ - (<UA695>,<UA694>);(<UA697>,<UA696>);(<UA699>,<UA698>);(<UA69B>,<UA69A>);/ - (<UA723>,<UA722>);(<UA725>,<UA724>);(<UA727>,<UA726>);(<UA729>,<UA728>);/ - (<UA72B>,<UA72A>);(<UA72D>,<UA72C>);(<UA72F>,<UA72E>);(<UA733>,<UA732>);/ - (<UA735>,<UA734>);(<UA737>,<UA736>);(<UA739>,<UA738>);(<UA73B>,<UA73A>);/ - (<UA73D>,<UA73C>);(<UA73F>,<UA73E>);(<UA741>,<UA740>);(<UA743>,<UA742>);/ - (<UA745>,<UA744>);(<UA747>,<UA746>);(<UA749>,<UA748>);(<UA74B>,<UA74A>);/ - (<UA74D>,<UA74C>);(<UA74F>,<UA74E>);(<UA751>,<UA750>);(<UA753>,<UA752>);/ - (<UA755>,<UA754>);(<UA757>,<UA756>);(<UA759>,<UA758>);(<UA75B>,<UA75A>);/ - (<UA75D>,<UA75C>);(<UA75F>,<UA75E>);(<UA761>,<UA760>);(<UA763>,<UA762>);/ - (<UA765>,<UA764>);(<UA767>,<UA766>);(<UA769>,<UA768>);(<UA76B>,<UA76A>);/ - (<UA76D>,<UA76C>);(<UA76F>,<UA76E>);(<UA77A>,<UA779>);(<UA77C>,<UA77B>);/ - (<UA77F>,<UA77E>);(<UA781>,<UA780>);(<UA783>,<UA782>);(<UA785>,<UA784>);/ - (<UA787>,<UA786>);(<UA78C>,<UA78B>);(<UA791>,<UA790>);(<UA793>,<UA792>);/ - (<UA794>,<UA7C4>);(<UA797>,<UA796>);(<UA799>,<UA798>);(<UA79B>,<UA79A>);/ - (<UA79D>,<UA79C>);(<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);/ - (<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);/ - (<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);/ - (<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);/ - (<UA7CA>,<UA7C9>);(<UA7D1>,<UA7D0>);(<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);/ - (<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);(<UAB71>,<U13A1>);/ - (<UAB72>,<U13A2>);(<UAB73>,<U13A3>);(<UAB74>,<U13A4>);(<UAB75>,<U13A5>);/ - (<UAB76>,<U13A6>);(<UAB77>,<U13A7>);(<UAB78>,<U13A8>);(<UAB79>,<U13A9>);/ - (<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);/ - (<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);(<UAB81>,<U13B1>);/ - (<UAB82>,<U13B2>);(<UAB83>,<U13B3>);(<UAB84>,<U13B4>);(<UAB85>,<U13B5>);/ - (<UAB86>,<U13B6>);(<UAB87>,<U13B7>);(<UAB88>,<U13B8>);(<UAB89>,<U13B9>);/ - (<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);/ - (<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);(<UAB91>,<U13C1>);/ - (<UAB92>,<U13C2>);(<UAB93>,<U13C3>);(<UAB94>,<U13C4>);(<UAB95>,<U13C5>);/ - (<UAB96>,<U13C6>);(<UAB97>,<U13C7>);(<UAB98>,<U13C8>);(<UAB99>,<U13C9>);/ - (<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);/ - (<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);(<UABA1>,<U13D1>);/ - (<UABA2>,<U13D2>);(<UABA3>,<U13D3>);(<UABA4>,<U13D4>);(<UABA5>,<U13D5>);/ - (<UABA6>,<U13D6>);(<UABA7>,<U13D7>);(<UABA8>,<U13D8>);(<UABA9>,<U13D9>);/ - (<UABAA>,<U13DA>);(<UABAB>,<U13DB>);(<UABAC>,<U13DC>);(<UABAD>,<U13DD>);/ - (<UABAE>,<U13DE>);(<UABAF>,<U13DF>);(<UABB0>,<U13E0>);(<UABB1>,<U13E1>);/ - (<UABB2>,<U13E2>);(<UABB3>,<U13E3>);(<UABB4>,<U13E4>);(<UABB5>,<U13E5>);/ - (<UABB6>,<U13E6>);(<UABB7>,<U13E7>);(<UABB8>,<U13E8>);(<UABB9>,<U13E9>);/ - (<UABBA>,<U13EA>);(<UABBB>,<U13EB>);(<UABBC>,<U13EC>);(<UABBD>,<U13ED>);/ - (<UABBE>,<U13EE>);(<UABBF>,<U13EF>);(<UFF41>,<UFF21>);(<UFF42>,<UFF22>);/ - (<UFF43>,<UFF23>);(<UFF44>,<UFF24>);(<UFF45>,<UFF25>);(<UFF46>,<UFF26>);/ - (<UFF47>,<UFF27>);(<UFF48>,<UFF28>);(<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);/ - (<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);/ - (<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);(<UFF51>,<UFF31>);(<UFF52>,<UFF32>);/ - (<UFF53>,<UFF33>);(<UFF54>,<UFF34>);(<UFF55>,<UFF35>);(<UFF56>,<UFF36>);/ - (<UFF57>,<UFF37>);(<UFF58>,<UFF38>);(<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);/ - (<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ + (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019B>,<UA7DC>);(<U019E>,<U0220>);/ + (<U01A1>,<U01A0>);(<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);/ + (<U01AD>,<U01AC>);(<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);/ + (<U01B9>,<U01B8>);(<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C4>,<U01C5>);/ + (<U01C6>,<U01C5>);(<U01C7>,<U01C8>);(<U01C9>,<U01C8>);(<U01CA>,<U01CB>);/ + (<U01CC>,<U01CB>);(<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);/ + (<U01D4>,<U01D3>);(<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);/ + (<U01DC>,<U01DB>);(<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);/ + (<U01E3>,<U01E2>);(<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);/ + (<U01EB>,<U01EA>);(<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F1>,<U01F2>);/ + (<U01F3>,<U01F2>);(<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);/ + (<U01FD>,<U01FC>);(<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);/ + (<U0205>,<U0204>);(<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);/ + (<U020D>,<U020C>);(<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);/ + (<U0215>,<U0214>);(<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);/ + (<U021D>,<U021C>);(<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);/ + (<U0227>,<U0226>);(<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);/ + (<U022F>,<U022E>);(<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);/ + (<U023F>,<U2C7E>);(<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);/ + (<U0249>,<U0248>);(<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);/ + (<U0250>,<U2C6F>);(<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);/ + (<U0254>,<U0186>);(<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);/ + (<U025B>,<U0190>);(<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);/ + (<U0263>,<U0194>);(<U0264>,<UA7CB>);(<U0265>,<UA78D>);(<U0266>,<UA7AA>);/ + (<U0268>,<U0197>);(<U0269>,<U0196>);(<U026A>,<UA7AE>);(<U026B>,<U2C62>);/ + (<U026C>,<UA7AD>);(<U026F>,<U019C>);(<U0271>,<U2C6E>);(<U0272>,<U019D>);/ + (<U0275>,<U019F>);(<U027D>,<U2C64>);(<U0280>,<U01A6>);(<U0282>,<UA7C5>);/ + (<U0283>,<U01A9>);(<U0287>,<UA7B1>);(<U0288>,<U01AE>);(<U0289>,<U0244>);/ + (<U028A>,<U01B1>);(<U028B>,<U01B2>);(<U028C>,<U0245>);(<U0292>,<U01B7>);/ + (<U029D>,<UA7B2>);(<U029E>,<UA7B0>);(<U0345>,<U0399>);(<U0371>,<U0370>);/ + (<U0373>,<U0372>);(<U0377>,<U0376>);(<U037B>,<U03FD>);(<U037C>,<U03FE>);/ + (<U037D>,<U03FF>);(<U03AC>,<U0386>);(<U03AD>,<U0388>);(<U03AE>,<U0389>);/ + (<U03AF>,<U038A>);(<U03B1>,<U0391>);(<U03B2>,<U0392>);(<U03B3>,<U0393>);/ + (<U03B4>,<U0394>);(<U03B5>,<U0395>);(<U03B6>,<U0396>);(<U03B7>,<U0397>);/ + (<U03B8>,<U0398>);(<U03B9>,<U0399>);(<U03BA>,<U039A>);(<U03BB>,<U039B>);/ + (<U03BC>,<U039C>);(<U03BD>,<U039D>);(<U03BE>,<U039E>);(<U03BF>,<U039F>);/ + (<U03C0>,<U03A0>);(<U03C1>,<U03A1>);(<U03C2>,<U03A3>);(<U03C3>,<U03A3>);/ + (<U03C4>,<U03A4>);(<U03C5>,<U03A5>);(<U03C6>,<U03A6>);(<U03C7>,<U03A7>);/ + (<U03C8>,<U03A8>);(<U03C9>,<U03A9>);(<U03CA>,<U03AA>);(<U03CB>,<U03AB>);/ + (<U03CC>,<U038C>);(<U03CD>,<U038E>);(<U03CE>,<U038F>);(<U03D0>,<U0392>);/ + (<U03D1>,<U0398>);(<U03D5>,<U03A6>);(<U03D6>,<U03A0>);(<U03D7>,<U03CF>);/ + (<U03D9>,<U03D8>);(<U03DB>,<U03DA>);(<U03DD>,<U03DC>);(<U03DF>,<U03DE>);/ + (<U03E1>,<U03E0>);(<U03E3>,<U03E2>);(<U03E5>,<U03E4>);(<U03E7>,<U03E6>);/ + (<U03E9>,<U03E8>);(<U03EB>,<U03EA>);(<U03ED>,<U03EC>);(<U03EF>,<U03EE>);/ + (<U03F0>,<U039A>);(<U03F1>,<U03A1>);(<U03F2>,<U03F9>);(<U03F3>,<U037F>);/ + (<U03F5>,<U0395>);(<U03F8>,<U03F7>);(<U03FB>,<U03FA>);(<U0430>,<U0410>);/ + (<U0431>,<U0411>);(<U0432>,<U0412>);(<U0433>,<U0413>);(<U0434>,<U0414>);/ + (<U0435>,<U0415>);(<U0436>,<U0416>);(<U0437>,<U0417>);(<U0438>,<U0418>);/ + (<U0439>,<U0419>);(<U043A>,<U041A>);(<U043B>,<U041B>);(<U043C>,<U041C>);/ + (<U043D>,<U041D>);(<U043E>,<U041E>);(<U043F>,<U041F>);(<U0440>,<U0420>);/ + (<U0441>,<U0421>);(<U0442>,<U0422>);(<U0443>,<U0423>);(<U0444>,<U0424>);/ + (<U0445>,<U0425>);(<U0446>,<U0426>);(<U0447>,<U0427>);(<U0448>,<U0428>);/ + (<U0449>,<U0429>);(<U044A>,<U042A>);(<U044B>,<U042B>);(<U044C>,<U042C>);/ + (<U044D>,<U042D>);(<U044E>,<U042E>);(<U044F>,<U042F>);(<U0450>,<U0400>);/ + (<U0451>,<U0401>);(<U0452>,<U0402>);(<U0453>,<U0403>);(<U0454>,<U0404>);/ + (<U0455>,<U0405>);(<U0456>,<U0406>);(<U0457>,<U0407>);(<U0458>,<U0408>);/ + (<U0459>,<U0409>);(<U045A>,<U040A>);(<U045B>,<U040B>);(<U045C>,<U040C>);/ + (<U045D>,<U040D>);(<U045E>,<U040E>);(<U045F>,<U040F>);(<U0461>,<U0460>);/ + (<U0463>,<U0462>);(<U0465>,<U0464>);(<U0467>,<U0466>);(<U0469>,<U0468>);/ + (<U046B>,<U046A>);(<U046D>,<U046C>);(<U046F>,<U046E>);(<U0471>,<U0470>);/ + (<U0473>,<U0472>);(<U0475>,<U0474>);(<U0477>,<U0476>);(<U0479>,<U0478>);/ + (<U047B>,<U047A>);(<U047D>,<U047C>);(<U047F>,<U047E>);(<U0481>,<U0480>);/ + (<U048B>,<U048A>);(<U048D>,<U048C>);(<U048F>,<U048E>);(<U0491>,<U0490>);/ + (<U0493>,<U0492>);(<U0495>,<U0494>);(<U0497>,<U0496>);(<U0499>,<U0498>);/ + (<U049B>,<U049A>);(<U049D>,<U049C>);(<U049F>,<U049E>);(<U04A1>,<U04A0>);/ + (<U04A3>,<U04A2>);(<U04A5>,<U04A4>);(<U04A7>,<U04A6>);(<U04A9>,<U04A8>);/ + (<U04AB>,<U04AA>);(<U04AD>,<U04AC>);(<U04AF>,<U04AE>);(<U04B1>,<U04B0>);/ + (<U04B3>,<U04B2>);(<U04B5>,<U04B4>);(<U04B7>,<U04B6>);(<U04B9>,<U04B8>);/ + (<U04BB>,<U04BA>);(<U04BD>,<U04BC>);(<U04BF>,<U04BE>);(<U04C2>,<U04C1>);/ + (<U04C4>,<U04C3>);(<U04C6>,<U04C5>);(<U04C8>,<U04C7>);(<U04CA>,<U04C9>);/ + (<U04CC>,<U04CB>);(<U04CE>,<U04CD>);(<U04CF>,<U04C0>);(<U04D1>,<U04D0>);/ + (<U04D3>,<U04D2>);(<U04D5>,<U04D4>);(<U04D7>,<U04D6>);(<U04D9>,<U04D8>);/ + (<U04DB>,<U04DA>);(<U04DD>,<U04DC>);(<U04DF>,<U04DE>);(<U04E1>,<U04E0>);/ + (<U04E3>,<U04E2>);(<U04E5>,<U04E4>);(<U04E7>,<U04E6>);(<U04E9>,<U04E8>);/ + (<U04EB>,<U04EA>);(<U04ED>,<U04EC>);(<U04EF>,<U04EE>);(<U04F1>,<U04F0>);/ + (<U04F3>,<U04F2>);(<U04F5>,<U04F4>);(<U04F7>,<U04F6>);(<U04F9>,<U04F8>);/ + (<U04FB>,<U04FA>);(<U04FD>,<U04FC>);(<U04FF>,<U04FE>);(<U0501>,<U0500>);/ + (<U0503>,<U0502>);(<U0505>,<U0504>);(<U0507>,<U0506>);(<U0509>,<U0508>);/ + (<U050B>,<U050A>);(<U050D>,<U050C>);(<U050F>,<U050E>);(<U0511>,<U0510>);/ + (<U0513>,<U0512>);(<U0515>,<U0514>);(<U0517>,<U0516>);(<U0519>,<U0518>);/ + (<U051B>,<U051A>);(<U051D>,<U051C>);(<U051F>,<U051E>);(<U0521>,<U0520>);/ + (<U0523>,<U0522>);(<U0525>,<U0524>);(<U0527>,<U0526>);(<U0529>,<U0528>);/ + (<U052B>,<U052A>);(<U052D>,<U052C>);(<U052F>,<U052E>);(<U0561>,<U0531>);/ + (<U0562>,<U0532>);(<U0563>,<U0533>);(<U0564>,<U0534>);(<U0565>,<U0535>);/ + (<U0566>,<U0536>);(<U0567>,<U0537>);(<U0568>,<U0538>);(<U0569>,<U0539>);/ + (<U056A>,<U053A>);(<U056B>,<U053B>);(<U056C>,<U053C>);(<U056D>,<U053D>);/ + (<U056E>,<U053E>);(<U056F>,<U053F>);(<U0570>,<U0540>);(<U0571>,<U0541>);/ + (<U0572>,<U0542>);(<U0573>,<U0543>);(<U0574>,<U0544>);(<U0575>,<U0545>);/ + (<U0576>,<U0546>);(<U0577>,<U0547>);(<U0578>,<U0548>);(<U0579>,<U0549>);/ + (<U057A>,<U054A>);(<U057B>,<U054B>);(<U057C>,<U054C>);(<U057D>,<U054D>);/ + (<U057E>,<U054E>);(<U057F>,<U054F>);(<U0580>,<U0550>);(<U0581>,<U0551>);/ + (<U0582>,<U0552>);(<U0583>,<U0553>);(<U0584>,<U0554>);(<U0585>,<U0555>);/ + (<U0586>,<U0556>);(<U13F8>,<U13F0>);(<U13F9>,<U13F1>);(<U13FA>,<U13F2>);/ + (<U13FB>,<U13F3>);(<U13FC>,<U13F4>);(<U13FD>,<U13F5>);(<U1C80>,<U0412>);/ + (<U1C81>,<U0414>);(<U1C82>,<U041E>);(<U1C83>,<U0421>);(<U1C84>,<U0422>);/ + (<U1C85>,<U0422>);(<U1C86>,<U042A>);(<U1C87>,<U0462>);(<U1C88>,<UA64A>);/ + (<U1C8A>,<U1C89>);(<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);/ + (<U1E01>,<U1E00>);(<U1E03>,<U1E02>);(<U1E05>,<U1E04>);(<U1E07>,<U1E06>);/ + (<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);/ + (<U1E11>,<U1E10>);(<U1E13>,<U1E12>);(<U1E15>,<U1E14>);(<U1E17>,<U1E16>);/ + (<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);/ + (<U1E21>,<U1E20>);(<U1E23>,<U1E22>);(<U1E25>,<U1E24>);(<U1E27>,<U1E26>);/ + (<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);/ + (<U1E31>,<U1E30>);(<U1E33>,<U1E32>);(<U1E35>,<U1E34>);(<U1E37>,<U1E36>);/ + (<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);/ + (<U1E41>,<U1E40>);(<U1E43>,<U1E42>);(<U1E45>,<U1E44>);(<U1E47>,<U1E46>);/ + (<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);/ + (<U1E51>,<U1E50>);(<U1E53>,<U1E52>);(<U1E55>,<U1E54>);(<U1E57>,<U1E56>);/ + (<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);/ + (<U1E61>,<U1E60>);(<U1E63>,<U1E62>);(<U1E65>,<U1E64>);(<U1E67>,<U1E66>);/ + (<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);/ + (<U1E71>,<U1E70>);(<U1E73>,<U1E72>);(<U1E75>,<U1E74>);(<U1E77>,<U1E76>);/ + (<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);/ + (<U1E81>,<U1E80>);(<U1E83>,<U1E82>);(<U1E85>,<U1E84>);(<U1E87>,<U1E86>);/ + (<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);/ + (<U1E91>,<U1E90>);(<U1E93>,<U1E92>);(<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);/ + (<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);/ + (<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);/ + (<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);/ + (<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);/ + (<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);/ + (<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);/ + (<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);/ + (<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);/ + (<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);/ + (<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);/ + (<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);/ + (<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);/ + (<U1F00>,<U1F08>);(<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);/ + (<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);/ + (<U1F10>,<U1F18>);(<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);/ + (<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);(<U1F21>,<U1F29>);/ + (<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);/ + (<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);(<U1F31>,<U1F39>);/ + (<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);/ + (<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);(<U1F41>,<U1F49>);/ + (<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);/ + (<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);/ + (<U1F60>,<U1F68>);(<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);/ + (<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);/ + (<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);/ + (<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);/ + (<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);/ + (<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);(<U1F81>,<U1F89>);/ + (<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);/ + (<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);(<U1F91>,<U1F99>);/ + (<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);/ + (<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);/ + (<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);/ + (<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);/ + (<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);/ + (<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);/ + (<U1FF3>,<U1FFC>);(<U214E>,<U2132>);(<U2170>,<U2160>);(<U2171>,<U2161>);/ + (<U2172>,<U2162>);(<U2173>,<U2163>);(<U2174>,<U2164>);(<U2175>,<U2165>);/ + (<U2176>,<U2166>);(<U2177>,<U2167>);(<U2178>,<U2168>);(<U2179>,<U2169>);/ + (<U217A>,<U216A>);(<U217B>,<U216B>);(<U217C>,<U216C>);(<U217D>,<U216D>);/ + (<U217E>,<U216E>);(<U217F>,<U216F>);(<U2184>,<U2183>);(<U24D0>,<U24B6>);/ + (<U24D1>,<U24B7>);(<U24D2>,<U24B8>);(<U24D3>,<U24B9>);(<U24D4>,<U24BA>);/ + (<U24D5>,<U24BB>);(<U24D6>,<U24BC>);(<U24D7>,<U24BD>);(<U24D8>,<U24BE>);/ + (<U24D9>,<U24BF>);(<U24DA>,<U24C0>);(<U24DB>,<U24C1>);(<U24DC>,<U24C2>);/ + (<U24DD>,<U24C3>);(<U24DE>,<U24C4>);(<U24DF>,<U24C5>);(<U24E0>,<U24C6>);/ + (<U24E1>,<U24C7>);(<U24E2>,<U24C8>);(<U24E3>,<U24C9>);(<U24E4>,<U24CA>);/ + (<U24E5>,<U24CB>);(<U24E6>,<U24CC>);(<U24E7>,<U24CD>);(<U24E8>,<U24CE>);/ + (<U24E9>,<U24CF>);(<U2C30>,<U2C00>);(<U2C31>,<U2C01>);(<U2C32>,<U2C02>);/ + (<U2C33>,<U2C03>);(<U2C34>,<U2C04>);(<U2C35>,<U2C05>);(<U2C36>,<U2C06>);/ + (<U2C37>,<U2C07>);(<U2C38>,<U2C08>);(<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);/ + (<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);/ + (<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);(<U2C41>,<U2C11>);(<U2C42>,<U2C12>);/ + (<U2C43>,<U2C13>);(<U2C44>,<U2C14>);(<U2C45>,<U2C15>);(<U2C46>,<U2C16>);/ + (<U2C47>,<U2C17>);(<U2C48>,<U2C18>);(<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);/ + (<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);/ + (<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);(<U2C51>,<U2C21>);(<U2C52>,<U2C22>);/ + (<U2C53>,<U2C23>);(<U2C54>,<U2C24>);(<U2C55>,<U2C25>);(<U2C56>,<U2C26>);/ + (<U2C57>,<U2C27>);(<U2C58>,<U2C28>);(<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);/ + (<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);/ + (<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);(<U2C65>,<U023A>);(<U2C66>,<U023E>);/ + (<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);/ + (<U2C76>,<U2C75>);(<U2C81>,<U2C80>);(<U2C83>,<U2C82>);(<U2C85>,<U2C84>);/ + (<U2C87>,<U2C86>);(<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);/ + (<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);(<U2C93>,<U2C92>);(<U2C95>,<U2C94>);/ + (<U2C97>,<U2C96>);(<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);/ + (<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);/ + (<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);/ + (<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);/ + (<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);/ + (<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);/ + (<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);/ + (<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);/ + (<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);/ + (<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);/ + (<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);(<U2D01>,<U10A1>);/ + (<U2D02>,<U10A2>);(<U2D03>,<U10A3>);(<U2D04>,<U10A4>);(<U2D05>,<U10A5>);/ + (<U2D06>,<U10A6>);(<U2D07>,<U10A7>);(<U2D08>,<U10A8>);(<U2D09>,<U10A9>);/ + (<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);/ + (<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);(<U2D11>,<U10B1>);/ + (<U2D12>,<U10B2>);(<U2D13>,<U10B3>);(<U2D14>,<U10B4>);(<U2D15>,<U10B5>);/ + (<U2D16>,<U10B6>);(<U2D17>,<U10B7>);(<U2D18>,<U10B8>);(<U2D19>,<U10B9>);/ + (<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);/ + (<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);(<U2D21>,<U10C1>);/ + (<U2D22>,<U10C2>);(<U2D23>,<U10C3>);(<U2D24>,<U10C4>);(<U2D25>,<U10C5>);/ + (<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);(<UA641>,<UA640>);(<UA643>,<UA642>);/ + (<UA645>,<UA644>);(<UA647>,<UA646>);(<UA649>,<UA648>);(<UA64B>,<UA64A>);/ + (<UA64D>,<UA64C>);(<UA64F>,<UA64E>);(<UA651>,<UA650>);(<UA653>,<UA652>);/ + (<UA655>,<UA654>);(<UA657>,<UA656>);(<UA659>,<UA658>);(<UA65B>,<UA65A>);/ + (<UA65D>,<UA65C>);(<UA65F>,<UA65E>);(<UA661>,<UA660>);(<UA663>,<UA662>);/ + (<UA665>,<UA664>);(<UA667>,<UA666>);(<UA669>,<UA668>);(<UA66B>,<UA66A>);/ + (<UA66D>,<UA66C>);(<UA681>,<UA680>);(<UA683>,<UA682>);(<UA685>,<UA684>);/ + (<UA687>,<UA686>);(<UA689>,<UA688>);(<UA68B>,<UA68A>);(<UA68D>,<UA68C>);/ + (<UA68F>,<UA68E>);(<UA691>,<UA690>);(<UA693>,<UA692>);(<UA695>,<UA694>);/ + (<UA697>,<UA696>);(<UA699>,<UA698>);(<UA69B>,<UA69A>);(<UA723>,<UA722>);/ + (<UA725>,<UA724>);(<UA727>,<UA726>);(<UA729>,<UA728>);(<UA72B>,<UA72A>);/ + (<UA72D>,<UA72C>);(<UA72F>,<UA72E>);(<UA733>,<UA732>);(<UA735>,<UA734>);/ + (<UA737>,<UA736>);(<UA739>,<UA738>);(<UA73B>,<UA73A>);(<UA73D>,<UA73C>);/ + (<UA73F>,<UA73E>);(<UA741>,<UA740>);(<UA743>,<UA742>);(<UA745>,<UA744>);/ + (<UA747>,<UA746>);(<UA749>,<UA748>);(<UA74B>,<UA74A>);(<UA74D>,<UA74C>);/ + (<UA74F>,<UA74E>);(<UA751>,<UA750>);(<UA753>,<UA752>);(<UA755>,<UA754>);/ + (<UA757>,<UA756>);(<UA759>,<UA758>);(<UA75B>,<UA75A>);(<UA75D>,<UA75C>);/ + (<UA75F>,<UA75E>);(<UA761>,<UA760>);(<UA763>,<UA762>);(<UA765>,<UA764>);/ + (<UA767>,<UA766>);(<UA769>,<UA768>);(<UA76B>,<UA76A>);(<UA76D>,<UA76C>);/ + (<UA76F>,<UA76E>);(<UA77A>,<UA779>);(<UA77C>,<UA77B>);(<UA77F>,<UA77E>);/ + (<UA781>,<UA780>);(<UA783>,<UA782>);(<UA785>,<UA784>);(<UA787>,<UA786>);/ + (<UA78C>,<UA78B>);(<UA791>,<UA790>);(<UA793>,<UA792>);(<UA794>,<UA7C4>);/ + (<UA797>,<UA796>);(<UA799>,<UA798>);(<UA79B>,<UA79A>);(<UA79D>,<UA79C>);/ + (<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);/ + (<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);/ + (<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);/ + (<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);/ + (<UA7CD>,<UA7CC>);(<UA7D1>,<UA7D0>);(<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);/ + (<UA7DB>,<UA7DA>);(<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);/ + (<UAB71>,<U13A1>);(<UAB72>,<U13A2>);(<UAB73>,<U13A3>);(<UAB74>,<U13A4>);/ + (<UAB75>,<U13A5>);(<UAB76>,<U13A6>);(<UAB77>,<U13A7>);(<UAB78>,<U13A8>);/ + (<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);/ + (<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);/ + (<UAB81>,<U13B1>);(<UAB82>,<U13B2>);(<UAB83>,<U13B3>);(<UAB84>,<U13B4>);/ + (<UAB85>,<U13B5>);(<UAB86>,<U13B6>);(<UAB87>,<U13B7>);(<UAB88>,<U13B8>);/ + (<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);/ + (<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);/ + (<UAB91>,<U13C1>);(<UAB92>,<U13C2>);(<UAB93>,<U13C3>);(<UAB94>,<U13C4>);/ + (<UAB95>,<U13C5>);(<UAB96>,<U13C6>);(<UAB97>,<U13C7>);(<UAB98>,<U13C8>);/ + (<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);/ + (<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);/ + (<UABA1>,<U13D1>);(<UABA2>,<U13D2>);(<UABA3>,<U13D3>);(<UABA4>,<U13D4>);/ + (<UABA5>,<U13D5>);(<UABA6>,<U13D6>);(<UABA7>,<U13D7>);(<UABA8>,<U13D8>);/ + (<UABA9>,<U13D9>);(<UABAA>,<U13DA>);(<UABAB>,<U13DB>);(<UABAC>,<U13DC>);/ + (<UABAD>,<U13DD>);(<UABAE>,<U13DE>);(<UABAF>,<U13DF>);(<UABB0>,<U13E0>);/ + (<UABB1>,<U13E1>);(<UABB2>,<U13E2>);(<UABB3>,<U13E3>);(<UABB4>,<U13E4>);/ + (<UABB5>,<U13E5>);(<UABB6>,<U13E6>);(<UABB7>,<U13E7>);(<UABB8>,<U13E8>);/ + (<UABB9>,<U13E9>);(<UABBA>,<U13EA>);(<UABBB>,<U13EB>);(<UABBC>,<U13EC>);/ + (<UABBD>,<U13ED>);(<UABBE>,<U13EE>);(<UABBF>,<U13EF>);(<UFF41>,<UFF21>);/ + (<UFF42>,<UFF22>);(<UFF43>,<UFF23>);(<UFF44>,<UFF24>);(<UFF45>,<UFF25>);/ + (<UFF46>,<UFF26>);(<UFF47>,<UFF27>);(<UFF48>,<UFF28>);(<UFF49>,<UFF29>);/ + (<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);/ + (<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);(<UFF51>,<UFF31>);/ + (<UFF52>,<UFF32>);(<UFF53>,<UFF33>);(<UFF54>,<UFF34>);(<UFF55>,<UFF35>);/ + (<UFF56>,<UFF36>);(<UFF57>,<UFF37>);(<UFF58>,<UFF38>);(<UFF59>,<UFF39>);/ + (<UFF5A>,<UFF3A>);(<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ (<U0001042A>,<U00010402>);(<U0001042B>,<U00010403>);/ (<U0001042C>,<U00010404>);(<U0001042D>,<U00010405>);/ (<U0001042E>,<U00010406>);(<U0001042F>,<U00010407>);/ @@ -2400,6 +2469,17 @@ map "totitle"; / (<U00010CED>,<U00010CAD>);(<U00010CEE>,<U00010CAE>);/ (<U00010CEF>,<U00010CAF>);(<U00010CF0>,<U00010CB0>);/ (<U00010CF1>,<U00010CB1>);(<U00010CF2>,<U00010CB2>);/ + (<U00010D70>,<U00010D50>);(<U00010D71>,<U00010D51>);/ + (<U00010D72>,<U00010D52>);(<U00010D73>,<U00010D53>);/ + (<U00010D74>,<U00010D54>);(<U00010D75>,<U00010D55>);/ + (<U00010D76>,<U00010D56>);(<U00010D77>,<U00010D57>);/ + (<U00010D78>,<U00010D58>);(<U00010D79>,<U00010D59>);/ + (<U00010D7A>,<U00010D5A>);(<U00010D7B>,<U00010D5B>);/ + (<U00010D7C>,<U00010D5C>);(<U00010D7D>,<U00010D5D>);/ + (<U00010D7E>,<U00010D5E>);(<U00010D7F>,<U00010D5F>);/ + (<U00010D80>,<U00010D60>);(<U00010D81>,<U00010D61>);/ + (<U00010D82>,<U00010D62>);(<U00010D83>,<U00010D63>);/ + (<U00010D84>,<U00010D64>);(<U00010D85>,<U00010D65>);/ (<U000118C0>,<U000118A0>);(<U000118C1>,<U000118A1>);/ (<U000118C2>,<U000118A2>);(<U000118C3>,<U000118A3>);/ (<U000118C4>,<U000118A4>);(<U000118C5>,<U000118A5>);/ @@ -2459,7 +2539,7 @@ class "combining"; / <U06E7>..<U06E8>;<U06EA>..<U06ED>;<U0711>;<U0730>..<U074A>;/ <U07A6>..<U07B0>;<U07EB>..<U07F3>;<U07FD>;<U0816>..<U0819>;/ <U081B>..<U0823>;<U0825>..<U0827>;<U0829>..<U082D>;<U0859>..<U085B>;/ - <U0898>..<U089F>;<U08CA>..<U08E1>;<U08E3>..<U0903>;<U093A>..<U093C>;/ + <U0897>..<U089F>;<U08CA>..<U08E1>;<U08E3>..<U0903>;<U093A>..<U093C>;/ <U093E>..<U094F>;<U0951>..<U0957>;<U0962>..<U0963>;<U0981>..<U0983>;/ <U09BC>;<U09BE>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CD>;<U09D7>;/ <U09E2>..<U09E3>;<U09FE>;<U0A01>..<U0A03>;<U0A3C>;<U0A3E>..<U0A42>;/ @@ -2501,21 +2581,24 @@ class "combining"; / <U00010376>..<U0001037A>;<U00010A01>..<U00010A03>;/ <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A0F>;/ <U00010A38>..<U00010A3A>;<U00010A3F>;<U00010AE5>..<U00010AE6>;/ - <U00010D24>..<U00010D27>;<U00010EAB>..<U00010EAC>;/ - <U00010EFD>..<U00010EFF>;<U00010F46>..<U00010F50>;/ - <U00010F82>..<U00010F85>;<U00011000>..<U00011002>;/ - <U00011038>..<U00011046>;<U00011070>;<U00011073>..<U00011074>;/ - <U0001107F>..<U00011082>;<U000110B0>..<U000110BA>;<U000110C2>;/ - <U00011100>..<U00011102>;<U00011127>..<U00011134>;/ - <U00011145>..<U00011146>;<U00011173>;<U00011180>..<U00011182>;/ - <U000111B3>..<U000111C0>;<U000111C9>..<U000111CC>;/ - <U000111CE>..<U000111CF>;<U0001122C>..<U00011237>;<U0001123E>;/ - <U00011241>;<U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ + <U00010D24>..<U00010D27>;<U00010D69>..<U00010D6D>;/ + <U00010EAB>..<U00010EAC>;<U00010EFC>..<U00010EFF>;/ + <U00010F46>..<U00010F50>;<U00010F82>..<U00010F85>;/ + <U00011000>..<U00011002>;<U00011038>..<U00011046>;<U00011070>;/ + <U00011073>..<U00011074>;<U0001107F>..<U00011082>;/ + <U000110B0>..<U000110BA>;<U000110C2>;<U00011100>..<U00011102>;/ + <U00011127>..<U00011134>;<U00011145>..<U00011146>;<U00011173>;/ + <U00011180>..<U00011182>;<U000111B3>..<U000111C0>;/ + <U000111C9>..<U000111CC>;<U000111CE>..<U000111CF>;/ + <U0001122C>..<U00011237>;<U0001123E>;<U00011241>;/ + <U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ <U0001133B>..<U0001133C>;<U0001133E>..<U00011344>;/ <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011357>;/ <U00011362>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011435>..<U00011446>;<U0001145E>;/ - <U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ + <U00011370>..<U00011374>;<U000113B8>..<U000113C0>;<U000113C2>;/ + <U000113C5>;<U000113C7>..<U000113CA>;<U000113CC>..<U000113D0>;/ + <U000113D2>;<U000113E1>..<U000113E2>;<U00011435>..<U00011446>;/ + <U0001145E>;<U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ <U000115B8>..<U000115C0>;<U000115DC>..<U000115DD>;/ <U00011630>..<U00011640>;<U000116AB>..<U000116B7>;/ <U0001171D>..<U0001172B>;<U0001182C>..<U0001183A>;/ @@ -2531,7 +2614,8 @@ class "combining"; / <U00011D8A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ <U00011D93>..<U00011D97>;<U00011EF3>..<U00011EF6>;/ <U00011F00>..<U00011F01>;<U00011F03>;<U00011F34>..<U00011F3A>;/ - <U00011F3E>..<U00011F42>;<U00013440>;<U00013447>..<U00013455>;/ + <U00011F3E>..<U00011F42>;<U00011F5A>;<U00013440>;/ + <U00013447>..<U00013455>;<U0001611E>..<U0001612F>;/ <U00016AF0>..<U00016AF4>;<U00016B30>..<U00016B36>;<U00016F4F>;/ <U00016F51>..<U00016F87>;<U00016F8F>..<U00016F92>;<U00016FE4>;/ <U00016FF0>..<U00016FF1>;<U0001BC9D>..<U0001BC9E>;/ @@ -2545,8 +2629,8 @@ class "combining"; / <U0001E01B>..<U0001E021>;<U0001E023>..<U0001E024>;/ <U0001E026>..<U0001E02A>;<U0001E08F>;<U0001E130>..<U0001E136>;/ <U0001E2AE>;<U0001E2EC>..<U0001E2EF>;<U0001E4EC>..<U0001E4EF>;/ - <U0001E8D0>..<U0001E8D6>;<U0001E944>..<U0001E94A>;/ - <U000E0100>..<U000E01EF> + <U0001E5EE>..<U0001E5EF>;<U0001E8D0>..<U0001E8D6>;/ + <U0001E944>..<U0001E94A>;<U000E0100>..<U000E01EF> % The "combining_level3" class reflects ISO/IEC 10646-1 annex B.2 % That is, combining characters of level 3. @@ -2588,7 +2672,7 @@ class "combining_level3"; / <UAA4C>..<UAA4D>;<UAA7B>..<UAA7D>;<UAAEB>..<UAAEF>;<UAAF5>..<UAAF6>;/ <UABE3>..<UABEA>;<UABEC>..<UABED>;<UFB1E>;<UFE00>..<UFE0F>;/ <U00010A01>..<U00010A03>;<U00010A05>..<U00010A06>;<U00010A0C>;/ - <U00010A0E>;<U00010A39>;<U00010A3F>;<U00011000>..<U00011002>;/ + <U00010A0E>;<U00010A39>;<U00010A3F>;<U00010EFC>;<U00011000>..<U00011002>;/ <U00011038>..<U00011046>;<U00011070>;<U00011073>..<U00011074>;/ <U0001107F>..<U00011082>;<U000110B0>..<U000110BA>;<U000110C2>;/ <U00011127>..<U00011134>;<U00011145>..<U00011146>;<U00011173>;/ @@ -2598,7 +2682,9 @@ class "combining_level3"; / <U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ <U0001133B>..<U0001133C>;<U0001133E>..<U00011344>;/ <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011357>;/ - <U00011362>..<U00011363>;<U00011435>..<U00011446>;/ + <U00011362>..<U00011363>;<U000113B8>..<U000113C0>;<U000113C2>;/ + <U000113C5>;<U000113C7>..<U000113CA>;<U000113CC>..<U000113D0>;/ + <U000113D2>;<U000113E1>..<U000113E2>;<U00011435>..<U00011446>;/ <U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ <U000115B8>..<U000115C0>;<U000115DC>..<U000115DD>;/ <U00011630>..<U00011640>;<U000116AB>..<U000116B7>;/ @@ -2615,7 +2701,8 @@ class "combining_level3"; / <U00011D8A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ <U00011D93>..<U00011D97>;<U00011EF3>..<U00011EF6>;/ <U00011F00>..<U00011F01>;<U00011F03>;<U00011F34>..<U00011F3A>;/ - <U00011F3E>..<U00011F42>;<U00013440>;<U00013447>..<U00013455>;/ + <U00011F3E>..<U00011F42>;<U00011F5A>;<U00013440>;/ + <U00013447>..<U00013455>;<U0001611E>..<U0001612F>;/ <U00016AF0>..<U00016AF4>;<U00016F4F>;<U00016F51>..<U00016F87>;/ <U00016F8F>..<U00016F92>;<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U0001BC9D>..<U0001BC9E>;<U0001CF00>..<U0001CF2D>;/ diff --git a/localedata/locales/scn_IT b/localedata/locales/scn_IT index 227745c23f..bda21522ce 100644 --- a/localedata/locales/scn_IT +++ b/localedata/locales/scn_IT @@ -56,15 +56,11 @@ END LC_COLLATE LC_CTYPE copy "it_IT" -% These translit rules don’t work at the moment, -% see: https://sourceware.org/bugzilla/show_bug.cgi?id=31859 -% and: https://sourceware.org/pipermail/libc-alpha/2024-May/156769.html -% -%translit_start -%"ḌḌ" "DDH" -%"á¸á¸" "ddh" -%"Ḍá¸" "Ddh" -%translit_end +translit_start +"ḌḌ" "DDH" +"á¸á¸" "ddh" +"Ḍá¸" "Ddh" +translit_end END LC_CTYPE diff --git a/localedata/locales/tr_TR b/localedata/locales/tr_TR index 31387c7c4a..ba457b0514 100644 --- a/localedata/locales/tr_TR +++ b/localedata/locales/tr_TR @@ -43,7 +43,7 @@ fax "" language "Turkish" territory "Türkiye" revision "1.0" -date "2023-09-15" +date "2024-09-12" category "i18n:2012";LC_IDENTIFICATION category "i18n:2012";LC_CTYPE @@ -127,7 +127,7 @@ END LC_COLLATE LC_CTYPE % The following is the 14652 i18n fdcc-set LC_CTYPE category. -% It covers Unicode version 15.1.0. +% It covers Unicode version 16.0.0. % The character classes and mapping tables were automatically % generated using the gen_unicode_ctype.py program. @@ -169,21 +169,21 @@ upper / <U0508>;<U050A>;<U050C>;<U050E>;<U0510>;<U0512>;<U0514>;<U0516>;<U0518>;/ <U051A>;<U051C>;<U051E>;<U0520>;<U0522>;<U0524>;<U0526>;<U0528>;<U052A>;/ <U052C>;<U052E>;<U0531>..<U0556>;<U10A0>..<U10C5>;<U10C7>;<U10CD>;/ - <U13A0>..<U13F5>;<U1C90>..<U1CBA>;<U1CBD>..<U1CBF>;<U1E00>;<U1E02>;/ - <U1E04>;<U1E06>;<U1E08>;<U1E0A>;<U1E0C>;<U1E0E>;<U1E10>;<U1E12>;<U1E14>;/ - <U1E16>;<U1E18>;<U1E1A>;<U1E1C>;<U1E1E>;<U1E20>;<U1E22>;<U1E24>;<U1E26>;/ - <U1E28>;<U1E2A>;<U1E2C>;<U1E2E>;<U1E30>;<U1E32>;<U1E34>;<U1E36>;<U1E38>;/ - <U1E3A>;<U1E3C>;<U1E3E>;<U1E40>;<U1E42>;<U1E44>;<U1E46>;<U1E48>;<U1E4A>;/ - <U1E4C>;<U1E4E>;<U1E50>;<U1E52>;<U1E54>;<U1E56>;<U1E58>;<U1E5A>;<U1E5C>;/ - <U1E5E>;<U1E60>;<U1E62>;<U1E64>;<U1E66>;<U1E68>;<U1E6A>;<U1E6C>;<U1E6E>;/ - <U1E70>;<U1E72>;<U1E74>;<U1E76>;<U1E78>;<U1E7A>;<U1E7C>;<U1E7E>;<U1E80>;/ - <U1E82>;<U1E84>;<U1E86>;<U1E88>;<U1E8A>;<U1E8C>;<U1E8E>;<U1E90>;<U1E92>;/ - <U1E94>;<U1E9E>;<U1EA0>;<U1EA2>;<U1EA4>;<U1EA6>;<U1EA8>;<U1EAA>;<U1EAC>;/ - <U1EAE>;<U1EB0>;<U1EB2>;<U1EB4>;<U1EB6>;<U1EB8>;<U1EBA>;<U1EBC>;<U1EBE>;/ - <U1EC0>;<U1EC2>;<U1EC4>;<U1EC6>;<U1EC8>;<U1ECA>;<U1ECC>;<U1ECE>;<U1ED0>;/ - <U1ED2>;<U1ED4>;<U1ED6>;<U1ED8>;<U1EDA>;<U1EDC>;<U1EDE>;<U1EE0>;<U1EE2>;/ - <U1EE4>;<U1EE6>;<U1EE8>;<U1EEA>;<U1EEC>;<U1EEE>;<U1EF0>;<U1EF2>;<U1EF4>;/ - <U1EF6>;<U1EF8>;<U1EFA>;<U1EFC>;<U1EFE>;<U1F08>..<U1F0F>;/ + <U13A0>..<U13F5>;<U1C89>;<U1C90>..<U1CBA>;<U1CBD>..<U1CBF>;<U1E00>;/ + <U1E02>;<U1E04>;<U1E06>;<U1E08>;<U1E0A>;<U1E0C>;<U1E0E>;<U1E10>;<U1E12>;/ + <U1E14>;<U1E16>;<U1E18>;<U1E1A>;<U1E1C>;<U1E1E>;<U1E20>;<U1E22>;<U1E24>;/ + <U1E26>;<U1E28>;<U1E2A>;<U1E2C>;<U1E2E>;<U1E30>;<U1E32>;<U1E34>;<U1E36>;/ + <U1E38>;<U1E3A>;<U1E3C>;<U1E3E>;<U1E40>;<U1E42>;<U1E44>;<U1E46>;<U1E48>;/ + <U1E4A>;<U1E4C>;<U1E4E>;<U1E50>;<U1E52>;<U1E54>;<U1E56>;<U1E58>;<U1E5A>;/ + <U1E5C>;<U1E5E>;<U1E60>;<U1E62>;<U1E64>;<U1E66>;<U1E68>;<U1E6A>;<U1E6C>;/ + <U1E6E>;<U1E70>;<U1E72>;<U1E74>;<U1E76>;<U1E78>;<U1E7A>;<U1E7C>;<U1E7E>;/ + <U1E80>;<U1E82>;<U1E84>;<U1E86>;<U1E88>;<U1E8A>;<U1E8C>;<U1E8E>;<U1E90>;/ + <U1E92>;<U1E94>;<U1E9E>;<U1EA0>;<U1EA2>;<U1EA4>;<U1EA6>;<U1EA8>;<U1EAA>;/ + <U1EAC>;<U1EAE>;<U1EB0>;<U1EB2>;<U1EB4>;<U1EB6>;<U1EB8>;<U1EBA>;<U1EBC>;/ + <U1EBE>;<U1EC0>;<U1EC2>;<U1EC4>;<U1EC6>;<U1EC8>;<U1ECA>;<U1ECC>;<U1ECE>;/ + <U1ED0>;<U1ED2>;<U1ED4>;<U1ED6>;<U1ED8>;<U1EDA>;<U1EDC>;<U1EDE>;<U1EE0>;/ + <U1EE2>;<U1EE4>;<U1EE6>;<U1EE8>;<U1EEA>;<U1EEC>;<U1EEE>;<U1EF0>;<U1EF2>;/ + <U1EF4>;<U1EF6>;<U1EF8>;<U1EFA>;<U1EFC>;<U1EFE>;<U1F08>..<U1F0F>;/ <U1F18>..<U1F1D>;<U1F28>..<U1F2F>;<U1F38>..<U1F3F>;<U1F48>..<U1F4D>;/ <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>;<U1F68>..<U1F6F>;<U1F88>..<U1F8F>;/ <U1F98>..<U1F9F>;<U1FA8>..<U1FAF>;<U1FB8>..<U1FBC>;<U1FC8>..<U1FCC>;/ @@ -210,11 +210,12 @@ upper / <UA780>;<UA782>;<UA784>;<UA786>;<UA78B>;<UA78D>;<UA790>;<UA792>;<UA796>;/ <UA798>;<UA79A>;<UA79C>;<UA79E>;<UA7A0>;<UA7A2>;<UA7A4>;<UA7A6>;<UA7A8>;/ <UA7AA>..<UA7AE>;<UA7B0>..<UA7B4>;<UA7B6>;<UA7B8>;<UA7BA>;<UA7BC>;/ - <UA7BE>;<UA7C0>;<UA7C2>;<UA7C4>..<UA7C7>;<UA7C9>;<UA7D0>;<UA7D6>;<UA7D8>;/ - <UA7F5>;<UFF21>..<UFF3A>;<U00010400>..<U00010427>;/ - <U000104B0>..<U000104D3>;<U00010570>..<U0001057A>;/ - <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ - <U00010594>..<U00010595>;<U00010C80>..<U00010CB2>;/ + <UA7BE>;<UA7C0>;<UA7C2>;<UA7C4>..<UA7C7>;<UA7C9>;<UA7CB>..<UA7CC>;/ + <UA7D0>;<UA7D6>;<UA7D8>;<UA7DA>;<UA7DC>;<UA7F5>;<UFF21>..<UFF3A>;/ + <U00010400>..<U00010427>;<U000104B0>..<U000104D3>;/ + <U00010570>..<U0001057A>;<U0001057C>..<U0001058A>;/ + <U0001058C>..<U00010592>;<U00010594>..<U00010595>;/ + <U00010C80>..<U00010CB2>;<U00010D50>..<U00010D65>;/ <U000118A0>..<U000118BF>;<U00016E40>..<U00016E5F>;/ <U0001D400>..<U0001D419>;<U0001D434>..<U0001D44D>;/ <U0001D468>..<U0001D481>;<U0001D49C>;<U0001D49E>..<U0001D49F>;/ @@ -271,57 +272,58 @@ lower / <U0507>;<U0509>;<U050B>;<U050D>;<U050F>;<U0511>;<U0513>;<U0515>;<U0517>;/ <U0519>;<U051B>;<U051D>;<U051F>;<U0521>;<U0523>;<U0525>;<U0527>;<U0529>;/ <U052B>;<U052D>;<U052F>;<U0560>..<U0588>;<U10D0>..<U10FA>;/ - <U10FC>..<U10FF>;<U13F8>..<U13FD>;<U1C80>..<U1C88>;<U1D00>..<U1DBF>;/ - <U1E01>;<U1E03>;<U1E05>;<U1E07>;<U1E09>;<U1E0B>;<U1E0D>;<U1E0F>;<U1E11>;/ - <U1E13>;<U1E15>;<U1E17>;<U1E19>;<U1E1B>;<U1E1D>;<U1E1F>;<U1E21>;<U1E23>;/ - <U1E25>;<U1E27>;<U1E29>;<U1E2B>;<U1E2D>;<U1E2F>;<U1E31>;<U1E33>;<U1E35>;/ - <U1E37>;<U1E39>;<U1E3B>;<U1E3D>;<U1E3F>;<U1E41>;<U1E43>;<U1E45>;<U1E47>;/ - <U1E49>;<U1E4B>;<U1E4D>;<U1E4F>;<U1E51>;<U1E53>;<U1E55>;<U1E57>;<U1E59>;/ - <U1E5B>;<U1E5D>;<U1E5F>;<U1E61>;<U1E63>;<U1E65>;<U1E67>;<U1E69>;<U1E6B>;/ - <U1E6D>;<U1E6F>;<U1E71>;<U1E73>;<U1E75>;<U1E77>;<U1E79>;<U1E7B>;<U1E7D>;/ - <U1E7F>;<U1E81>;<U1E83>;<U1E85>;<U1E87>;<U1E89>;<U1E8B>;<U1E8D>;<U1E8F>;/ - <U1E91>;<U1E93>;<U1E95>..<U1E9D>;<U1E9F>;<U1EA1>;<U1EA3>;<U1EA5>;<U1EA7>;/ - <U1EA9>;<U1EAB>;<U1EAD>;<U1EAF>;<U1EB1>;<U1EB3>;<U1EB5>;<U1EB7>;<U1EB9>;/ - <U1EBB>;<U1EBD>;<U1EBF>;<U1EC1>;<U1EC3>;<U1EC5>;<U1EC7>;<U1EC9>;<U1ECB>;/ - <U1ECD>;<U1ECF>;<U1ED1>;<U1ED3>;<U1ED5>;<U1ED7>;<U1ED9>;<U1EDB>;<U1EDD>;/ - <U1EDF>;<U1EE1>;<U1EE3>;<U1EE5>;<U1EE7>;<U1EE9>;<U1EEB>;<U1EED>;<U1EEF>;/ - <U1EF1>;<U1EF3>;<U1EF5>;<U1EF7>;<U1EF9>;<U1EFB>;<U1EFD>;<U1EFF>..<U1F07>;/ - <U1F10>..<U1F15>;<U1F20>..<U1F27>;<U1F30>..<U1F37>;<U1F40>..<U1F45>;/ - <U1F50>..<U1F57>;<U1F60>..<U1F67>;<U1F70>..<U1F7D>;<U1F80>..<U1F87>;/ - <U1F90>..<U1F97>;<U1FA0>..<U1FA7>;<U1FB0>..<U1FB4>;<U1FB6>..<U1FB7>;/ - <U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FC7>;<U1FD0>..<U1FD3>;/ - <U1FD6>..<U1FD7>;<U1FE0>..<U1FE7>;<U1FF2>..<U1FF4>;<U1FF6>..<U1FF7>;/ - <U2071>;<U207F>;<U2090>..<U209C>;<U210A>;<U210E>..<U210F>;<U2113>;/ - <U212F>;<U2134>;<U2139>;<U213C>..<U213D>;<U2146>..<U2149>;<U214E>;/ - <U2170>..<U217F>;<U2184>;<U24D0>..<U24E9>;<U2C30>..<U2C5F>;<U2C61>;/ - <U2C65>..<U2C66>;<U2C68>;<U2C6A>;<U2C6C>;<U2C71>;<U2C73>..<U2C74>;/ - <U2C76>..<U2C7D>;<U2C81>;<U2C83>;<U2C85>;<U2C87>;<U2C89>;<U2C8B>;<U2C8D>;/ - <U2C8F>;<U2C91>;<U2C93>;<U2C95>;<U2C97>;<U2C99>;<U2C9B>;<U2C9D>;<U2C9F>;/ - <U2CA1>;<U2CA3>;<U2CA5>;<U2CA7>;<U2CA9>;<U2CAB>;<U2CAD>;<U2CAF>;<U2CB1>;/ - <U2CB3>;<U2CB5>;<U2CB7>;<U2CB9>;<U2CBB>;<U2CBD>;<U2CBF>;<U2CC1>;<U2CC3>;/ - <U2CC5>;<U2CC7>;<U2CC9>;<U2CCB>;<U2CCD>;<U2CCF>;<U2CD1>;<U2CD3>;<U2CD5>;/ - <U2CD7>;<U2CD9>;<U2CDB>;<U2CDD>;<U2CDF>;<U2CE1>;<U2CE3>..<U2CE4>;<U2CEC>;/ - <U2CEE>;<U2CF3>;<U2D00>..<U2D25>;<U2D27>;<U2D2D>;<UA641>;<UA643>;<UA645>;/ - <UA647>;<UA649>;<UA64B>;<UA64D>;<UA64F>;<UA651>;<UA653>;<UA655>;<UA657>;/ - <UA659>;<UA65B>;<UA65D>;<UA65F>;<UA661>;<UA663>;<UA665>;<UA667>;<UA669>;/ - <UA66B>;<UA66D>;<UA681>;<UA683>;<UA685>;<UA687>;<UA689>;<UA68B>;<UA68D>;/ - <UA68F>;<UA691>;<UA693>;<UA695>;<UA697>;<UA699>;<UA69B>..<UA69D>;<UA723>;/ - <UA725>;<UA727>;<UA729>;<UA72B>;<UA72D>;<UA72F>..<UA731>;<UA733>;<UA735>;/ - <UA737>;<UA739>;<UA73B>;<UA73D>;<UA73F>;<UA741>;<UA743>;<UA745>;<UA747>;/ - <UA749>;<UA74B>;<UA74D>;<UA74F>;<UA751>;<UA753>;<UA755>;<UA757>;<UA759>;/ - <UA75B>;<UA75D>;<UA75F>;<UA761>;<UA763>;<UA765>;<UA767>;<UA769>;<UA76B>;/ - <UA76D>;<UA76F>..<UA778>;<UA77A>;<UA77C>;<UA77F>;<UA781>;<UA783>;<UA785>;/ - <UA787>;<UA78C>;<UA78E>;<UA791>;<UA793>..<UA795>;<UA797>;<UA799>;<UA79B>;/ - <UA79D>;<UA79F>;<UA7A1>;<UA7A3>;<UA7A5>;<UA7A7>;<UA7A9>;<UA7AF>;<UA7B5>;/ - <UA7B7>;<UA7B9>;<UA7BB>;<UA7BD>;<UA7BF>;<UA7C1>;<UA7C3>;<UA7C8>;<UA7CA>;/ - <UA7D1>;<UA7D3>;<UA7D5>;<UA7D7>;<UA7D9>;<UA7F2>..<UA7F4>;<UA7F6>;/ - <UA7F8>..<UA7FA>;<UAB30>..<UAB5A>;<UAB5C>..<UAB69>;<UAB70>..<UABBF>;/ - <UFB00>..<UFB06>;<UFB13>..<UFB17>;<UFF41>..<UFF5A>;/ - <U00010428>..<U0001044F>;<U000104D8>..<U000104FB>;/ - <U00010597>..<U000105A1>;<U000105A3>..<U000105B1>;/ - <U000105B3>..<U000105B9>;<U000105BB>..<U000105BC>;<U00010780>;/ - <U00010783>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010CC0>..<U00010CF2>;/ + <U10FC>..<U10FF>;<U13F8>..<U13FD>;<U1C80>..<U1C88>;<U1C8A>;/ + <U1D00>..<U1DBF>;<U1E01>;<U1E03>;<U1E05>;<U1E07>;<U1E09>;<U1E0B>;<U1E0D>;/ + <U1E0F>;<U1E11>;<U1E13>;<U1E15>;<U1E17>;<U1E19>;<U1E1B>;<U1E1D>;<U1E1F>;/ + <U1E21>;<U1E23>;<U1E25>;<U1E27>;<U1E29>;<U1E2B>;<U1E2D>;<U1E2F>;<U1E31>;/ + <U1E33>;<U1E35>;<U1E37>;<U1E39>;<U1E3B>;<U1E3D>;<U1E3F>;<U1E41>;<U1E43>;/ + <U1E45>;<U1E47>;<U1E49>;<U1E4B>;<U1E4D>;<U1E4F>;<U1E51>;<U1E53>;<U1E55>;/ + <U1E57>;<U1E59>;<U1E5B>;<U1E5D>;<U1E5F>;<U1E61>;<U1E63>;<U1E65>;<U1E67>;/ + <U1E69>;<U1E6B>;<U1E6D>;<U1E6F>;<U1E71>;<U1E73>;<U1E75>;<U1E77>;<U1E79>;/ + <U1E7B>;<U1E7D>;<U1E7F>;<U1E81>;<U1E83>;<U1E85>;<U1E87>;<U1E89>;<U1E8B>;/ + <U1E8D>;<U1E8F>;<U1E91>;<U1E93>;<U1E95>..<U1E9D>;<U1E9F>;<U1EA1>;<U1EA3>;/ + <U1EA5>;<U1EA7>;<U1EA9>;<U1EAB>;<U1EAD>;<U1EAF>;<U1EB1>;<U1EB3>;<U1EB5>;/ + <U1EB7>;<U1EB9>;<U1EBB>;<U1EBD>;<U1EBF>;<U1EC1>;<U1EC3>;<U1EC5>;<U1EC7>;/ + <U1EC9>;<U1ECB>;<U1ECD>;<U1ECF>;<U1ED1>;<U1ED3>;<U1ED5>;<U1ED7>;<U1ED9>;/ + <U1EDB>;<U1EDD>;<U1EDF>;<U1EE1>;<U1EE3>;<U1EE5>;<U1EE7>;<U1EE9>;<U1EEB>;/ + <U1EED>;<U1EEF>;<U1EF1>;<U1EF3>;<U1EF5>;<U1EF7>;<U1EF9>;<U1EFB>;<U1EFD>;/ + <U1EFF>..<U1F07>;<U1F10>..<U1F15>;<U1F20>..<U1F27>;<U1F30>..<U1F37>;/ + <U1F40>..<U1F45>;<U1F50>..<U1F57>;<U1F60>..<U1F67>;<U1F70>..<U1F7D>;/ + <U1F80>..<U1F87>;<U1F90>..<U1F97>;<U1FA0>..<U1FA7>;<U1FB0>..<U1FB4>;/ + <U1FB6>..<U1FB7>;<U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FC7>;/ + <U1FD0>..<U1FD3>;<U1FD6>..<U1FD7>;<U1FE0>..<U1FE7>;<U1FF2>..<U1FF4>;/ + <U1FF6>..<U1FF7>;<U2071>;<U207F>;<U2090>..<U209C>;<U210A>;/ + <U210E>..<U210F>;<U2113>;<U212F>;<U2134>;<U2139>;<U213C>..<U213D>;/ + <U2146>..<U2149>;<U214E>;<U2170>..<U217F>;<U2184>;<U24D0>..<U24E9>;/ + <U2C30>..<U2C5F>;<U2C61>;<U2C65>..<U2C66>;<U2C68>;<U2C6A>;<U2C6C>;/ + <U2C71>;<U2C73>..<U2C74>;<U2C76>..<U2C7D>;<U2C81>;<U2C83>;<U2C85>;/ + <U2C87>;<U2C89>;<U2C8B>;<U2C8D>;<U2C8F>;<U2C91>;<U2C93>;<U2C95>;<U2C97>;/ + <U2C99>;<U2C9B>;<U2C9D>;<U2C9F>;<U2CA1>;<U2CA3>;<U2CA5>;<U2CA7>;<U2CA9>;/ + <U2CAB>;<U2CAD>;<U2CAF>;<U2CB1>;<U2CB3>;<U2CB5>;<U2CB7>;<U2CB9>;<U2CBB>;/ + <U2CBD>;<U2CBF>;<U2CC1>;<U2CC3>;<U2CC5>;<U2CC7>;<U2CC9>;<U2CCB>;<U2CCD>;/ + <U2CCF>;<U2CD1>;<U2CD3>;<U2CD5>;<U2CD7>;<U2CD9>;<U2CDB>;<U2CDD>;<U2CDF>;/ + <U2CE1>;<U2CE3>..<U2CE4>;<U2CEC>;<U2CEE>;<U2CF3>;<U2D00>..<U2D25>;/ + <U2D27>;<U2D2D>;<UA641>;<UA643>;<UA645>;<UA647>;<UA649>;<UA64B>;<UA64D>;/ + <UA64F>;<UA651>;<UA653>;<UA655>;<UA657>;<UA659>;<UA65B>;<UA65D>;<UA65F>;/ + <UA661>;<UA663>;<UA665>;<UA667>;<UA669>;<UA66B>;<UA66D>;<UA681>;<UA683>;/ + <UA685>;<UA687>;<UA689>;<UA68B>;<UA68D>;<UA68F>;<UA691>;<UA693>;<UA695>;/ + <UA697>;<UA699>;<UA69B>..<UA69D>;<UA723>;<UA725>;<UA727>;<UA729>;<UA72B>;/ + <UA72D>;<UA72F>..<UA731>;<UA733>;<UA735>;<UA737>;<UA739>;<UA73B>;<UA73D>;/ + <UA73F>;<UA741>;<UA743>;<UA745>;<UA747>;<UA749>;<UA74B>;<UA74D>;<UA74F>;/ + <UA751>;<UA753>;<UA755>;<UA757>;<UA759>;<UA75B>;<UA75D>;<UA75F>;<UA761>;/ + <UA763>;<UA765>;<UA767>;<UA769>;<UA76B>;<UA76D>;<UA76F>..<UA778>;<UA77A>;/ + <UA77C>;<UA77F>;<UA781>;<UA783>;<UA785>;<UA787>;<UA78C>;<UA78E>;<UA791>;/ + <UA793>..<UA795>;<UA797>;<UA799>;<UA79B>;<UA79D>;<UA79F>;<UA7A1>;<UA7A3>;/ + <UA7A5>;<UA7A7>;<UA7A9>;<UA7AF>;<UA7B5>;<UA7B7>;<UA7B9>;<UA7BB>;<UA7BD>;/ + <UA7BF>;<UA7C1>;<UA7C3>;<UA7C8>;<UA7CA>;<UA7CD>;<UA7D1>;<UA7D3>;<UA7D5>;/ + <UA7D7>;<UA7D9>;<UA7DB>;<UA7F2>..<UA7F4>;<UA7F6>;<UA7F8>..<UA7FA>;/ + <UAB30>..<UAB5A>;<UAB5C>..<UAB69>;<UAB70>..<UABBF>;<UFB00>..<UFB06>;/ + <UFB13>..<UFB17>;<UFF41>..<UFF5A>;<U00010428>..<U0001044F>;/ + <U000104D8>..<U000104FB>;<U00010597>..<U000105A1>;/ + <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ + <U000105BB>..<U000105BC>;<U00010780>;<U00010783>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010CC0>..<U00010CF2>;<U00010D70>..<U00010D85>;/ <U000118C0>..<U000118DF>;<U00016E60>..<U00016E7F>;/ <U0001D41A>..<U0001D433>;<U0001D44E>..<U0001D454>;/ <U0001D456>..<U0001D467>;<U0001D482>..<U0001D49B>;/ @@ -345,7 +347,7 @@ lower / alpha / <U0041>..<U005A>;<U0061>..<U007A>;<U00AA>;<U00B5>;<U00BA>;/ <U00C0>..<U00D6>;<U00D8>..<U00F6>;<U00F8>..<U02C1>;<U02C6>..<U02D1>;/ - <U02E0>..<U02E4>;<U02EC>;<U02EE>;<U0345>;<U0370>..<U0374>;/ + <U02E0>..<U02E4>;<U02EC>;<U02EE>;<U0345>;<U0363>..<U0374>;/ <U0376>..<U0377>;<U037A>..<U037D>;<U037F>;<U0386>;<U0388>..<U038A>;/ <U038C>;<U038E>..<U03A1>;<U03A3>..<U03F5>;<U03F7>..<U0481>;/ <U048A>..<U052F>;<U0531>..<U0556>;<U0559>;<U0560>..<U0588>;/ @@ -355,16 +357,16 @@ alpha / <U06ED>..<U06FC>;<U06FF>;<U0710>..<U073F>;<U074D>..<U07B1>;/ <U07C0>..<U07EA>;<U07F4>..<U07F5>;<U07FA>;<U0800>..<U0817>;/ <U081A>..<U082C>;<U0840>..<U0858>;<U0860>..<U086A>;<U0870>..<U0887>;/ - <U0889>..<U088E>;<U08A0>..<U08C9>;<U08D4>..<U08DF>;<U08E3>..<U08E9>;/ - <U08F0>..<U093B>;<U093D>..<U094C>;<U094E>..<U0950>;<U0955>..<U0963>;/ - <U0966>..<U096F>;<U0971>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;/ - <U0993>..<U09A8>;<U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;/ - <U09BD>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CC>;<U09CE>;<U09D7>;/ - <U09DC>..<U09DD>;<U09DF>..<U09E3>;<U09E6>..<U09F1>;<U09FC>;/ - <U0A01>..<U0A03>;<U0A05>..<U0A0A>;<U0A0F>..<U0A10>;<U0A13>..<U0A28>;/ - <U0A2A>..<U0A30>;<U0A32>..<U0A33>;<U0A35>..<U0A36>;<U0A38>..<U0A39>;/ - <U0A3E>..<U0A42>;<U0A47>..<U0A48>;<U0A4B>..<U0A4C>;<U0A51>;/ - <U0A59>..<U0A5C>;<U0A5E>;<U0A66>..<U0A75>;<U0A81>..<U0A83>;/ + <U0889>..<U088E>;<U0897>;<U08A0>..<U08C9>;<U08D4>..<U08DF>;/ + <U08E3>..<U08E9>;<U08F0>..<U093B>;<U093D>..<U094C>;<U094E>..<U0950>;/ + <U0955>..<U0963>;<U0966>..<U096F>;<U0971>..<U0983>;<U0985>..<U098C>;/ + <U098F>..<U0990>;<U0993>..<U09A8>;<U09AA>..<U09B0>;<U09B2>;/ + <U09B6>..<U09B9>;<U09BD>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CC>;/ + <U09CE>;<U09D7>;<U09DC>..<U09DD>;<U09DF>..<U09E3>;<U09E6>..<U09F1>;/ + <U09FC>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;<U0A0F>..<U0A10>;/ + <U0A13>..<U0A28>;<U0A2A>..<U0A30>;<U0A32>..<U0A33>;<U0A35>..<U0A36>;/ + <U0A38>..<U0A39>;<U0A3E>..<U0A42>;<U0A47>..<U0A48>;<U0A4B>..<U0A4C>;/ + <U0A51>;<U0A59>..<U0A5C>;<U0A5E>;<U0A66>..<U0A75>;<U0A81>..<U0A83>;/ <U0A85>..<U0A8D>;<U0A8F>..<U0A91>;<U0A93>..<U0AA8>;<U0AAA>..<U0AB0>;/ <U0AB2>..<U0AB3>;<U0AB5>..<U0AB9>;<U0ABD>..<U0AC5>;<U0AC7>..<U0AC9>;/ <U0ACB>..<U0ACC>;<U0AD0>;<U0AE0>..<U0AE3>;<U0AE6>..<U0AEF>;/ @@ -410,9 +412,9 @@ alpha / <U1A90>..<U1A99>;<U1AA7>;<U1ABF>..<U1AC0>;<U1ACC>..<U1ACE>;/ <U1B00>..<U1B33>;<U1B35>..<U1B43>;<U1B45>..<U1B4C>;<U1B50>..<U1B59>;/ <U1B80>..<U1BA9>;<U1BAC>..<U1BE5>;<U1BE7>..<U1BF1>;<U1C00>..<U1C36>;/ - <U1C40>..<U1C49>;<U1C4D>..<U1C7D>;<U1C80>..<U1C88>;<U1C90>..<U1CBA>;/ + <U1C40>..<U1C49>;<U1C4D>..<U1C7D>;<U1C80>..<U1C8A>;<U1C90>..<U1CBA>;/ <U1CBD>..<U1CBF>;<U1CE9>..<U1CEC>;<U1CEE>..<U1CF3>;<U1CF5>..<U1CF6>;/ - <U1CFA>;<U1D00>..<U1DBF>;<U1DE7>..<U1DF4>;<U1E00>..<U1F15>;/ + <U1CFA>;<U1D00>..<U1DBF>;<U1DD3>..<U1DF4>;<U1E00>..<U1F15>;/ <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ <U1FB6>..<U1FBC>;<U1FBE>;<U1FC2>..<U1FC4>;<U1FC6>..<U1FCC>;/ @@ -430,8 +432,8 @@ alpha / <U30FC>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;<U31A0>..<U31BF>;/ <U31F0>..<U31FF>;<U3400>..<U4DBF>;<U4E00>..<UA48C>;<UA4D0>..<UA4FD>;/ <UA500>..<UA60C>;<UA610>..<UA62B>;<UA640>..<UA66E>;<UA674>..<UA67B>;/ - <UA67F>..<UA6EF>;<UA717>..<UA71F>;<UA722>..<UA788>;<UA78B>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA805>;/ + <UA67F>..<UA6EF>;<UA717>..<UA71F>;<UA722>..<UA788>;<UA78B>..<UA7CD>;/ + <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA805>;/ <UA807>..<UA827>;<UA840>..<UA873>;<UA880>..<UA8C3>;<UA8C5>;/ <UA8D0>..<UA8D9>;<UA8F2>..<UA8F7>;<UA8FB>;<UA8FD>..<UA92A>;/ <UA930>..<UA952>;<UA960>..<UA97C>;<UA980>..<UA9B2>;<UA9B4>..<UA9BF>;/ @@ -462,26 +464,28 @@ alpha / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010860>..<U00010876>;/ - <U00010880>..<U0001089E>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U00010900>..<U00010915>;/ - <U00010920>..<U00010939>;<U00010980>..<U000109B7>;/ - <U000109BE>..<U000109BF>;<U00010A00>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A60>..<U00010A7C>;<U00010A80>..<U00010A9C>;/ - <U00010AC0>..<U00010AC7>;<U00010AC9>..<U00010AE4>;/ - <U00010B00>..<U00010B35>;<U00010B40>..<U00010B55>;/ - <U00010B60>..<U00010B72>;<U00010B80>..<U00010B91>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010D00>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E80>..<U00010EA9>;/ - <U00010EAB>..<U00010EAC>;<U00010EB0>..<U00010EB1>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010860>..<U00010876>;<U00010880>..<U0001089E>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U00010900>..<U00010915>;<U00010920>..<U00010939>;/ + <U00010980>..<U000109B7>;<U000109BE>..<U000109BF>;/ + <U00010A00>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A60>..<U00010A7C>;/ + <U00010A80>..<U00010A9C>;<U00010AC0>..<U00010AC7>;/ + <U00010AC9>..<U00010AE4>;<U00010B00>..<U00010B35>;/ + <U00010B40>..<U00010B55>;<U00010B60>..<U00010B72>;/ + <U00010B80>..<U00010B91>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010D00>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>;<U00010D6F>..<U00010D85>;/ + <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAC>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;<U00010EFC>;/ <U00010F00>..<U00010F1C>;<U00010F27>;<U00010F30>..<U00010F45>;/ <U00010F70>..<U00010F81>;<U00010FB0>..<U00010FC4>;/ <U00010FE0>..<U00010FF6>;<U00011000>..<U00011045>;/ @@ -501,83 +505,92 @@ alpha / <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ <U0001133D>..<U00011344>;<U00011347>..<U00011348>;/ <U0001134B>..<U0001134C>;<U00011350>;<U00011357>;/ - <U0001135D>..<U00011363>;<U00011400>..<U00011441>;/ - <U00011443>..<U00011445>;<U00011447>..<U0001144A>;/ - <U00011450>..<U00011459>;<U0001145F>..<U00011461>;/ - <U00011480>..<U000114C1>;<U000114C4>..<U000114C5>;<U000114C7>;/ - <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ - <U000115B8>..<U000115BE>;<U000115D8>..<U000115DD>;/ - <U00011600>..<U0001163E>;<U00011640>;<U00011644>;/ - <U00011650>..<U00011659>;<U00011680>..<U000116B5>;<U000116B8>;/ - <U000116C0>..<U000116C9>;<U00011700>..<U0001171A>;/ - <U0001171D>..<U0001172A>;<U00011730>..<U00011739>;/ - <U00011740>..<U00011746>;<U00011800>..<U00011838>;/ - <U000118A0>..<U000118E9>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U0001193C>;<U0001193F>..<U00011942>;/ - <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ - <U000119AA>..<U000119D7>;<U000119DA>..<U000119DF>;<U000119E1>;/ - <U000119E3>..<U000119E4>;<U00011A00>..<U00011A32>;/ - <U00011A35>..<U00011A3E>;<U00011A50>..<U00011A97>;<U00011A9D>;/ - <U00011AB0>..<U00011AF8>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C3E>;<U00011C40>;/ - <U00011C50>..<U00011C59>;<U00011C72>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D41>;<U00011D43>;<U00011D46>..<U00011D47>;/ - <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ - <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ - <U00011D90>..<U00011D91>;<U00011D93>..<U00011D96>;<U00011D98>;/ - <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF6>;/ - <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ - <U00011F3E>..<U00011F40>;<U00011F50>..<U00011F59>;<U00011FB0>;/ - <U00012000>..<U00012399>;<U00012400>..<U0001246E>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF0>;/ - <U00013000>..<U0001342F>;<U00013441>..<U00013446>;/ - <U00014400>..<U00014646>;<U00016800>..<U00016A38>;/ + <U0001135D>..<U00011363>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113CD>;<U000113D1>;<U000113D3>;/ + <U00011400>..<U00011441>;<U00011443>..<U00011445>;/ + <U00011447>..<U0001144A>;<U00011450>..<U00011459>;/ + <U0001145F>..<U00011461>;<U00011480>..<U000114C1>;/ + <U000114C4>..<U000114C5>;<U000114C7>;<U000114D0>..<U000114D9>;/ + <U00011580>..<U000115B5>;<U000115B8>..<U000115BE>;/ + <U000115D8>..<U000115DD>;<U00011600>..<U0001163E>;<U00011640>;/ + <U00011644>;<U00011650>..<U00011659>;<U00011680>..<U000116B5>;/ + <U000116B8>;<U000116C0>..<U000116C9>;<U000116D0>..<U000116E3>;/ + <U00011700>..<U0001171A>;<U0001171D>..<U0001172A>;/ + <U00011730>..<U00011739>;<U00011740>..<U00011746>;/ + <U00011800>..<U00011838>;<U000118A0>..<U000118E9>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U0001193C>;/ + <U0001193F>..<U00011942>;<U00011950>..<U00011959>;/ + <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ + <U000119DA>..<U000119DF>;<U000119E1>;<U000119E3>..<U000119E4>;/ + <U00011A00>..<U00011A32>;<U00011A35>..<U00011A3E>;/ + <U00011A50>..<U00011A97>;<U00011A9D>;<U00011AB0>..<U00011AF8>;/ + <U00011BC0>..<U00011BE0>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C3E>;<U00011C40>;<U00011C50>..<U00011C59>;/ + <U00011C72>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D41>;<U00011D43>;/ + <U00011D46>..<U00011D47>;<U00011D50>..<U00011D59>;/ + <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ + <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ + <U00011D93>..<U00011D96>;<U00011D98>;<U00011DA0>..<U00011DA9>;/ + <U00011EE0>..<U00011EF6>;<U00011F00>..<U00011F10>;/ + <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F40>;/ + <U00011F50>..<U00011F59>;<U00011FB0>;<U00012000>..<U00012399>;/ + <U00012400>..<U0001246E>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF0>;<U00013000>..<U0001342F>;/ + <U00013441>..<U00013446>;<U00013460>..<U000143FA>;/ + <U00014400>..<U00014646>;<U00016100>..<U0001612E>;/ + <U00016130>..<U00016139>;<U00016800>..<U00016A38>;/ <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ <U00016A70>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ <U00016AD0>..<U00016AED>;<U00016B00>..<U00016B2F>;/ <U00016B40>..<U00016B43>;<U00016B50>..<U00016B59>;/ <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U00016D40>..<U00016D6C>;<U00016D70>..<U00016D79>;/ <U00016E40>..<U00016E7F>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE1>;<U00016FE3>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;<U0001BC9E>;/ - <U0001D400>..<U0001D454>;<U0001D456>..<U0001D49C>;/ - <U0001D49E>..<U0001D49F>;<U0001D4A2>;<U0001D4A5>..<U0001D4A6>;/ - <U0001D4A9>..<U0001D4AC>;<U0001D4AE>..<U0001D4B9>;<U0001D4BB>;/ - <U0001D4BD>..<U0001D4C3>;<U0001D4C5>..<U0001D505>;/ - <U0001D507>..<U0001D50A>;<U0001D50D>..<U0001D514>;/ - <U0001D516>..<U0001D51C>;<U0001D51E>..<U0001D539>;/ - <U0001D53B>..<U0001D53E>;<U0001D540>..<U0001D544>;<U0001D546>;/ - <U0001D54A>..<U0001D550>;<U0001D552>..<U0001D6A5>;/ - <U0001D6A8>..<U0001D6C0>;<U0001D6C2>..<U0001D6DA>;/ - <U0001D6DC>..<U0001D6FA>;<U0001D6FC>..<U0001D714>;/ - <U0001D716>..<U0001D734>;<U0001D736>..<U0001D74E>;/ - <U0001D750>..<U0001D76E>;<U0001D770>..<U0001D788>;/ - <U0001D78A>..<U0001D7A8>;<U0001D7AA>..<U0001D7C2>;/ - <U0001D7C4>..<U0001D7CB>;<U0001D7CE>..<U0001D7FF>;/ - <U0001DF00>..<U0001DF1E>;<U0001DF25>..<U0001DF2A>;/ - <U0001E000>..<U0001E006>;<U0001E008>..<U0001E018>;/ - <U0001E01B>..<U0001E021>;<U0001E023>..<U0001E024>;/ - <U0001E026>..<U0001E02A>;<U0001E030>..<U0001E06D>;<U0001E08F>;/ - <U0001E100>..<U0001E12C>;<U0001E137>..<U0001E13D>;/ - <U0001E140>..<U0001E149>;<U0001E14E>;<U0001E290>..<U0001E2AD>;/ - <U0001E2C0>..<U0001E2EB>;<U0001E2F0>..<U0001E2F9>;/ - <U0001E4D0>..<U0001E4EB>;<U0001E4F0>..<U0001E4F9>;/ - <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ - <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ - <U0001E800>..<U0001E8C4>;<U0001E900>..<U0001E943>;<U0001E947>;/ - <U0001E94B>;<U0001E950>..<U0001E959>;<U0001EE00>..<U0001EE03>;/ + <U0001CCF0>..<U0001CCF9>;<U0001D400>..<U0001D454>;/ + <U0001D456>..<U0001D49C>;<U0001D49E>..<U0001D49F>;<U0001D4A2>;/ + <U0001D4A5>..<U0001D4A6>;<U0001D4A9>..<U0001D4AC>;/ + <U0001D4AE>..<U0001D4B9>;<U0001D4BB>;<U0001D4BD>..<U0001D4C3>;/ + <U0001D4C5>..<U0001D505>;<U0001D507>..<U0001D50A>;/ + <U0001D50D>..<U0001D514>;<U0001D516>..<U0001D51C>;/ + <U0001D51E>..<U0001D539>;<U0001D53B>..<U0001D53E>;/ + <U0001D540>..<U0001D544>;<U0001D546>;<U0001D54A>..<U0001D550>;/ + <U0001D552>..<U0001D6A5>;<U0001D6A8>..<U0001D6C0>;/ + <U0001D6C2>..<U0001D6DA>;<U0001D6DC>..<U0001D6FA>;/ + <U0001D6FC>..<U0001D714>;<U0001D716>..<U0001D734>;/ + <U0001D736>..<U0001D74E>;<U0001D750>..<U0001D76E>;/ + <U0001D770>..<U0001D788>;<U0001D78A>..<U0001D7A8>;/ + <U0001D7AA>..<U0001D7C2>;<U0001D7C4>..<U0001D7CB>;/ + <U0001D7CE>..<U0001D7FF>;<U0001DF00>..<U0001DF1E>;/ + <U0001DF25>..<U0001DF2A>;<U0001E000>..<U0001E006>;/ + <U0001E008>..<U0001E018>;<U0001E01B>..<U0001E021>;/ + <U0001E023>..<U0001E024>;<U0001E026>..<U0001E02A>;/ + <U0001E030>..<U0001E06D>;<U0001E08F>;<U0001E100>..<U0001E12C>;/ + <U0001E137>..<U0001E13D>;<U0001E140>..<U0001E149>;<U0001E14E>;/ + <U0001E290>..<U0001E2AD>;<U0001E2C0>..<U0001E2EB>;/ + <U0001E2F0>..<U0001E2F9>;<U0001E4D0>..<U0001E4EB>;/ + <U0001E4F0>..<U0001E4F9>;<U0001E5D0>..<U0001E5ED>;/ + <U0001E5F0>..<U0001E5FA>;<U0001E7E0>..<U0001E7E6>;/ + <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ + <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ + <U0001E900>..<U0001E943>;<U0001E947>;<U0001E94B>;/ + <U0001E950>..<U0001E959>;<U0001EE00>..<U0001EE03>;/ <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ @@ -618,7 +631,7 @@ punct / <U0021>..<U002F>;<U003A>..<U0040>;<U005B>..<U0060>;<U007B>..<U007E>;/ <U00A0>..<U00A9>;<U00AB>..<U00B4>;<U00B6>..<U00B9>;<U00BB>..<U00BF>;/ <U00D7>;<U00F7>;<U02C2>..<U02C5>;<U02D2>..<U02DF>;<U02E5>..<U02EB>;/ - <U02ED>;<U02EF>..<U0344>;<U0346>..<U036F>;<U0375>;<U037E>;/ + <U02ED>;<U02EF>..<U0344>;<U0346>..<U0362>;<U0375>;<U037E>;/ <U0384>..<U0385>;<U0387>;<U03F6>;<U0482>..<U0489>;<U055A>..<U055F>;/ <U0589>..<U058A>;<U058D>..<U058F>;<U0591>..<U05AF>;<U05BE>;<U05C0>;/ <U05C3>;<U05C6>;<U05F3>..<U05F4>;<U0600>..<U060F>;<U061B>..<U061F>;/ @@ -643,44 +656,45 @@ punct / <U17DD>;<U17F0>..<U17F9>;<U1800>..<U180F>;<U1939>..<U193B>;<U1940>;/ <U1944>..<U1945>;<U19DA>;<U19DE>..<U19FF>;<U1A1E>..<U1A1F>;<U1A60>;/ <U1A75>..<U1A7C>;<U1A7F>;<U1AA0>..<U1AA6>;<U1AA8>..<U1AAD>;/ - <U1AB0>..<U1ABE>;<U1AC1>..<U1ACB>;<U1B34>;<U1B44>;<U1B5A>..<U1B7E>;/ - <U1BAA>..<U1BAB>;<U1BE6>;<U1BF2>..<U1BF3>;<U1BFC>..<U1BFF>;<U1C37>;/ - <U1C3B>..<U1C3F>;<U1C7E>..<U1C7F>;<U1CC0>..<U1CC7>;<U1CD0>..<U1CE8>;/ - <U1CED>;<U1CF4>;<U1CF7>..<U1CF9>;<U1DC0>..<U1DE6>;<U1DF5>..<U1DFF>;/ - <U1FBD>;<U1FBF>..<U1FC1>;<U1FCD>..<U1FCF>;<U1FDD>..<U1FDF>;/ - <U1FED>..<U1FEF>;<U1FFD>..<U1FFE>;<U2007>;<U200B>..<U2027>;/ - <U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2070>;<U2074>..<U207E>;/ - <U2080>..<U208E>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;<U2100>..<U2101>;/ - <U2103>..<U2106>;<U2108>..<U2109>;<U2114>;<U2116>..<U2118>;/ - <U211E>..<U2123>;<U2125>;<U2127>;<U2129>;<U212E>;<U213A>..<U213B>;/ - <U2140>..<U2144>;<U214A>..<U214D>;<U214F>..<U215F>;<U2189>..<U218B>;/ - <U2190>..<U2426>;<U2440>..<U244A>;<U2460>..<U24B5>;<U24EA>..<U2B73>;/ - <U2B76>..<U2B95>;<U2B97>..<U2BFF>;<U2CE5>..<U2CEA>;<U2CEF>..<U2CF1>;/ - <U2CF9>..<U2CFF>;<U2D70>;<U2D7F>;<U2E00>..<U2E2E>;<U2E30>..<U2E5D>;/ - <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;/ - <U3001>..<U3004>;<U3008>..<U3020>;<U302A>..<U3030>;<U3036>..<U3037>;/ - <U303D>..<U303F>;<U3099>..<U309C>;<U30A0>;<U30FB>;<U3190>..<U319F>;/ - <U31C0>..<U31E3>;<U31EF>;<U3200>..<U321E>;<U3220>..<U33FF>;/ - <U4DC0>..<U4DFF>;<UA490>..<UA4C6>;<UA4FE>..<UA4FF>;<UA60D>..<UA60F>;/ - <UA66F>..<UA673>;<UA67C>..<UA67E>;<UA6F0>..<UA6F7>;<UA700>..<UA716>;/ - <UA720>..<UA721>;<UA789>..<UA78A>;<UA806>;<UA828>..<UA82C>;/ - <UA830>..<UA839>;<UA874>..<UA877>;<UA8C4>;<UA8CE>..<UA8CF>;/ - <UA8E0>..<UA8F1>;<UA8F8>..<UA8FA>;<UA8FC>;<UA92B>..<UA92F>;<UA953>;/ - <UA95F>;<UA9B3>;<UA9C0>..<UA9CD>;<UA9DE>..<UA9DF>;<UAA5C>..<UAA5F>;/ - <UAA77>..<UAA79>;<UAABF>;<UAAC1>;<UAADE>..<UAADF>;<UAAF0>..<UAAF1>;/ - <UAAF6>;<UAB5B>;<UAB6A>..<UAB6B>;<UABEB>..<UABED>;<UE000>..<UF8FF>;/ - <UFB29>;<UFBB2>..<UFBC2>;<UFD3E>..<UFD4F>;<UFDCF>;<UFDFC>..<UFE19>;/ - <UFE20>..<UFE52>;<UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFEFF>;/ - <UFF01>..<UFF0F>;<UFF1A>..<UFF20>;<UFF3B>..<UFF40>;<UFF5B>..<UFF65>;/ - <UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ - <U00010100>..<U00010102>;<U00010107>..<U00010133>;/ - <U00010137>..<U0001013F>;<U00010175>..<U0001018E>;/ - <U00010190>..<U0001019C>;<U000101A0>;<U000101D0>..<U000101FD>;/ - <U000102E0>..<U000102FB>;<U00010320>..<U00010323>;<U0001039F>;/ - <U000103D0>;<U0001056F>;<U00010857>..<U0001085F>;/ - <U00010877>..<U0001087F>;<U000108A7>..<U000108AF>;/ - <U000108FB>..<U000108FF>;<U00010916>..<U0001091B>;<U0001091F>;/ - <U0001093F>;<U000109BC>..<U000109BD>;<U000109C0>..<U000109CF>;/ + <U1AB0>..<U1ABE>;<U1AC1>..<U1ACB>;<U1B34>;<U1B44>;<U1B4E>..<U1B4F>;/ + <U1B5A>..<U1B7F>;<U1BAA>..<U1BAB>;<U1BE6>;<U1BF2>..<U1BF3>;/ + <U1BFC>..<U1BFF>;<U1C37>;<U1C3B>..<U1C3F>;<U1C7E>..<U1C7F>;/ + <U1CC0>..<U1CC7>;<U1CD0>..<U1CE8>;<U1CED>;<U1CF4>;<U1CF7>..<U1CF9>;/ + <U1DC0>..<U1DD2>;<U1DF5>..<U1DFF>;<U1FBD>;<U1FBF>..<U1FC1>;/ + <U1FCD>..<U1FCF>;<U1FDD>..<U1FDF>;<U1FED>..<U1FEF>;<U1FFD>..<U1FFE>;/ + <U2007>;<U200B>..<U2027>;<U202A>..<U205E>;<U2060>..<U2064>;/ + <U2066>..<U2070>;<U2074>..<U207E>;<U2080>..<U208E>;<U20A0>..<U20C0>;/ + <U20D0>..<U20F0>;<U2100>..<U2101>;<U2103>..<U2106>;<U2108>..<U2109>;/ + <U2114>;<U2116>..<U2118>;<U211E>..<U2123>;<U2125>;<U2127>;<U2129>;/ + <U212E>;<U213A>..<U213B>;<U2140>..<U2144>;<U214A>..<U214D>;/ + <U214F>..<U215F>;<U2189>..<U218B>;<U2190>..<U2429>;<U2440>..<U244A>;/ + <U2460>..<U24B5>;<U24EA>..<U2B73>;<U2B76>..<U2B95>;<U2B97>..<U2BFF>;/ + <U2CE5>..<U2CEA>;<U2CEF>..<U2CF1>;<U2CF9>..<U2CFF>;<U2D70>;<U2D7F>;/ + <U2E00>..<U2E2E>;<U2E30>..<U2E5D>;<U2E80>..<U2E99>;<U2E9B>..<U2EF3>;/ + <U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;<U3001>..<U3004>;<U3008>..<U3020>;/ + <U302A>..<U3030>;<U3036>..<U3037>;<U303D>..<U303F>;<U3099>..<U309C>;/ + <U30A0>;<U30FB>;<U3190>..<U319F>;<U31C0>..<U31E5>;<U31EF>;/ + <U3200>..<U321E>;<U3220>..<U33FF>;<U4DC0>..<U4DFF>;<UA490>..<UA4C6>;/ + <UA4FE>..<UA4FF>;<UA60D>..<UA60F>;<UA66F>..<UA673>;<UA67C>..<UA67E>;/ + <UA6F0>..<UA6F7>;<UA700>..<UA716>;<UA720>..<UA721>;<UA789>..<UA78A>;/ + <UA806>;<UA828>..<UA82C>;<UA830>..<UA839>;<UA874>..<UA877>;<UA8C4>;/ + <UA8CE>..<UA8CF>;<UA8E0>..<UA8F1>;<UA8F8>..<UA8FA>;<UA8FC>;/ + <UA92B>..<UA92F>;<UA953>;<UA95F>;<UA9B3>;<UA9C0>..<UA9CD>;/ + <UA9DE>..<UA9DF>;<UAA5C>..<UAA5F>;<UAA77>..<UAA79>;<UAABF>;<UAAC1>;/ + <UAADE>..<UAADF>;<UAAF0>..<UAAF1>;<UAAF6>;<UAB5B>;<UAB6A>..<UAB6B>;/ + <UABEB>..<UABED>;<UE000>..<UF8FF>;<UFB29>;<UFBB2>..<UFBC2>;/ + <UFD3E>..<UFD4F>;<UFDCF>;<UFDFC>..<UFE19>;<UFE20>..<UFE52>;/ + <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFEFF>;<UFF01>..<UFF0F>;/ + <UFF1A>..<UFF20>;<UFF3B>..<UFF40>;<UFF5B>..<UFF65>;<UFFE0>..<UFFE6>;/ + <UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;<U00010100>..<U00010102>;/ + <U00010107>..<U00010133>;<U00010137>..<U0001013F>;/ + <U00010175>..<U0001018E>;<U00010190>..<U0001019C>;<U000101A0>;/ + <U000101D0>..<U000101FD>;<U000102E0>..<U000102FB>;/ + <U00010320>..<U00010323>;<U0001039F>;<U000103D0>;<U0001056F>;/ + <U00010857>..<U0001085F>;<U00010877>..<U0001087F>;/ + <U000108A7>..<U000108AF>;<U000108FB>..<U000108FF>;/ + <U00010916>..<U0001091B>;<U0001091F>;<U0001093F>;/ + <U000109BC>..<U000109BD>;<U000109C0>..<U000109CF>;/ <U000109D2>..<U000109FF>;<U00010A38>..<U00010A3A>;/ <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ <U00010A7D>..<U00010A7F>;<U00010A9D>..<U00010A9F>;<U00010AC8>;/ @@ -688,6 +702,7 @@ punct / <U00010B39>..<U00010B3F>;<U00010B58>..<U00010B5F>;/ <U00010B78>..<U00010B7F>;<U00010B99>..<U00010B9C>;/ <U00010BA9>..<U00010BAF>;<U00010CFA>..<U00010CFF>;/ + <U00010D6A>..<U00010D6E>;<U00010D8E>..<U00010D8F>;/ <U00010E60>..<U00010E7E>;<U00010EAD>;<U00010EFD>..<U00010EFF>;/ <U00010F1D>..<U00010F26>;<U00010F46>..<U00010F59>;/ <U00010F82>..<U00010F89>;<U00010FC5>..<U00010FCB>;/ @@ -698,7 +713,9 @@ punct / <U000111DB>;<U000111DD>..<U000111DF>;<U000111E1>..<U000111F4>;/ <U00011235>..<U00011236>;<U00011238>..<U0001123D>;<U000112A9>;/ <U000112E9>..<U000112EA>;<U0001133B>..<U0001133C>;<U0001134D>;/ - <U00011366>..<U0001136C>;<U00011370>..<U00011374>;<U00011442>;/ + <U00011366>..<U0001136C>;<U00011370>..<U00011374>;/ + <U000113CE>..<U000113D0>;<U000113D2>;<U000113D4>..<U000113D5>;/ + <U000113D7>..<U000113D8>;<U000113E1>..<U000113E2>;<U00011442>;/ <U00011446>;<U0001144B>..<U0001144F>;<U0001145A>..<U0001145B>;/ <U0001145D>..<U0001145E>;<U000114C2>..<U000114C3>;<U000114C6>;/ <U000115BF>..<U000115D7>;<U0001163F>;<U00011641>..<U00011643>;/ @@ -708,16 +725,19 @@ punct / <U00011943>..<U00011946>;<U000119E0>;<U000119E2>;/ <U00011A33>..<U00011A34>;<U00011A3F>..<U00011A47>;/ <U00011A98>..<U00011A9C>;<U00011A9E>..<U00011AA2>;/ - <U00011B00>..<U00011B09>;<U00011C3F>;<U00011C41>..<U00011C45>;/ - <U00011C5A>..<U00011C6C>;<U00011C70>..<U00011C71>;<U00011D42>;/ - <U00011D44>..<U00011D45>;<U00011D97>;<U00011EF7>..<U00011EF8>;/ - <U00011F41>..<U00011F4F>;<U00011FC0>..<U00011FF1>;<U00011FFF>;/ + <U00011B00>..<U00011B09>;<U00011BE1>;<U00011C3F>;/ + <U00011C41>..<U00011C45>;<U00011C5A>..<U00011C6C>;/ + <U00011C70>..<U00011C71>;<U00011D42>;<U00011D44>..<U00011D45>;/ + <U00011D97>;<U00011EF7>..<U00011EF8>;<U00011F41>..<U00011F4F>;/ + <U00011F5A>;<U00011FC0>..<U00011FF1>;<U00011FFF>;/ <U00012470>..<U00012474>;<U00012FF1>..<U00012FF2>;/ - <U00013430>..<U00013440>;<U00013447>..<U00013455>;/ + <U00013430>..<U00013440>;<U00013447>..<U00013455>;<U0001612F>;/ <U00016A6E>..<U00016A6F>;<U00016AF0>..<U00016AF5>;/ <U00016B30>..<U00016B3F>;<U00016B44>..<U00016B45>;/ - <U00016B5B>..<U00016B61>;<U00016E80>..<U00016E9A>;<U00016FE2>;/ - <U00016FE4>;<U0001BC9C>..<U0001BC9D>;<U0001BC9F>..<U0001BCA3>;/ + <U00016B5B>..<U00016B61>;<U00016D6D>..<U00016D6F>;/ + <U00016E80>..<U00016E9A>;<U00016FE2>;<U00016FE4>;/ + <U0001BC9C>..<U0001BC9D>;<U0001BC9F>..<U0001BCA3>;/ + <U0001CC00>..<U0001CCEF>;<U0001CD00>..<U0001CEB3>;/ <U0001CF00>..<U0001CF2D>;<U0001CF30>..<U0001CF46>;/ <U0001CF50>..<U0001CFC3>;<U0001D000>..<U0001D0F5>;/ <U0001D100>..<U0001D126>;<U0001D129>..<U0001D1EA>;/ @@ -728,31 +748,32 @@ punct / <U0001D800>..<U0001DA8B>;<U0001DA9B>..<U0001DA9F>;/ <U0001DAA1>..<U0001DAAF>;<U0001E130>..<U0001E136>;<U0001E14F>;/ <U0001E2AE>;<U0001E2EC>..<U0001E2EF>;<U0001E2FF>;/ - <U0001E4EC>..<U0001E4EF>;<U0001E8C7>..<U0001E8D6>;/ - <U0001E944>..<U0001E946>;<U0001E948>..<U0001E94A>;/ - <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ - <U0001ED01>..<U0001ED3D>;<U0001EEF0>..<U0001EEF1>;/ - <U0001F000>..<U0001F02B>;<U0001F030>..<U0001F093>;/ - <U0001F0A0>..<U0001F0AE>;<U0001F0B1>..<U0001F0BF>;/ - <U0001F0C1>..<U0001F0CF>;<U0001F0D1>..<U0001F0F5>;/ - <U0001F100>..<U0001F12F>;<U0001F14A>..<U0001F14F>;/ - <U0001F16A>..<U0001F16F>;<U0001F18A>..<U0001F1AD>;/ - <U0001F1E6>..<U0001F202>;<U0001F210>..<U0001F23B>;/ - <U0001F240>..<U0001F248>;<U0001F250>..<U0001F251>;/ - <U0001F260>..<U0001F265>;<U0001F300>..<U0001F6D7>;/ - <U0001F6DC>..<U0001F6EC>;<U0001F6F0>..<U0001F6FC>;/ - <U0001F700>..<U0001F776>;<U0001F77B>..<U0001F7D9>;/ - <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ - <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ - <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ + <U0001E4EC>..<U0001E4EF>;<U0001E5EE>..<U0001E5EF>;<U0001E5FF>;/ + <U0001E8C7>..<U0001E8D6>;<U0001E944>..<U0001E946>;/ + <U0001E948>..<U0001E94A>;<U0001E95E>..<U0001E95F>;/ + <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ + <U0001EEF0>..<U0001EEF1>;<U0001F000>..<U0001F02B>;/ + <U0001F030>..<U0001F093>;<U0001F0A0>..<U0001F0AE>;/ + <U0001F0B1>..<U0001F0BF>;<U0001F0C1>..<U0001F0CF>;/ + <U0001F0D1>..<U0001F0F5>;<U0001F100>..<U0001F12F>;/ + <U0001F14A>..<U0001F14F>;<U0001F16A>..<U0001F16F>;/ + <U0001F18A>..<U0001F1AD>;<U0001F1E6>..<U0001F202>;/ + <U0001F210>..<U0001F23B>;<U0001F240>..<U0001F248>;/ + <U0001F250>..<U0001F251>;<U0001F260>..<U0001F265>;/ + <U0001F300>..<U0001F6D7>;<U0001F6DC>..<U0001F6EC>;/ + <U0001F6F0>..<U0001F6FC>;<U0001F700>..<U0001F776>;/ + <U0001F77B>..<U0001F7D9>;<U0001F7E0>..<U0001F7EB>;<U0001F7F0>;/ + <U0001F800>..<U0001F80B>;<U0001F810>..<U0001F847>;/ + <U0001F850>..<U0001F859>;<U0001F860>..<U0001F887>;/ + <U0001F890>..<U0001F8AD>;<U0001F8B0>..<U0001F8BB>;/ + <U0001F8C0>..<U0001F8C1>;<U0001F900>..<U0001FA53>;/ <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001FA80>..<U0001FA89>;<U0001FA8F>..<U0001FAC6>;/ + <U0001FACE>..<U0001FADC>;<U0001FADF>..<U0001FAE9>;/ + <U0001FAF0>..<U0001FAF8>;<U0001FB00>..<U0001FB92>;/ + <U0001FB94>..<U0001FBEF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> graph / <U0021>..<U007E>;<U00A0>..<U0377>;<U037A>..<U037F>;<U0384>..<U038A>;/ @@ -761,7 +782,7 @@ graph / <U05EF>..<U05F4>;<U0600>..<U070D>;<U070F>..<U074A>;<U074D>..<U07B1>;/ <U07C0>..<U07FA>;<U07FD>..<U082D>;<U0830>..<U083E>;<U0840>..<U085B>;/ <U085E>;<U0860>..<U086A>;<U0870>..<U088E>;<U0890>..<U0891>;/ - <U0898>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ + <U0897>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ <U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;<U09BC>..<U09C4>;/ <U09C7>..<U09C8>;<U09CB>..<U09CE>;<U09D7>;<U09DC>..<U09DD>;/ <U09DF>..<U09E3>;<U09E6>..<U09FE>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;/ @@ -808,38 +829,38 @@ graph / <U1970>..<U1974>;<U1980>..<U19AB>;<U19B0>..<U19C9>;<U19D0>..<U19DA>;/ <U19DE>..<U1A1B>;<U1A1E>..<U1A5E>;<U1A60>..<U1A7C>;<U1A7F>..<U1A89>;/ <U1A90>..<U1A99>;<U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;/ - <U1B50>..<U1B7E>;<U1B80>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;/ - <U1C4D>..<U1C88>;<U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;/ - <U1D00>..<U1F15>;<U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;/ - <U1F50>..<U1F57>;<U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;/ - <U1F80>..<U1FB4>;<U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;/ - <U1FDD>..<U1FEF>;<U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2007>;/ - <U200B>..<U2027>;<U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2071>;/ - <U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;/ - <U2100>..<U218B>;<U2190>..<U2426>;<U2440>..<U244A>;<U2460>..<U2B73>;/ - <U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;/ - <U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;/ - <U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;/ - <U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;/ - <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;/ - <U3001>..<U303F>;<U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;/ - <U3131>..<U318E>;<U3190>..<U31E3>;<U31EF>..<U321E>;<U3220>..<UA48C>;/ - <UA490>..<UA4C6>;<UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA82C>;/ - <UA830>..<UA839>;<UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;/ - <UA8E0>..<UA953>;<UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;/ - <UA9DE>..<UA9FE>;<UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;/ - <UAA5C>..<UAAC2>;<UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;/ - <UAB11>..<UAB16>;<UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;/ - <UAB70>..<UABED>;<UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;/ - <UD7CB>..<UD7FB>;<UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;/ - <UFB13>..<UFB17>;<UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;/ - <UFB40>..<UFB41>;<UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;/ - <UFD92>..<UFDC7>;<UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;/ - <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;/ - <UFEFF>;<UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;/ - <UFFD2>..<UFFD7>;<UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;/ - <UFFF9>..<UFFFD>;<U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ + <U1B4E>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C8A>;/ + <U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;/ + <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ + <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ + <U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;/ + <U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2007>;<U200B>..<U2027>;/ + <U202A>..<U205E>;<U2060>..<U2064>;<U2066>..<U2071>;<U2074>..<U208E>;/ + <U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;<U2100>..<U218B>;/ + <U2190>..<U2429>;<U2440>..<U244A>;<U2460>..<U2B73>;<U2B76>..<U2B95>;/ + <U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;<U2D30>..<U2D67>;/ + <U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;<U2DA8>..<U2DAE>;/ + <U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;<U2DC8>..<U2DCE>;/ + <U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;<U2E80>..<U2E99>;/ + <U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U2FFF>;<U3001>..<U303F>;/ + <U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;/ + <U3190>..<U31E5>;<U31EF>..<U321E>;<U3220>..<UA48C>;<UA490>..<UA4C6>;/ + <UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CD>;<UA7D0>..<UA7D1>;/ + <UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA82C>;<UA830>..<UA839>;/ + <UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;<UA8E0>..<UA953>;/ + <UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;<UA9DE>..<UA9FE>;/ + <UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;<UAA5C>..<UAAC2>;/ + <UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;<UAB11>..<UAB16>;/ + <UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;<UAB70>..<UABED>;/ + <UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;<UD7CB>..<UD7FB>;/ + <UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;<UFB13>..<UFB17>;/ + <UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;<UFB40>..<UFB41>;/ + <UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;<UFD92>..<UFDC7>;/ + <UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;<UFE54>..<UFE66>;/ + <UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;<UFEFF>;/ + <UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;<UFFD2>..<UFFD7>;/ + <UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ + <U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ <U00010028>..<U0001003A>;<U0001003C>..<U0001003D>;/ <U0001003F>..<U0001004D>;<U00010050>..<U0001005D>;/ <U00010080>..<U000100FA>;<U00010100>..<U00010102>;/ @@ -856,94 +877,105 @@ graph / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010857>..<U0001089E>;/ - <U000108A7>..<U000108AF>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U000108FB>..<U0001091B>;/ - <U0001091F>..<U00010939>;<U0001093F>;<U00010980>..<U000109B7>;/ - <U000109BC>..<U000109CF>;<U000109D2>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A38>..<U00010A3A>;<U00010A3F>..<U00010A48>;/ - <U00010A50>..<U00010A58>;<U00010A60>..<U00010A9F>;/ - <U00010AC0>..<U00010AE6>;<U00010AEB>..<U00010AF6>;/ - <U00010B00>..<U00010B35>;<U00010B39>..<U00010B55>;/ - <U00010B58>..<U00010B72>;<U00010B78>..<U00010B91>;/ - <U00010B99>..<U00010B9C>;<U00010BA9>..<U00010BAF>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010CFA>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E60>..<U00010E7E>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010857>..<U0001089E>;<U000108A7>..<U000108AF>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U000108FB>..<U0001091B>;<U0001091F>..<U00010939>;<U0001093F>;/ + <U00010980>..<U000109B7>;<U000109BC>..<U000109CF>;/ + <U000109D2>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A38>..<U00010A3A>;/ + <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ + <U00010A60>..<U00010A9F>;<U00010AC0>..<U00010AE6>;/ + <U00010AEB>..<U00010AF6>;<U00010B00>..<U00010B35>;/ + <U00010B39>..<U00010B55>;<U00010B58>..<U00010B72>;/ + <U00010B78>..<U00010B91>;<U00010B99>..<U00010B9C>;/ + <U00010BA9>..<U00010BAF>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010CFA>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>..<U00010D85>;/ + <U00010D8E>..<U00010D8F>;<U00010E60>..<U00010E7E>;/ <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAD>;/ - <U00010EB0>..<U00010EB1>;<U00010EFD>..<U00010F27>;/ - <U00010F30>..<U00010F59>;<U00010F70>..<U00010F89>;/ - <U00010FB0>..<U00010FCB>;<U00010FE0>..<U00010FF6>;/ - <U00011000>..<U0001104D>;<U00011052>..<U00011075>;/ - <U0001107F>..<U000110C2>;<U000110CD>;<U000110D0>..<U000110E8>;/ - <U000110F0>..<U000110F9>;<U00011100>..<U00011134>;/ - <U00011136>..<U00011147>;<U00011150>..<U00011176>;/ - <U00011180>..<U000111DF>;<U000111E1>..<U000111F4>;/ - <U00011200>..<U00011211>;<U00011213>..<U00011241>;/ - <U00011280>..<U00011286>;<U00011288>;<U0001128A>..<U0001128D>;/ - <U0001128F>..<U0001129D>;<U0001129F>..<U000112A9>;/ - <U000112B0>..<U000112EA>;<U000112F0>..<U000112F9>;/ - <U00011300>..<U00011303>;<U00011305>..<U0001130C>;/ - <U0001130F>..<U00011310>;<U00011313>..<U00011328>;/ - <U0001132A>..<U00011330>;<U00011332>..<U00011333>;/ - <U00011335>..<U00011339>;<U0001133B>..<U00011344>;/ - <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011350>;/ - <U00011357>;<U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011400>..<U0001145B>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;/ + <U00010EFC>..<U00010F27>;<U00010F30>..<U00010F59>;/ + <U00010F70>..<U00010F89>;<U00010FB0>..<U00010FCB>;/ + <U00010FE0>..<U00010FF6>;<U00011000>..<U0001104D>;/ + <U00011052>..<U00011075>;<U0001107F>..<U000110C2>;<U000110CD>;/ + <U000110D0>..<U000110E8>;<U000110F0>..<U000110F9>;/ + <U00011100>..<U00011134>;<U00011136>..<U00011147>;/ + <U00011150>..<U00011176>;<U00011180>..<U000111DF>;/ + <U000111E1>..<U000111F4>;<U00011200>..<U00011211>;/ + <U00011213>..<U00011241>;<U00011280>..<U00011286>;<U00011288>;/ + <U0001128A>..<U0001128D>;<U0001128F>..<U0001129D>;/ + <U0001129F>..<U000112A9>;<U000112B0>..<U000112EA>;/ + <U000112F0>..<U000112F9>;<U00011300>..<U00011303>;/ + <U00011305>..<U0001130C>;<U0001130F>..<U00011310>;/ + <U00011313>..<U00011328>;<U0001132A>..<U00011330>;/ + <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ + <U0001133B>..<U00011344>;<U00011347>..<U00011348>;/ + <U0001134B>..<U0001134D>;<U00011350>;<U00011357>;/ + <U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ + <U00011370>..<U00011374>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113D5>;<U000113D7>..<U000113D8>;/ + <U000113E1>..<U000113E2>;<U00011400>..<U0001145B>;/ <U0001145D>..<U00011461>;<U00011480>..<U000114C7>;/ <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ <U000115B8>..<U000115DD>;<U00011600>..<U00011644>;/ <U00011650>..<U00011659>;<U00011660>..<U0001166C>;/ <U00011680>..<U000116B9>;<U000116C0>..<U000116C9>;/ - <U00011700>..<U0001171A>;<U0001171D>..<U0001172B>;/ - <U00011730>..<U00011746>;<U00011800>..<U0001183B>;/ - <U000118A0>..<U000118F2>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U00011946>;<U00011950>..<U00011959>;/ - <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ - <U000119DA>..<U000119E4>;<U00011A00>..<U00011A47>;/ - <U00011A50>..<U00011AA2>;<U00011AB0>..<U00011AF8>;/ - <U00011B00>..<U00011B09>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C45>;/ - <U00011C50>..<U00011C6C>;<U00011C70>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D47>;<U00011D50>..<U00011D59>;/ - <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ - <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ - <U00011D93>..<U00011D98>;<U00011DA0>..<U00011DA9>;/ - <U00011EE0>..<U00011EF8>;<U00011F00>..<U00011F10>;/ - <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F59>;<U00011FB0>;/ - <U00011FC0>..<U00011FF1>;<U00011FFF>..<U00012399>;/ - <U00012400>..<U0001246E>;<U00012470>..<U00012474>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF2>;/ - <U00013000>..<U00013455>;<U00014400>..<U00014646>;/ - <U00016800>..<U00016A38>;<U00016A40>..<U00016A5E>;/ - <U00016A60>..<U00016A69>;<U00016A6E>..<U00016ABE>;/ - <U00016AC0>..<U00016AC9>;<U00016AD0>..<U00016AED>;/ - <U00016AF0>..<U00016AF5>;<U00016B00>..<U00016B45>;/ - <U00016B50>..<U00016B59>;<U00016B5B>..<U00016B61>;/ - <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U000116D0>..<U000116E3>;<U00011700>..<U0001171A>;/ + <U0001171D>..<U0001172B>;<U00011730>..<U00011746>;/ + <U00011800>..<U0001183B>;<U000118A0>..<U000118F2>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U00011946>;/ + <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ + <U000119AA>..<U000119D7>;<U000119DA>..<U000119E4>;/ + <U00011A00>..<U00011A47>;<U00011A50>..<U00011AA2>;/ + <U00011AB0>..<U00011AF8>;<U00011B00>..<U00011B09>;/ + <U00011BC0>..<U00011BE1>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C45>;<U00011C50>..<U00011C6C>;/ + <U00011C70>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D47>;/ + <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ + <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ + <U00011D90>..<U00011D91>;<U00011D93>..<U00011D98>;/ + <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF8>;/ + <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ + <U00011F3E>..<U00011F5A>;<U00011FB0>;<U00011FC0>..<U00011FF1>;/ + <U00011FFF>..<U00012399>;<U00012400>..<U0001246E>;/ + <U00012470>..<U00012474>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF2>;<U00013000>..<U00013455>;/ + <U00013460>..<U000143FA>;<U00014400>..<U00014646>;/ + <U00016100>..<U00016139>;<U00016800>..<U00016A38>;/ + <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ + <U00016A6E>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ + <U00016AD0>..<U00016AED>;<U00016AF0>..<U00016AF5>;/ + <U00016B00>..<U00016B45>;<U00016B50>..<U00016B59>;/ + <U00016B5B>..<U00016B61>;<U00016B63>..<U00016B77>;/ + <U00016B7D>..<U00016B8F>;<U00016D40>..<U00016D79>;/ <U00016E40>..<U00016E9A>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;/ - <U0001BC9C>..<U0001BCA3>;<U0001CF00>..<U0001CF2D>;/ + <U0001BC9C>..<U0001BCA3>;<U0001CC00>..<U0001CCF9>;/ + <U0001CD00>..<U0001CEB3>;<U0001CF00>..<U0001CF2D>;/ <U0001CF30>..<U0001CF46>;<U0001CF50>..<U0001CFC3>;/ <U0001D000>..<U0001D0F5>;<U0001D100>..<U0001D126>;/ <U0001D129>..<U0001D1EA>;<U0001D200>..<U0001D245>;/ @@ -966,16 +998,16 @@ graph / <U0001E100>..<U0001E12C>;<U0001E130>..<U0001E13D>;/ <U0001E140>..<U0001E149>;<U0001E14E>..<U0001E14F>;/ <U0001E290>..<U0001E2AE>;<U0001E2C0>..<U0001E2F9>;<U0001E2FF>;/ - <U0001E4D0>..<U0001E4F9>;<U0001E7E0>..<U0001E7E6>;/ - <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ - <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ - <U0001E8C7>..<U0001E8D6>;<U0001E900>..<U0001E94B>;/ - <U0001E950>..<U0001E959>;<U0001E95E>..<U0001E95F>;/ - <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ - <U0001EE00>..<U0001EE03>;<U0001EE05>..<U0001EE1F>;/ - <U0001EE21>..<U0001EE22>;<U0001EE24>;<U0001EE27>;/ - <U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;<U0001EE39>;/ - <U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ + <U0001E4D0>..<U0001E4F9>;<U0001E5D0>..<U0001E5FA>;<U0001E5FF>;/ + <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ + <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ + <U0001E800>..<U0001E8C4>;<U0001E8C7>..<U0001E8D6>;/ + <U0001E900>..<U0001E94B>;<U0001E950>..<U0001E959>;/ + <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ + <U0001ED01>..<U0001ED3D>;<U0001EE00>..<U0001EE03>;/ + <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ + <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ + <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ <U0001EE4D>..<U0001EE4F>;<U0001EE51>..<U0001EE52>;<U0001EE54>;/ <U0001EE57>;<U0001EE59>;<U0001EE5B>;<U0001EE5D>;<U0001EE5F>;/ <U0001EE61>..<U0001EE62>;<U0001EE64>;<U0001EE67>..<U0001EE6A>;/ @@ -995,19 +1027,19 @@ graph / <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ - <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;/ - <U0001FBF0>..<U0001FBF9>;<U00020000>..<U0002A6DF>;/ - <U0002A700>..<U0002B739>;<U0002B740>..<U0002B81D>;/ - <U0002B820>..<U0002CEA1>;<U0002CEB0>..<U0002EBE0>;/ - <U0002EBF0>..<U0002EE5D>;<U0002F800>..<U0002FA1D>;/ - <U00030000>..<U0003134A>;<U00031350>..<U000323AF>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001F8B0>..<U0001F8BB>;<U0001F8C0>..<U0001F8C1>;/ + <U0001F900>..<U0001FA53>;<U0001FA60>..<U0001FA6D>;/ + <U0001FA70>..<U0001FA7C>;<U0001FA80>..<U0001FA89>;/ + <U0001FA8F>..<U0001FAC6>;<U0001FACE>..<U0001FADC>;/ + <U0001FADF>..<U0001FAE9>;<U0001FAF0>..<U0001FAF8>;/ + <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBF9>;/ + <U00020000>..<U0002A6DF>;<U0002A700>..<U0002B739>;/ + <U0002B740>..<U0002B81D>;<U0002B820>..<U0002CEA1>;/ + <U0002CEB0>..<U0002EBE0>;<U0002EBF0>..<U0002EE5D>;/ + <U0002F800>..<U0002FA1D>;<U00030000>..<U0003134A>;/ + <U00031350>..<U000323AF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> print / <U0020>..<U007E>;<U00A0>..<U0377>;<U037A>..<U037F>;<U0384>..<U038A>;/ @@ -1016,7 +1048,7 @@ print / <U05EF>..<U05F4>;<U0600>..<U070D>;<U070F>..<U074A>;<U074D>..<U07B1>;/ <U07C0>..<U07FA>;<U07FD>..<U082D>;<U0830>..<U083E>;<U0840>..<U085B>;/ <U085E>;<U0860>..<U086A>;<U0870>..<U088E>;<U0890>..<U0891>;/ - <U0898>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ + <U0897>..<U0983>;<U0985>..<U098C>;<U098F>..<U0990>;<U0993>..<U09A8>;/ <U09AA>..<U09B0>;<U09B2>;<U09B6>..<U09B9>;<U09BC>..<U09C4>;/ <U09C7>..<U09C8>;<U09CB>..<U09CE>;<U09D7>;<U09DC>..<U09DD>;/ <U09DF>..<U09E3>;<U09E6>..<U09FE>;<U0A01>..<U0A03>;<U0A05>..<U0A0A>;/ @@ -1062,38 +1094,38 @@ print / <U1930>..<U193B>;<U1940>;<U1944>..<U196D>;<U1970>..<U1974>;/ <U1980>..<U19AB>;<U19B0>..<U19C9>;<U19D0>..<U19DA>;<U19DE>..<U1A1B>;/ <U1A1E>..<U1A5E>;<U1A60>..<U1A7C>;<U1A7F>..<U1A89>;<U1A90>..<U1A99>;/ - <U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;<U1B50>..<U1B7E>;/ - <U1B80>..<U1BF3>;<U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C88>;/ - <U1C90>..<U1CBA>;<U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;/ - <U1F18>..<U1F1D>;<U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;/ - <U1F59>;<U1F5B>;<U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;/ - <U1FB6>..<U1FC4>;<U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;/ - <U1FF2>..<U1FF4>;<U1FF6>..<U1FFE>;<U2000>..<U2027>;<U202A>..<U2064>;/ - <U2066>..<U2071>;<U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;/ - <U20D0>..<U20F0>;<U2100>..<U218B>;<U2190>..<U2426>;<U2440>..<U244A>;/ - <U2460>..<U2B73>;<U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;/ - <U2D27>;<U2D2D>;<U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;/ - <U2DA0>..<U2DA6>;<U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;/ - <U2DC0>..<U2DC6>;<U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;/ - <U2DE0>..<U2E5D>;<U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;/ - <U2FF0>..<U303F>;<U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;/ - <U3131>..<U318E>;<U3190>..<U31E3>;<U31EF>..<U321E>;<U3220>..<UA48C>;/ - <UA490>..<UA4C6>;<UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CA>;/ - <UA7D0>..<UA7D1>;<UA7D3>;<UA7D5>..<UA7D9>;<UA7F2>..<UA82C>;/ - <UA830>..<UA839>;<UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;/ - <UA8E0>..<UA953>;<UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;/ - <UA9DE>..<UA9FE>;<UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;/ - <UAA5C>..<UAAC2>;<UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;/ - <UAB11>..<UAB16>;<UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;/ - <UAB70>..<UABED>;<UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;/ - <UD7CB>..<UD7FB>;<UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;/ - <UFB13>..<UFB17>;<UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;/ - <UFB40>..<UFB41>;<UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;/ - <UFD92>..<UFDC7>;<UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;/ - <UFE54>..<UFE66>;<UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;/ - <UFEFF>;<UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;/ - <UFFD2>..<UFFD7>;<UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;/ - <UFFF9>..<UFFFD>;<U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ + <U1AA0>..<U1AAD>;<U1AB0>..<U1ACE>;<U1B00>..<U1B4C>;<U1B4E>..<U1BF3>;/ + <U1BFC>..<U1C37>;<U1C3B>..<U1C49>;<U1C4D>..<U1C8A>;<U1C90>..<U1CBA>;/ + <U1CBD>..<U1CC7>;<U1CD0>..<U1CFA>;<U1D00>..<U1F15>;<U1F18>..<U1F1D>;/ + <U1F20>..<U1F45>;<U1F48>..<U1F4D>;<U1F50>..<U1F57>;<U1F59>;<U1F5B>;/ + <U1F5D>;<U1F5F>..<U1F7D>;<U1F80>..<U1FB4>;<U1FB6>..<U1FC4>;/ + <U1FC6>..<U1FD3>;<U1FD6>..<U1FDB>;<U1FDD>..<U1FEF>;<U1FF2>..<U1FF4>;/ + <U1FF6>..<U1FFE>;<U2000>..<U2027>;<U202A>..<U2064>;<U2066>..<U2071>;/ + <U2074>..<U208E>;<U2090>..<U209C>;<U20A0>..<U20C0>;<U20D0>..<U20F0>;/ + <U2100>..<U218B>;<U2190>..<U2429>;<U2440>..<U244A>;<U2460>..<U2B73>;/ + <U2B76>..<U2B95>;<U2B97>..<U2CF3>;<U2CF9>..<U2D25>;<U2D27>;<U2D2D>;/ + <U2D30>..<U2D67>;<U2D6F>..<U2D70>;<U2D7F>..<U2D96>;<U2DA0>..<U2DA6>;/ + <U2DA8>..<U2DAE>;<U2DB0>..<U2DB6>;<U2DB8>..<U2DBE>;<U2DC0>..<U2DC6>;/ + <U2DC8>..<U2DCE>;<U2DD0>..<U2DD6>;<U2DD8>..<U2DDE>;<U2DE0>..<U2E5D>;/ + <U2E80>..<U2E99>;<U2E9B>..<U2EF3>;<U2F00>..<U2FD5>;<U2FF0>..<U303F>;/ + <U3041>..<U3096>;<U3099>..<U30FF>;<U3105>..<U312F>;<U3131>..<U318E>;/ + <U3190>..<U31E5>;<U31EF>..<U321E>;<U3220>..<UA48C>;<UA490>..<UA4C6>;/ + <UA4D0>..<UA62B>;<UA640>..<UA6F7>;<UA700>..<UA7CD>;<UA7D0>..<UA7D1>;/ + <UA7D3>;<UA7D5>..<UA7DC>;<UA7F2>..<UA82C>;<UA830>..<UA839>;/ + <UA840>..<UA877>;<UA880>..<UA8C5>;<UA8CE>..<UA8D9>;<UA8E0>..<UA953>;/ + <UA95F>..<UA97C>;<UA980>..<UA9CD>;<UA9CF>..<UA9D9>;<UA9DE>..<UA9FE>;/ + <UAA00>..<UAA36>;<UAA40>..<UAA4D>;<UAA50>..<UAA59>;<UAA5C>..<UAAC2>;/ + <UAADB>..<UAAF6>;<UAB01>..<UAB06>;<UAB09>..<UAB0E>;<UAB11>..<UAB16>;/ + <UAB20>..<UAB26>;<UAB28>..<UAB2E>;<UAB30>..<UAB6B>;<UAB70>..<UABED>;/ + <UABF0>..<UABF9>;<UAC00>..<UD7A3>;<UD7B0>..<UD7C6>;<UD7CB>..<UD7FB>;/ + <UE000>..<UFA6D>;<UFA70>..<UFAD9>;<UFB00>..<UFB06>;<UFB13>..<UFB17>;/ + <UFB1D>..<UFB36>;<UFB38>..<UFB3C>;<UFB3E>;<UFB40>..<UFB41>;/ + <UFB43>..<UFB44>;<UFB46>..<UFBC2>;<UFBD3>..<UFD8F>;<UFD92>..<UFDC7>;/ + <UFDCF>;<UFDF0>..<UFE19>;<UFE20>..<UFE52>;<UFE54>..<UFE66>;/ + <UFE68>..<UFE6B>;<UFE70>..<UFE74>;<UFE76>..<UFEFC>;<UFEFF>;/ + <UFF01>..<UFFBE>;<UFFC2>..<UFFC7>;<UFFCA>..<UFFCF>;<UFFD2>..<UFFD7>;/ + <UFFDA>..<UFFDC>;<UFFE0>..<UFFE6>;<UFFE8>..<UFFEE>;<UFFF9>..<UFFFD>;/ + <U00010000>..<U0001000B>;<U0001000D>..<U00010026>;/ <U00010028>..<U0001003A>;<U0001003C>..<U0001003D>;/ <U0001003F>..<U0001004D>;<U00010050>..<U0001005D>;/ <U00010080>..<U000100FA>;<U00010100>..<U00010102>;/ @@ -1110,94 +1142,105 @@ print / <U0001057C>..<U0001058A>;<U0001058C>..<U00010592>;/ <U00010594>..<U00010595>;<U00010597>..<U000105A1>;/ <U000105A3>..<U000105B1>;<U000105B3>..<U000105B9>;/ - <U000105BB>..<U000105BC>;<U00010600>..<U00010736>;/ - <U00010740>..<U00010755>;<U00010760>..<U00010767>;/ - <U00010780>..<U00010785>;<U00010787>..<U000107B0>;/ - <U000107B2>..<U000107BA>;<U00010800>..<U00010805>;<U00010808>;/ - <U0001080A>..<U00010835>;<U00010837>..<U00010838>;<U0001083C>;/ - <U0001083F>..<U00010855>;<U00010857>..<U0001089E>;/ - <U000108A7>..<U000108AF>;<U000108E0>..<U000108F2>;/ - <U000108F4>..<U000108F5>;<U000108FB>..<U0001091B>;/ - <U0001091F>..<U00010939>;<U0001093F>;<U00010980>..<U000109B7>;/ - <U000109BC>..<U000109CF>;<U000109D2>..<U00010A03>;/ - <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A13>;/ - <U00010A15>..<U00010A17>;<U00010A19>..<U00010A35>;/ - <U00010A38>..<U00010A3A>;<U00010A3F>..<U00010A48>;/ - <U00010A50>..<U00010A58>;<U00010A60>..<U00010A9F>;/ - <U00010AC0>..<U00010AE6>;<U00010AEB>..<U00010AF6>;/ - <U00010B00>..<U00010B35>;<U00010B39>..<U00010B55>;/ - <U00010B58>..<U00010B72>;<U00010B78>..<U00010B91>;/ - <U00010B99>..<U00010B9C>;<U00010BA9>..<U00010BAF>;/ - <U00010C00>..<U00010C48>;<U00010C80>..<U00010CB2>;/ - <U00010CC0>..<U00010CF2>;<U00010CFA>..<U00010D27>;/ - <U00010D30>..<U00010D39>;<U00010E60>..<U00010E7E>;/ + <U000105BB>..<U000105BC>;<U000105C0>..<U000105F3>;/ + <U00010600>..<U00010736>;<U00010740>..<U00010755>;/ + <U00010760>..<U00010767>;<U00010780>..<U00010785>;/ + <U00010787>..<U000107B0>;<U000107B2>..<U000107BA>;/ + <U00010800>..<U00010805>;<U00010808>;<U0001080A>..<U00010835>;/ + <U00010837>..<U00010838>;<U0001083C>;<U0001083F>..<U00010855>;/ + <U00010857>..<U0001089E>;<U000108A7>..<U000108AF>;/ + <U000108E0>..<U000108F2>;<U000108F4>..<U000108F5>;/ + <U000108FB>..<U0001091B>;<U0001091F>..<U00010939>;<U0001093F>;/ + <U00010980>..<U000109B7>;<U000109BC>..<U000109CF>;/ + <U000109D2>..<U00010A03>;<U00010A05>..<U00010A06>;/ + <U00010A0C>..<U00010A13>;<U00010A15>..<U00010A17>;/ + <U00010A19>..<U00010A35>;<U00010A38>..<U00010A3A>;/ + <U00010A3F>..<U00010A48>;<U00010A50>..<U00010A58>;/ + <U00010A60>..<U00010A9F>;<U00010AC0>..<U00010AE6>;/ + <U00010AEB>..<U00010AF6>;<U00010B00>..<U00010B35>;/ + <U00010B39>..<U00010B55>;<U00010B58>..<U00010B72>;/ + <U00010B78>..<U00010B91>;<U00010B99>..<U00010B9C>;/ + <U00010BA9>..<U00010BAF>;<U00010C00>..<U00010C48>;/ + <U00010C80>..<U00010CB2>;<U00010CC0>..<U00010CF2>;/ + <U00010CFA>..<U00010D27>;<U00010D30>..<U00010D39>;/ + <U00010D40>..<U00010D65>;<U00010D69>..<U00010D85>;/ + <U00010D8E>..<U00010D8F>;<U00010E60>..<U00010E7E>;/ <U00010E80>..<U00010EA9>;<U00010EAB>..<U00010EAD>;/ - <U00010EB0>..<U00010EB1>;<U00010EFD>..<U00010F27>;/ - <U00010F30>..<U00010F59>;<U00010F70>..<U00010F89>;/ - <U00010FB0>..<U00010FCB>;<U00010FE0>..<U00010FF6>;/ - <U00011000>..<U0001104D>;<U00011052>..<U00011075>;/ - <U0001107F>..<U000110C2>;<U000110CD>;<U000110D0>..<U000110E8>;/ - <U000110F0>..<U000110F9>;<U00011100>..<U00011134>;/ - <U00011136>..<U00011147>;<U00011150>..<U00011176>;/ - <U00011180>..<U000111DF>;<U000111E1>..<U000111F4>;/ - <U00011200>..<U00011211>;<U00011213>..<U00011241>;/ - <U00011280>..<U00011286>;<U00011288>;<U0001128A>..<U0001128D>;/ - <U0001128F>..<U0001129D>;<U0001129F>..<U000112A9>;/ - <U000112B0>..<U000112EA>;<U000112F0>..<U000112F9>;/ - <U00011300>..<U00011303>;<U00011305>..<U0001130C>;/ - <U0001130F>..<U00011310>;<U00011313>..<U00011328>;/ - <U0001132A>..<U00011330>;<U00011332>..<U00011333>;/ - <U00011335>..<U00011339>;<U0001133B>..<U00011344>;/ - <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011350>;/ - <U00011357>;<U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011400>..<U0001145B>;/ + <U00010EB0>..<U00010EB1>;<U00010EC2>..<U00010EC4>;/ + <U00010EFC>..<U00010F27>;<U00010F30>..<U00010F59>;/ + <U00010F70>..<U00010F89>;<U00010FB0>..<U00010FCB>;/ + <U00010FE0>..<U00010FF6>;<U00011000>..<U0001104D>;/ + <U00011052>..<U00011075>;<U0001107F>..<U000110C2>;<U000110CD>;/ + <U000110D0>..<U000110E8>;<U000110F0>..<U000110F9>;/ + <U00011100>..<U00011134>;<U00011136>..<U00011147>;/ + <U00011150>..<U00011176>;<U00011180>..<U000111DF>;/ + <U000111E1>..<U000111F4>;<U00011200>..<U00011211>;/ + <U00011213>..<U00011241>;<U00011280>..<U00011286>;<U00011288>;/ + <U0001128A>..<U0001128D>;<U0001128F>..<U0001129D>;/ + <U0001129F>..<U000112A9>;<U000112B0>..<U000112EA>;/ + <U000112F0>..<U000112F9>;<U00011300>..<U00011303>;/ + <U00011305>..<U0001130C>;<U0001130F>..<U00011310>;/ + <U00011313>..<U00011328>;<U0001132A>..<U00011330>;/ + <U00011332>..<U00011333>;<U00011335>..<U00011339>;/ + <U0001133B>..<U00011344>;<U00011347>..<U00011348>;/ + <U0001134B>..<U0001134D>;<U00011350>;<U00011357>;/ + <U0001135D>..<U00011363>;<U00011366>..<U0001136C>;/ + <U00011370>..<U00011374>;<U00011380>..<U00011389>;<U0001138B>;/ + <U0001138E>;<U00011390>..<U000113B5>;<U000113B7>..<U000113C0>;/ + <U000113C2>;<U000113C5>;<U000113C7>..<U000113CA>;/ + <U000113CC>..<U000113D5>;<U000113D7>..<U000113D8>;/ + <U000113E1>..<U000113E2>;<U00011400>..<U0001145B>;/ <U0001145D>..<U00011461>;<U00011480>..<U000114C7>;/ <U000114D0>..<U000114D9>;<U00011580>..<U000115B5>;/ <U000115B8>..<U000115DD>;<U00011600>..<U00011644>;/ <U00011650>..<U00011659>;<U00011660>..<U0001166C>;/ <U00011680>..<U000116B9>;<U000116C0>..<U000116C9>;/ - <U00011700>..<U0001171A>;<U0001171D>..<U0001172B>;/ - <U00011730>..<U00011746>;<U00011800>..<U0001183B>;/ - <U000118A0>..<U000118F2>;<U000118FF>..<U00011906>;<U00011909>;/ - <U0001190C>..<U00011913>;<U00011915>..<U00011916>;/ - <U00011918>..<U00011935>;<U00011937>..<U00011938>;/ - <U0001193B>..<U00011946>;<U00011950>..<U00011959>;/ - <U000119A0>..<U000119A7>;<U000119AA>..<U000119D7>;/ - <U000119DA>..<U000119E4>;<U00011A00>..<U00011A47>;/ - <U00011A50>..<U00011AA2>;<U00011AB0>..<U00011AF8>;/ - <U00011B00>..<U00011B09>;<U00011C00>..<U00011C08>;/ - <U00011C0A>..<U00011C36>;<U00011C38>..<U00011C45>;/ - <U00011C50>..<U00011C6C>;<U00011C70>..<U00011C8F>;/ - <U00011C92>..<U00011CA7>;<U00011CA9>..<U00011CB6>;/ - <U00011D00>..<U00011D06>;<U00011D08>..<U00011D09>;/ - <U00011D0B>..<U00011D36>;<U00011D3A>;<U00011D3C>..<U00011D3D>;/ - <U00011D3F>..<U00011D47>;<U00011D50>..<U00011D59>;/ - <U00011D60>..<U00011D65>;<U00011D67>..<U00011D68>;/ - <U00011D6A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ - <U00011D93>..<U00011D98>;<U00011DA0>..<U00011DA9>;/ - <U00011EE0>..<U00011EF8>;<U00011F00>..<U00011F10>;/ - <U00011F12>..<U00011F3A>;<U00011F3E>..<U00011F59>;<U00011FB0>;/ - <U00011FC0>..<U00011FF1>;<U00011FFF>..<U00012399>;/ - <U00012400>..<U0001246E>;<U00012470>..<U00012474>;/ - <U00012480>..<U00012543>;<U00012F90>..<U00012FF2>;/ - <U00013000>..<U00013455>;<U00014400>..<U00014646>;/ - <U00016800>..<U00016A38>;<U00016A40>..<U00016A5E>;/ - <U00016A60>..<U00016A69>;<U00016A6E>..<U00016ABE>;/ - <U00016AC0>..<U00016AC9>;<U00016AD0>..<U00016AED>;/ - <U00016AF0>..<U00016AF5>;<U00016B00>..<U00016B45>;/ - <U00016B50>..<U00016B59>;<U00016B5B>..<U00016B61>;/ - <U00016B63>..<U00016B77>;<U00016B7D>..<U00016B8F>;/ + <U000116D0>..<U000116E3>;<U00011700>..<U0001171A>;/ + <U0001171D>..<U0001172B>;<U00011730>..<U00011746>;/ + <U00011800>..<U0001183B>;<U000118A0>..<U000118F2>;/ + <U000118FF>..<U00011906>;<U00011909>;<U0001190C>..<U00011913>;/ + <U00011915>..<U00011916>;<U00011918>..<U00011935>;/ + <U00011937>..<U00011938>;<U0001193B>..<U00011946>;/ + <U00011950>..<U00011959>;<U000119A0>..<U000119A7>;/ + <U000119AA>..<U000119D7>;<U000119DA>..<U000119E4>;/ + <U00011A00>..<U00011A47>;<U00011A50>..<U00011AA2>;/ + <U00011AB0>..<U00011AF8>;<U00011B00>..<U00011B09>;/ + <U00011BC0>..<U00011BE1>;<U00011BF0>..<U00011BF9>;/ + <U00011C00>..<U00011C08>;<U00011C0A>..<U00011C36>;/ + <U00011C38>..<U00011C45>;<U00011C50>..<U00011C6C>;/ + <U00011C70>..<U00011C8F>;<U00011C92>..<U00011CA7>;/ + <U00011CA9>..<U00011CB6>;<U00011D00>..<U00011D06>;/ + <U00011D08>..<U00011D09>;<U00011D0B>..<U00011D36>;<U00011D3A>;/ + <U00011D3C>..<U00011D3D>;<U00011D3F>..<U00011D47>;/ + <U00011D50>..<U00011D59>;<U00011D60>..<U00011D65>;/ + <U00011D67>..<U00011D68>;<U00011D6A>..<U00011D8E>;/ + <U00011D90>..<U00011D91>;<U00011D93>..<U00011D98>;/ + <U00011DA0>..<U00011DA9>;<U00011EE0>..<U00011EF8>;/ + <U00011F00>..<U00011F10>;<U00011F12>..<U00011F3A>;/ + <U00011F3E>..<U00011F5A>;<U00011FB0>;<U00011FC0>..<U00011FF1>;/ + <U00011FFF>..<U00012399>;<U00012400>..<U0001246E>;/ + <U00012470>..<U00012474>;<U00012480>..<U00012543>;/ + <U00012F90>..<U00012FF2>;<U00013000>..<U00013455>;/ + <U00013460>..<U000143FA>;<U00014400>..<U00014646>;/ + <U00016100>..<U00016139>;<U00016800>..<U00016A38>;/ + <U00016A40>..<U00016A5E>;<U00016A60>..<U00016A69>;/ + <U00016A6E>..<U00016ABE>;<U00016AC0>..<U00016AC9>;/ + <U00016AD0>..<U00016AED>;<U00016AF0>..<U00016AF5>;/ + <U00016B00>..<U00016B45>;<U00016B50>..<U00016B59>;/ + <U00016B5B>..<U00016B61>;<U00016B63>..<U00016B77>;/ + <U00016B7D>..<U00016B8F>;<U00016D40>..<U00016D79>;/ <U00016E40>..<U00016E9A>;<U00016F00>..<U00016F4A>;/ <U00016F4F>..<U00016F87>;<U00016F8F>..<U00016F9F>;/ <U00016FE0>..<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U00017000>..<U000187F7>;<U00018800>..<U00018CD5>;/ - <U00018D00>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ + <U00018CFF>..<U00018D08>;<U0001AFF0>..<U0001AFF3>;/ <U0001AFF5>..<U0001AFFB>;<U0001AFFD>..<U0001AFFE>;/ <U0001B000>..<U0001B122>;<U0001B132>;<U0001B150>..<U0001B152>;/ <U0001B155>;<U0001B164>..<U0001B167>;<U0001B170>..<U0001B2FB>;/ <U0001BC00>..<U0001BC6A>;<U0001BC70>..<U0001BC7C>;/ <U0001BC80>..<U0001BC88>;<U0001BC90>..<U0001BC99>;/ - <U0001BC9C>..<U0001BCA3>;<U0001CF00>..<U0001CF2D>;/ + <U0001BC9C>..<U0001BCA3>;<U0001CC00>..<U0001CCF9>;/ + <U0001CD00>..<U0001CEB3>;<U0001CF00>..<U0001CF2D>;/ <U0001CF30>..<U0001CF46>;<U0001CF50>..<U0001CFC3>;/ <U0001D000>..<U0001D0F5>;<U0001D100>..<U0001D126>;/ <U0001D129>..<U0001D1EA>;<U0001D200>..<U0001D245>;/ @@ -1220,16 +1263,16 @@ print / <U0001E100>..<U0001E12C>;<U0001E130>..<U0001E13D>;/ <U0001E140>..<U0001E149>;<U0001E14E>..<U0001E14F>;/ <U0001E290>..<U0001E2AE>;<U0001E2C0>..<U0001E2F9>;<U0001E2FF>;/ - <U0001E4D0>..<U0001E4F9>;<U0001E7E0>..<U0001E7E6>;/ - <U0001E7E8>..<U0001E7EB>;<U0001E7ED>..<U0001E7EE>;/ - <U0001E7F0>..<U0001E7FE>;<U0001E800>..<U0001E8C4>;/ - <U0001E8C7>..<U0001E8D6>;<U0001E900>..<U0001E94B>;/ - <U0001E950>..<U0001E959>;<U0001E95E>..<U0001E95F>;/ - <U0001EC71>..<U0001ECB4>;<U0001ED01>..<U0001ED3D>;/ - <U0001EE00>..<U0001EE03>;<U0001EE05>..<U0001EE1F>;/ - <U0001EE21>..<U0001EE22>;<U0001EE24>;<U0001EE27>;/ - <U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;<U0001EE39>;/ - <U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ + <U0001E4D0>..<U0001E4F9>;<U0001E5D0>..<U0001E5FA>;<U0001E5FF>;/ + <U0001E7E0>..<U0001E7E6>;<U0001E7E8>..<U0001E7EB>;/ + <U0001E7ED>..<U0001E7EE>;<U0001E7F0>..<U0001E7FE>;/ + <U0001E800>..<U0001E8C4>;<U0001E8C7>..<U0001E8D6>;/ + <U0001E900>..<U0001E94B>;<U0001E950>..<U0001E959>;/ + <U0001E95E>..<U0001E95F>;<U0001EC71>..<U0001ECB4>;/ + <U0001ED01>..<U0001ED3D>;<U0001EE00>..<U0001EE03>;/ + <U0001EE05>..<U0001EE1F>;<U0001EE21>..<U0001EE22>;<U0001EE24>;/ + <U0001EE27>;<U0001EE29>..<U0001EE32>;<U0001EE34>..<U0001EE37>;/ + <U0001EE39>;<U0001EE3B>;<U0001EE42>;<U0001EE47>;<U0001EE49>;<U0001EE4B>;/ <U0001EE4D>..<U0001EE4F>;<U0001EE51>..<U0001EE52>;<U0001EE54>;/ <U0001EE57>;<U0001EE59>;<U0001EE5B>;<U0001EE5D>;<U0001EE5F>;/ <U0001EE61>..<U0001EE62>;<U0001EE64>;<U0001EE67>..<U0001EE6A>;/ @@ -1249,19 +1292,19 @@ print / <U0001F7E0>..<U0001F7EB>;<U0001F7F0>;<U0001F800>..<U0001F80B>;/ <U0001F810>..<U0001F847>;<U0001F850>..<U0001F859>;/ <U0001F860>..<U0001F887>;<U0001F890>..<U0001F8AD>;/ - <U0001F8B0>..<U0001F8B1>;<U0001F900>..<U0001FA53>;/ - <U0001FA60>..<U0001FA6D>;<U0001FA70>..<U0001FA7C>;/ - <U0001FA80>..<U0001FA88>;<U0001FA90>..<U0001FABD>;/ - <U0001FABF>..<U0001FAC5>;<U0001FACE>..<U0001FADB>;/ - <U0001FAE0>..<U0001FAE8>;<U0001FAF0>..<U0001FAF8>;/ - <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBCA>;/ - <U0001FBF0>..<U0001FBF9>;<U00020000>..<U0002A6DF>;/ - <U0002A700>..<U0002B739>;<U0002B740>..<U0002B81D>;/ - <U0002B820>..<U0002CEA1>;<U0002CEB0>..<U0002EBE0>;/ - <U0002EBF0>..<U0002EE5D>;<U0002F800>..<U0002FA1D>;/ - <U00030000>..<U0003134A>;<U00031350>..<U000323AF>;<U000E0001>;/ - <U000E0020>..<U000E007F>;<U000E0100>..<U000E01EF>;/ - <U000F0000>..<U000FFFFD>;<U00100000>..<U0010FFFD> + <U0001F8B0>..<U0001F8BB>;<U0001F8C0>..<U0001F8C1>;/ + <U0001F900>..<U0001FA53>;<U0001FA60>..<U0001FA6D>;/ + <U0001FA70>..<U0001FA7C>;<U0001FA80>..<U0001FA89>;/ + <U0001FA8F>..<U0001FAC6>;<U0001FACE>..<U0001FADC>;/ + <U0001FADF>..<U0001FAE9>;<U0001FAF0>..<U0001FAF8>;/ + <U0001FB00>..<U0001FB92>;<U0001FB94>..<U0001FBF9>;/ + <U00020000>..<U0002A6DF>;<U0002A700>..<U0002B739>;/ + <U0002B740>..<U0002B81D>;<U0002B820>..<U0002CEA1>;/ + <U0002CEB0>..<U0002EBE0>;<U0002EBF0>..<U0002EE5D>;/ + <U0002F800>..<U0002FA1D>;<U00030000>..<U0003134A>;/ + <U00031350>..<U000323AF>;<U000E0001>;<U000E0020>..<U000E007F>;/ + <U000E0100>..<U000E01EF>;<U000F0000>..<U000FFFFD>;/ + <U00100000>..<U0010FFFD> % The "xdigit" class must only contain the BASIC LATIN digits and A-F, a-f, % says ISO C 99 (sections 7.25.2.1.12 and 6.4.4.1). @@ -1306,402 +1349,414 @@ toupper / (<U0177>,<U0176>);(<U017A>,<U0179>);(<U017C>,<U017B>);(<U017E>,<U017D>);/ (<U017F>,<U0053>);(<U0180>,<U0243>);(<U0183>,<U0182>);(<U0185>,<U0184>);/ (<U0188>,<U0187>);(<U018C>,<U018B>);(<U0192>,<U0191>);(<U0195>,<U01F6>);/ - (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019E>,<U0220>);(<U01A1>,<U01A0>);/ - (<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);(<U01AD>,<U01AC>);/ - (<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);(<U01B9>,<U01B8>);/ - (<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C5>,<U01C4>);(<U01C6>,<U01C4>);/ - (<U01C8>,<U01C7>);(<U01C9>,<U01C7>);(<U01CB>,<U01CA>);(<U01CC>,<U01CA>);/ - (<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);(<U01D4>,<U01D3>);/ - (<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);(<U01DC>,<U01DB>);/ - (<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);(<U01E3>,<U01E2>);/ - (<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);(<U01EB>,<U01EA>);/ - (<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F2>,<U01F1>);(<U01F3>,<U01F1>);/ - (<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);(<U01FD>,<U01FC>);/ - (<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);(<U0205>,<U0204>);/ - (<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);(<U020D>,<U020C>);/ - (<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);(<U0215>,<U0214>);/ - (<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);(<U021D>,<U021C>);/ - (<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);(<U0227>,<U0226>);/ - (<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);(<U022F>,<U022E>);/ - (<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);(<U023F>,<U2C7E>);/ - (<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);(<U0249>,<U0248>);/ - (<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);(<U0250>,<U2C6F>);/ - (<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);(<U0254>,<U0186>);/ - (<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);(<U025B>,<U0190>);/ - (<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);(<U0263>,<U0194>);/ - (<U0265>,<UA78D>);(<U0266>,<UA7AA>);(<U0268>,<U0197>);(<U0269>,<U0196>);/ - (<U026A>,<UA7AE>);(<U026B>,<U2C62>);(<U026C>,<UA7AD>);(<U026F>,<U019C>);/ - (<U0271>,<U2C6E>);(<U0272>,<U019D>);(<U0275>,<U019F>);(<U027D>,<U2C64>);/ - (<U0280>,<U01A6>);(<U0282>,<UA7C5>);(<U0283>,<U01A9>);(<U0287>,<UA7B1>);/ - (<U0288>,<U01AE>);(<U0289>,<U0244>);(<U028A>,<U01B1>);(<U028B>,<U01B2>);/ - (<U028C>,<U0245>);(<U0292>,<U01B7>);(<U029D>,<UA7B2>);(<U029E>,<UA7B0>);/ - (<U0345>,<U0399>);(<U0371>,<U0370>);(<U0373>,<U0372>);(<U0377>,<U0376>);/ - (<U037B>,<U03FD>);(<U037C>,<U03FE>);(<U037D>,<U03FF>);(<U03AC>,<U0386>);/ - (<U03AD>,<U0388>);(<U03AE>,<U0389>);(<U03AF>,<U038A>);(<U03B1>,<U0391>);/ - (<U03B2>,<U0392>);(<U03B3>,<U0393>);(<U03B4>,<U0394>);(<U03B5>,<U0395>);/ - (<U03B6>,<U0396>);(<U03B7>,<U0397>);(<U03B8>,<U0398>);(<U03B9>,<U0399>);/ - (<U03BA>,<U039A>);(<U03BB>,<U039B>);(<U03BC>,<U039C>);(<U03BD>,<U039D>);/ - (<U03BE>,<U039E>);(<U03BF>,<U039F>);(<U03C0>,<U03A0>);(<U03C1>,<U03A1>);/ - (<U03C2>,<U03A3>);(<U03C3>,<U03A3>);(<U03C4>,<U03A4>);(<U03C5>,<U03A5>);/ - (<U03C6>,<U03A6>);(<U03C7>,<U03A7>);(<U03C8>,<U03A8>);(<U03C9>,<U03A9>);/ - (<U03CA>,<U03AA>);(<U03CB>,<U03AB>);(<U03CC>,<U038C>);(<U03CD>,<U038E>);/ - (<U03CE>,<U038F>);(<U03D0>,<U0392>);(<U03D1>,<U0398>);(<U03D5>,<U03A6>);/ - (<U03D6>,<U03A0>);(<U03D7>,<U03CF>);(<U03D9>,<U03D8>);(<U03DB>,<U03DA>);/ - (<U03DD>,<U03DC>);(<U03DF>,<U03DE>);(<U03E1>,<U03E0>);(<U03E3>,<U03E2>);/ - (<U03E5>,<U03E4>);(<U03E7>,<U03E6>);(<U03E9>,<U03E8>);(<U03EB>,<U03EA>);/ - (<U03ED>,<U03EC>);(<U03EF>,<U03EE>);(<U03F0>,<U039A>);(<U03F1>,<U03A1>);/ - (<U03F2>,<U03F9>);(<U03F3>,<U037F>);(<U03F5>,<U0395>);(<U03F8>,<U03F7>);/ - (<U03FB>,<U03FA>);(<U0430>,<U0410>);(<U0431>,<U0411>);(<U0432>,<U0412>);/ - (<U0433>,<U0413>);(<U0434>,<U0414>);(<U0435>,<U0415>);(<U0436>,<U0416>);/ - (<U0437>,<U0417>);(<U0438>,<U0418>);(<U0439>,<U0419>);(<U043A>,<U041A>);/ - (<U043B>,<U041B>);(<U043C>,<U041C>);(<U043D>,<U041D>);(<U043E>,<U041E>);/ - (<U043F>,<U041F>);(<U0440>,<U0420>);(<U0441>,<U0421>);(<U0442>,<U0422>);/ - (<U0443>,<U0423>);(<U0444>,<U0424>);(<U0445>,<U0425>);(<U0446>,<U0426>);/ - (<U0447>,<U0427>);(<U0448>,<U0428>);(<U0449>,<U0429>);(<U044A>,<U042A>);/ - (<U044B>,<U042B>);(<U044C>,<U042C>);(<U044D>,<U042D>);(<U044E>,<U042E>);/ - (<U044F>,<U042F>);(<U0450>,<U0400>);(<U0451>,<U0401>);(<U0452>,<U0402>);/ - (<U0453>,<U0403>);(<U0454>,<U0404>);(<U0455>,<U0405>);(<U0456>,<U0406>);/ - (<U0457>,<U0407>);(<U0458>,<U0408>);(<U0459>,<U0409>);(<U045A>,<U040A>);/ - (<U045B>,<U040B>);(<U045C>,<U040C>);(<U045D>,<U040D>);(<U045E>,<U040E>);/ - (<U045F>,<U040F>);(<U0461>,<U0460>);(<U0463>,<U0462>);(<U0465>,<U0464>);/ - (<U0467>,<U0466>);(<U0469>,<U0468>);(<U046B>,<U046A>);(<U046D>,<U046C>);/ - (<U046F>,<U046E>);(<U0471>,<U0470>);(<U0473>,<U0472>);(<U0475>,<U0474>);/ - (<U0477>,<U0476>);(<U0479>,<U0478>);(<U047B>,<U047A>);(<U047D>,<U047C>);/ - (<U047F>,<U047E>);(<U0481>,<U0480>);(<U048B>,<U048A>);(<U048D>,<U048C>);/ - (<U048F>,<U048E>);(<U0491>,<U0490>);(<U0493>,<U0492>);(<U0495>,<U0494>);/ - (<U0497>,<U0496>);(<U0499>,<U0498>);(<U049B>,<U049A>);(<U049D>,<U049C>);/ - (<U049F>,<U049E>);(<U04A1>,<U04A0>);(<U04A3>,<U04A2>);(<U04A5>,<U04A4>);/ - (<U04A7>,<U04A6>);(<U04A9>,<U04A8>);(<U04AB>,<U04AA>);(<U04AD>,<U04AC>);/ - (<U04AF>,<U04AE>);(<U04B1>,<U04B0>);(<U04B3>,<U04B2>);(<U04B5>,<U04B4>);/ - (<U04B7>,<U04B6>);(<U04B9>,<U04B8>);(<U04BB>,<U04BA>);(<U04BD>,<U04BC>);/ - (<U04BF>,<U04BE>);(<U04C2>,<U04C1>);(<U04C4>,<U04C3>);(<U04C6>,<U04C5>);/ - (<U04C8>,<U04C7>);(<U04CA>,<U04C9>);(<U04CC>,<U04CB>);(<U04CE>,<U04CD>);/ - (<U04CF>,<U04C0>);(<U04D1>,<U04D0>);(<U04D3>,<U04D2>);(<U04D5>,<U04D4>);/ - (<U04D7>,<U04D6>);(<U04D9>,<U04D8>);(<U04DB>,<U04DA>);(<U04DD>,<U04DC>);/ - (<U04DF>,<U04DE>);(<U04E1>,<U04E0>);(<U04E3>,<U04E2>);(<U04E5>,<U04E4>);/ - (<U04E7>,<U04E6>);(<U04E9>,<U04E8>);(<U04EB>,<U04EA>);(<U04ED>,<U04EC>);/ - (<U04EF>,<U04EE>);(<U04F1>,<U04F0>);(<U04F3>,<U04F2>);(<U04F5>,<U04F4>);/ - (<U04F7>,<U04F6>);(<U04F9>,<U04F8>);(<U04FB>,<U04FA>);(<U04FD>,<U04FC>);/ - (<U04FF>,<U04FE>);(<U0501>,<U0500>);(<U0503>,<U0502>);(<U0505>,<U0504>);/ - (<U0507>,<U0506>);(<U0509>,<U0508>);(<U050B>,<U050A>);(<U050D>,<U050C>);/ - (<U050F>,<U050E>);(<U0511>,<U0510>);(<U0513>,<U0512>);(<U0515>,<U0514>);/ - (<U0517>,<U0516>);(<U0519>,<U0518>);(<U051B>,<U051A>);(<U051D>,<U051C>);/ - (<U051F>,<U051E>);(<U0521>,<U0520>);(<U0523>,<U0522>);(<U0525>,<U0524>);/ - (<U0527>,<U0526>);(<U0529>,<U0528>);(<U052B>,<U052A>);(<U052D>,<U052C>);/ - (<U052F>,<U052E>);(<U0561>,<U0531>);(<U0562>,<U0532>);(<U0563>,<U0533>);/ - (<U0564>,<U0534>);(<U0565>,<U0535>);(<U0566>,<U0536>);(<U0567>,<U0537>);/ - (<U0568>,<U0538>);(<U0569>,<U0539>);(<U056A>,<U053A>);(<U056B>,<U053B>);/ - (<U056C>,<U053C>);(<U056D>,<U053D>);(<U056E>,<U053E>);(<U056F>,<U053F>);/ - (<U0570>,<U0540>);(<U0571>,<U0541>);(<U0572>,<U0542>);(<U0573>,<U0543>);/ - (<U0574>,<U0544>);(<U0575>,<U0545>);(<U0576>,<U0546>);(<U0577>,<U0547>);/ - (<U0578>,<U0548>);(<U0579>,<U0549>);(<U057A>,<U054A>);(<U057B>,<U054B>);/ - (<U057C>,<U054C>);(<U057D>,<U054D>);(<U057E>,<U054E>);(<U057F>,<U054F>);/ - (<U0580>,<U0550>);(<U0581>,<U0551>);(<U0582>,<U0552>);(<U0583>,<U0553>);/ - (<U0584>,<U0554>);(<U0585>,<U0555>);(<U0586>,<U0556>);(<U10D0>,<U1C90>);/ - (<U10D1>,<U1C91>);(<U10D2>,<U1C92>);(<U10D3>,<U1C93>);(<U10D4>,<U1C94>);/ - (<U10D5>,<U1C95>);(<U10D6>,<U1C96>);(<U10D7>,<U1C97>);(<U10D8>,<U1C98>);/ - (<U10D9>,<U1C99>);(<U10DA>,<U1C9A>);(<U10DB>,<U1C9B>);(<U10DC>,<U1C9C>);/ - (<U10DD>,<U1C9D>);(<U10DE>,<U1C9E>);(<U10DF>,<U1C9F>);(<U10E0>,<U1CA0>);/ - (<U10E1>,<U1CA1>);(<U10E2>,<U1CA2>);(<U10E3>,<U1CA3>);(<U10E4>,<U1CA4>);/ - (<U10E5>,<U1CA5>);(<U10E6>,<U1CA6>);(<U10E7>,<U1CA7>);(<U10E8>,<U1CA8>);/ - (<U10E9>,<U1CA9>);(<U10EA>,<U1CAA>);(<U10EB>,<U1CAB>);(<U10EC>,<U1CAC>);/ - (<U10ED>,<U1CAD>);(<U10EE>,<U1CAE>);(<U10EF>,<U1CAF>);(<U10F0>,<U1CB0>);/ - (<U10F1>,<U1CB1>);(<U10F2>,<U1CB2>);(<U10F3>,<U1CB3>);(<U10F4>,<U1CB4>);/ - (<U10F5>,<U1CB5>);(<U10F6>,<U1CB6>);(<U10F7>,<U1CB7>);(<U10F8>,<U1CB8>);/ - (<U10F9>,<U1CB9>);(<U10FA>,<U1CBA>);(<U10FD>,<U1CBD>);(<U10FE>,<U1CBE>);/ - (<U10FF>,<U1CBF>);(<U13F8>,<U13F0>);(<U13F9>,<U13F1>);(<U13FA>,<U13F2>);/ - (<U13FB>,<U13F3>);(<U13FC>,<U13F4>);(<U13FD>,<U13F5>);(<U1C80>,<U0412>);/ - (<U1C81>,<U0414>);(<U1C82>,<U041E>);(<U1C83>,<U0421>);(<U1C84>,<U0422>);/ - (<U1C85>,<U0422>);(<U1C86>,<U042A>);(<U1C87>,<U0462>);(<U1C88>,<UA64A>);/ - (<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);/ - (<U1E03>,<U1E02>);(<U1E05>,<U1E04>);(<U1E07>,<U1E06>);(<U1E09>,<U1E08>);/ - (<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);/ - (<U1E13>,<U1E12>);(<U1E15>,<U1E14>);(<U1E17>,<U1E16>);(<U1E19>,<U1E18>);/ - (<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);/ - (<U1E23>,<U1E22>);(<U1E25>,<U1E24>);(<U1E27>,<U1E26>);(<U1E29>,<U1E28>);/ - (<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);/ - (<U1E33>,<U1E32>);(<U1E35>,<U1E34>);(<U1E37>,<U1E36>);(<U1E39>,<U1E38>);/ - (<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);/ - (<U1E43>,<U1E42>);(<U1E45>,<U1E44>);(<U1E47>,<U1E46>);(<U1E49>,<U1E48>);/ - (<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);/ - (<U1E53>,<U1E52>);(<U1E55>,<U1E54>);(<U1E57>,<U1E56>);(<U1E59>,<U1E58>);/ - (<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);/ - (<U1E63>,<U1E62>);(<U1E65>,<U1E64>);(<U1E67>,<U1E66>);(<U1E69>,<U1E68>);/ - (<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);/ - (<U1E73>,<U1E72>);(<U1E75>,<U1E74>);(<U1E77>,<U1E76>);(<U1E79>,<U1E78>);/ - (<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);/ - (<U1E83>,<U1E82>);(<U1E85>,<U1E84>);(<U1E87>,<U1E86>);(<U1E89>,<U1E88>);/ - (<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);/ - (<U1E93>,<U1E92>);(<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);/ - (<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);/ - (<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);/ - (<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);/ - (<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);/ - (<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);/ - (<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);/ - (<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);/ - (<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);/ - (<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);/ - (<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);/ - (<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);/ - (<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);/ - (<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);/ - (<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);/ - (<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);/ - (<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);(<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);/ - (<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);/ - (<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);(<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);/ - (<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);/ - (<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);(<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);/ - (<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);/ - (<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);/ - (<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);/ - (<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);/ - (<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);/ - (<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);/ - (<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);/ - (<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);(<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);/ - (<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);/ - (<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);(<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);/ - (<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);/ - (<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);/ - (<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);/ - (<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);/ - (<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);/ - (<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);/ - (<U214E>,<U2132>);(<U2170>,<U2160>);(<U2171>,<U2161>);(<U2172>,<U2162>);/ - (<U2173>,<U2163>);(<U2174>,<U2164>);(<U2175>,<U2165>);(<U2176>,<U2166>);/ - (<U2177>,<U2167>);(<U2178>,<U2168>);(<U2179>,<U2169>);(<U217A>,<U216A>);/ - (<U217B>,<U216B>);(<U217C>,<U216C>);(<U217D>,<U216D>);(<U217E>,<U216E>);/ - (<U217F>,<U216F>);(<U2184>,<U2183>);(<U24D0>,<U24B6>);(<U24D1>,<U24B7>);/ - (<U24D2>,<U24B8>);(<U24D3>,<U24B9>);(<U24D4>,<U24BA>);(<U24D5>,<U24BB>);/ - (<U24D6>,<U24BC>);(<U24D7>,<U24BD>);(<U24D8>,<U24BE>);(<U24D9>,<U24BF>);/ - (<U24DA>,<U24C0>);(<U24DB>,<U24C1>);(<U24DC>,<U24C2>);(<U24DD>,<U24C3>);/ - (<U24DE>,<U24C4>);(<U24DF>,<U24C5>);(<U24E0>,<U24C6>);(<U24E1>,<U24C7>);/ - (<U24E2>,<U24C8>);(<U24E3>,<U24C9>);(<U24E4>,<U24CA>);(<U24E5>,<U24CB>);/ - (<U24E6>,<U24CC>);(<U24E7>,<U24CD>);(<U24E8>,<U24CE>);(<U24E9>,<U24CF>);/ - (<U2C30>,<U2C00>);(<U2C31>,<U2C01>);(<U2C32>,<U2C02>);(<U2C33>,<U2C03>);/ - (<U2C34>,<U2C04>);(<U2C35>,<U2C05>);(<U2C36>,<U2C06>);(<U2C37>,<U2C07>);/ - (<U2C38>,<U2C08>);(<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);/ - (<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);/ - (<U2C40>,<U2C10>);(<U2C41>,<U2C11>);(<U2C42>,<U2C12>);(<U2C43>,<U2C13>);/ - (<U2C44>,<U2C14>);(<U2C45>,<U2C15>);(<U2C46>,<U2C16>);(<U2C47>,<U2C17>);/ - (<U2C48>,<U2C18>);(<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);/ - (<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);/ - (<U2C50>,<U2C20>);(<U2C51>,<U2C21>);(<U2C52>,<U2C22>);(<U2C53>,<U2C23>);/ - (<U2C54>,<U2C24>);(<U2C55>,<U2C25>);(<U2C56>,<U2C26>);(<U2C57>,<U2C27>);/ - (<U2C58>,<U2C28>);(<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);/ - (<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);/ - (<U2C61>,<U2C60>);(<U2C65>,<U023A>);(<U2C66>,<U023E>);(<U2C68>,<U2C67>);/ - (<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);(<U2C76>,<U2C75>);/ - (<U2C81>,<U2C80>);(<U2C83>,<U2C82>);(<U2C85>,<U2C84>);(<U2C87>,<U2C86>);/ - (<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);/ - (<U2C91>,<U2C90>);(<U2C93>,<U2C92>);(<U2C95>,<U2C94>);(<U2C97>,<U2C96>);/ - (<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);/ - (<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);/ - (<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);/ - (<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);/ - (<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);/ - (<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);/ - (<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);/ - (<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);/ - (<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);/ - (<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);/ - (<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);(<U2D01>,<U10A1>);(<U2D02>,<U10A2>);/ - (<U2D03>,<U10A3>);(<U2D04>,<U10A4>);(<U2D05>,<U10A5>);(<U2D06>,<U10A6>);/ - (<U2D07>,<U10A7>);(<U2D08>,<U10A8>);(<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);/ - (<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);/ - (<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);(<U2D11>,<U10B1>);(<U2D12>,<U10B2>);/ - (<U2D13>,<U10B3>);(<U2D14>,<U10B4>);(<U2D15>,<U10B5>);(<U2D16>,<U10B6>);/ - (<U2D17>,<U10B7>);(<U2D18>,<U10B8>);(<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);/ - (<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);/ - (<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);(<U2D21>,<U10C1>);(<U2D22>,<U10C2>);/ - (<U2D23>,<U10C3>);(<U2D24>,<U10C4>);(<U2D25>,<U10C5>);(<U2D27>,<U10C7>);/ - (<U2D2D>,<U10CD>);(<UA641>,<UA640>);(<UA643>,<UA642>);(<UA645>,<UA644>);/ - (<UA647>,<UA646>);(<UA649>,<UA648>);(<UA64B>,<UA64A>);(<UA64D>,<UA64C>);/ - (<UA64F>,<UA64E>);(<UA651>,<UA650>);(<UA653>,<UA652>);(<UA655>,<UA654>);/ - (<UA657>,<UA656>);(<UA659>,<UA658>);(<UA65B>,<UA65A>);(<UA65D>,<UA65C>);/ - (<UA65F>,<UA65E>);(<UA661>,<UA660>);(<UA663>,<UA662>);(<UA665>,<UA664>);/ - (<UA667>,<UA666>);(<UA669>,<UA668>);(<UA66B>,<UA66A>);(<UA66D>,<UA66C>);/ - (<UA681>,<UA680>);(<UA683>,<UA682>);(<UA685>,<UA684>);(<UA687>,<UA686>);/ - (<UA689>,<UA688>);(<UA68B>,<UA68A>);(<UA68D>,<UA68C>);(<UA68F>,<UA68E>);/ - (<UA691>,<UA690>);(<UA693>,<UA692>);(<UA695>,<UA694>);(<UA697>,<UA696>);/ - (<UA699>,<UA698>);(<UA69B>,<UA69A>);(<UA723>,<UA722>);(<UA725>,<UA724>);/ - (<UA727>,<UA726>);(<UA729>,<UA728>);(<UA72B>,<UA72A>);(<UA72D>,<UA72C>);/ - (<UA72F>,<UA72E>);(<UA733>,<UA732>);(<UA735>,<UA734>);(<UA737>,<UA736>);/ - (<UA739>,<UA738>);(<UA73B>,<UA73A>);(<UA73D>,<UA73C>);(<UA73F>,<UA73E>);/ - (<UA741>,<UA740>);(<UA743>,<UA742>);(<UA745>,<UA744>);(<UA747>,<UA746>);/ - (<UA749>,<UA748>);(<UA74B>,<UA74A>);(<UA74D>,<UA74C>);(<UA74F>,<UA74E>);/ - (<UA751>,<UA750>);(<UA753>,<UA752>);(<UA755>,<UA754>);(<UA757>,<UA756>);/ - (<UA759>,<UA758>);(<UA75B>,<UA75A>);(<UA75D>,<UA75C>);(<UA75F>,<UA75E>);/ - (<UA761>,<UA760>);(<UA763>,<UA762>);(<UA765>,<UA764>);(<UA767>,<UA766>);/ - (<UA769>,<UA768>);(<UA76B>,<UA76A>);(<UA76D>,<UA76C>);(<UA76F>,<UA76E>);/ - (<UA77A>,<UA779>);(<UA77C>,<UA77B>);(<UA77F>,<UA77E>);(<UA781>,<UA780>);/ - (<UA783>,<UA782>);(<UA785>,<UA784>);(<UA787>,<UA786>);(<UA78C>,<UA78B>);/ - (<UA791>,<UA790>);(<UA793>,<UA792>);(<UA794>,<UA7C4>);(<UA797>,<UA796>);/ - (<UA799>,<UA798>);(<UA79B>,<UA79A>);(<UA79D>,<UA79C>);(<UA79F>,<UA79E>);/ - (<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);/ - (<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);/ - (<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);/ - (<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);(<UA7D1>,<UA7D0>);/ - (<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);(<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);/ - (<UAB70>,<U13A0>);(<UAB71>,<U13A1>);(<UAB72>,<U13A2>);(<UAB73>,<U13A3>);/ - (<UAB74>,<U13A4>);(<UAB75>,<U13A5>);(<UAB76>,<U13A6>);(<UAB77>,<U13A7>);/ - (<UAB78>,<U13A8>);(<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);/ - (<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);/ - (<UAB80>,<U13B0>);(<UAB81>,<U13B1>);(<UAB82>,<U13B2>);(<UAB83>,<U13B3>);/ - (<UAB84>,<U13B4>);(<UAB85>,<U13B5>);(<UAB86>,<U13B6>);(<UAB87>,<U13B7>);/ - (<UAB88>,<U13B8>);(<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);/ - (<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);/ - (<UAB90>,<U13C0>);(<UAB91>,<U13C1>);(<UAB92>,<U13C2>);(<UAB93>,<U13C3>);/ - (<UAB94>,<U13C4>);(<UAB95>,<U13C5>);(<UAB96>,<U13C6>);(<UAB97>,<U13C7>);/ - (<UAB98>,<U13C8>);(<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);/ - (<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);/ - (<UABA0>,<U13D0>);(<UABA1>,<U13D1>);(<UABA2>,<U13D2>);(<UABA3>,<U13D3>);/ - (<UABA4>,<U13D4>);(<UABA5>,<U13D5>);(<UABA6>,<U13D6>);(<UABA7>,<U13D7>);/ - (<UABA8>,<U13D8>);(<UABA9>,<U13D9>);(<UABAA>,<U13DA>);(<UABAB>,<U13DB>);/ - (<UABAC>,<U13DC>);(<UABAD>,<U13DD>);(<UABAE>,<U13DE>);(<UABAF>,<U13DF>);/ - (<UABB0>,<U13E0>);(<UABB1>,<U13E1>);(<UABB2>,<U13E2>);(<UABB3>,<U13E3>);/ - (<UABB4>,<U13E4>);(<UABB5>,<U13E5>);(<UABB6>,<U13E6>);(<UABB7>,<U13E7>);/ - (<UABB8>,<U13E8>);(<UABB9>,<U13E9>);(<UABBA>,<U13EA>);(<UABBB>,<U13EB>);/ - (<UABBC>,<U13EC>);(<UABBD>,<U13ED>);(<UABBE>,<U13EE>);(<UABBF>,<U13EF>);/ - (<UFF41>,<UFF21>);(<UFF42>,<UFF22>);(<UFF43>,<UFF23>);(<UFF44>,<UFF24>);/ - (<UFF45>,<UFF25>);(<UFF46>,<UFF26>);(<UFF47>,<UFF27>);(<UFF48>,<UFF28>);/ - (<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);/ - (<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);/ - (<UFF51>,<UFF31>);(<UFF52>,<UFF32>);(<UFF53>,<UFF33>);(<UFF54>,<UFF34>);/ - (<UFF55>,<UFF35>);(<UFF56>,<UFF36>);(<UFF57>,<UFF37>);(<UFF58>,<UFF38>);/ - (<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);(<U00010428>,<U00010400>);/ - (<U00010429>,<U00010401>);(<U0001042A>,<U00010402>);/ - (<U0001042B>,<U00010403>);(<U0001042C>,<U00010404>);/ - (<U0001042D>,<U00010405>);(<U0001042E>,<U00010406>);/ - (<U0001042F>,<U00010407>);(<U00010430>,<U00010408>);/ - (<U00010431>,<U00010409>);(<U00010432>,<U0001040A>);/ - (<U00010433>,<U0001040B>);(<U00010434>,<U0001040C>);/ - (<U00010435>,<U0001040D>);(<U00010436>,<U0001040E>);/ - (<U00010437>,<U0001040F>);(<U00010438>,<U00010410>);/ - (<U00010439>,<U00010411>);(<U0001043A>,<U00010412>);/ - (<U0001043B>,<U00010413>);(<U0001043C>,<U00010414>);/ - (<U0001043D>,<U00010415>);(<U0001043E>,<U00010416>);/ - (<U0001043F>,<U00010417>);(<U00010440>,<U00010418>);/ - (<U00010441>,<U00010419>);(<U00010442>,<U0001041A>);/ - (<U00010443>,<U0001041B>);(<U00010444>,<U0001041C>);/ - (<U00010445>,<U0001041D>);(<U00010446>,<U0001041E>);/ - (<U00010447>,<U0001041F>);(<U00010448>,<U00010420>);/ - (<U00010449>,<U00010421>);(<U0001044A>,<U00010422>);/ - (<U0001044B>,<U00010423>);(<U0001044C>,<U00010424>);/ - (<U0001044D>,<U00010425>);(<U0001044E>,<U00010426>);/ - (<U0001044F>,<U00010427>);(<U000104D8>,<U000104B0>);/ - (<U000104D9>,<U000104B1>);(<U000104DA>,<U000104B2>);/ - (<U000104DB>,<U000104B3>);(<U000104DC>,<U000104B4>);/ - (<U000104DD>,<U000104B5>);(<U000104DE>,<U000104B6>);/ - (<U000104DF>,<U000104B7>);(<U000104E0>,<U000104B8>);/ - (<U000104E1>,<U000104B9>);(<U000104E2>,<U000104BA>);/ - (<U000104E3>,<U000104BB>);(<U000104E4>,<U000104BC>);/ - (<U000104E5>,<U000104BD>);(<U000104E6>,<U000104BE>);/ - (<U000104E7>,<U000104BF>);(<U000104E8>,<U000104C0>);/ - (<U000104E9>,<U000104C1>);(<U000104EA>,<U000104C2>);/ - (<U000104EB>,<U000104C3>);(<U000104EC>,<U000104C4>);/ - (<U000104ED>,<U000104C5>);(<U000104EE>,<U000104C6>);/ - (<U000104EF>,<U000104C7>);(<U000104F0>,<U000104C8>);/ - (<U000104F1>,<U000104C9>);(<U000104F2>,<U000104CA>);/ - (<U000104F3>,<U000104CB>);(<U000104F4>,<U000104CC>);/ - (<U000104F5>,<U000104CD>);(<U000104F6>,<U000104CE>);/ - (<U000104F7>,<U000104CF>);(<U000104F8>,<U000104D0>);/ - (<U000104F9>,<U000104D1>);(<U000104FA>,<U000104D2>);/ - (<U000104FB>,<U000104D3>);(<U00010597>,<U00010570>);/ - (<U00010598>,<U00010571>);(<U00010599>,<U00010572>);/ - (<U0001059A>,<U00010573>);(<U0001059B>,<U00010574>);/ - (<U0001059C>,<U00010575>);(<U0001059D>,<U00010576>);/ - (<U0001059E>,<U00010577>);(<U0001059F>,<U00010578>);/ - (<U000105A0>,<U00010579>);(<U000105A1>,<U0001057A>);/ - (<U000105A3>,<U0001057C>);(<U000105A4>,<U0001057D>);/ - (<U000105A5>,<U0001057E>);(<U000105A6>,<U0001057F>);/ - (<U000105A7>,<U00010580>);(<U000105A8>,<U00010581>);/ - (<U000105A9>,<U00010582>);(<U000105AA>,<U00010583>);/ - (<U000105AB>,<U00010584>);(<U000105AC>,<U00010585>);/ - (<U000105AD>,<U00010586>);(<U000105AE>,<U00010587>);/ - (<U000105AF>,<U00010588>);(<U000105B0>,<U00010589>);/ - (<U000105B1>,<U0001058A>);(<U000105B3>,<U0001058C>);/ - (<U000105B4>,<U0001058D>);(<U000105B5>,<U0001058E>);/ - (<U000105B6>,<U0001058F>);(<U000105B7>,<U00010590>);/ - (<U000105B8>,<U00010591>);(<U000105B9>,<U00010592>);/ - (<U000105BB>,<U00010594>);(<U000105BC>,<U00010595>);/ - (<U00010CC0>,<U00010C80>);(<U00010CC1>,<U00010C81>);/ - (<U00010CC2>,<U00010C82>);(<U00010CC3>,<U00010C83>);/ - (<U00010CC4>,<U00010C84>);(<U00010CC5>,<U00010C85>);/ - (<U00010CC6>,<U00010C86>);(<U00010CC7>,<U00010C87>);/ - (<U00010CC8>,<U00010C88>);(<U00010CC9>,<U00010C89>);/ - (<U00010CCA>,<U00010C8A>);(<U00010CCB>,<U00010C8B>);/ - (<U00010CCC>,<U00010C8C>);(<U00010CCD>,<U00010C8D>);/ - (<U00010CCE>,<U00010C8E>);(<U00010CCF>,<U00010C8F>);/ - (<U00010CD0>,<U00010C90>);(<U00010CD1>,<U00010C91>);/ - (<U00010CD2>,<U00010C92>);(<U00010CD3>,<U00010C93>);/ - (<U00010CD4>,<U00010C94>);(<U00010CD5>,<U00010C95>);/ - (<U00010CD6>,<U00010C96>);(<U00010CD7>,<U00010C97>);/ - (<U00010CD8>,<U00010C98>);(<U00010CD9>,<U00010C99>);/ - (<U00010CDA>,<U00010C9A>);(<U00010CDB>,<U00010C9B>);/ - (<U00010CDC>,<U00010C9C>);(<U00010CDD>,<U00010C9D>);/ - (<U00010CDE>,<U00010C9E>);(<U00010CDF>,<U00010C9F>);/ - (<U00010CE0>,<U00010CA0>);(<U00010CE1>,<U00010CA1>);/ - (<U00010CE2>,<U00010CA2>);(<U00010CE3>,<U00010CA3>);/ - (<U00010CE4>,<U00010CA4>);(<U00010CE5>,<U00010CA5>);/ - (<U00010CE6>,<U00010CA6>);(<U00010CE7>,<U00010CA7>);/ - (<U00010CE8>,<U00010CA8>);(<U00010CE9>,<U00010CA9>);/ - (<U00010CEA>,<U00010CAA>);(<U00010CEB>,<U00010CAB>);/ - (<U00010CEC>,<U00010CAC>);(<U00010CED>,<U00010CAD>);/ - (<U00010CEE>,<U00010CAE>);(<U00010CEF>,<U00010CAF>);/ - (<U00010CF0>,<U00010CB0>);(<U00010CF1>,<U00010CB1>);/ - (<U00010CF2>,<U00010CB2>);(<U000118C0>,<U000118A0>);/ - (<U000118C1>,<U000118A1>);(<U000118C2>,<U000118A2>);/ - (<U000118C3>,<U000118A3>);(<U000118C4>,<U000118A4>);/ - (<U000118C5>,<U000118A5>);(<U000118C6>,<U000118A6>);/ - (<U000118C7>,<U000118A7>);(<U000118C8>,<U000118A8>);/ - (<U000118C9>,<U000118A9>);(<U000118CA>,<U000118AA>);/ - (<U000118CB>,<U000118AB>);(<U000118CC>,<U000118AC>);/ - (<U000118CD>,<U000118AD>);(<U000118CE>,<U000118AE>);/ - (<U000118CF>,<U000118AF>);(<U000118D0>,<U000118B0>);/ - (<U000118D1>,<U000118B1>);(<U000118D2>,<U000118B2>);/ - (<U000118D3>,<U000118B3>);(<U000118D4>,<U000118B4>);/ - (<U000118D5>,<U000118B5>);(<U000118D6>,<U000118B6>);/ - (<U000118D7>,<U000118B7>);(<U000118D8>,<U000118B8>);/ - (<U000118D9>,<U000118B9>);(<U000118DA>,<U000118BA>);/ - (<U000118DB>,<U000118BB>);(<U000118DC>,<U000118BC>);/ - (<U000118DD>,<U000118BD>);(<U000118DE>,<U000118BE>);/ - (<U000118DF>,<U000118BF>);(<U00016E60>,<U00016E40>);/ - (<U00016E61>,<U00016E41>);(<U00016E62>,<U00016E42>);/ - (<U00016E63>,<U00016E43>);(<U00016E64>,<U00016E44>);/ - (<U00016E65>,<U00016E45>);(<U00016E66>,<U00016E46>);/ - (<U00016E67>,<U00016E47>);(<U00016E68>,<U00016E48>);/ - (<U00016E69>,<U00016E49>);(<U00016E6A>,<U00016E4A>);/ - (<U00016E6B>,<U00016E4B>);(<U00016E6C>,<U00016E4C>);/ - (<U00016E6D>,<U00016E4D>);(<U00016E6E>,<U00016E4E>);/ - (<U00016E6F>,<U00016E4F>);(<U00016E70>,<U00016E50>);/ - (<U00016E71>,<U00016E51>);(<U00016E72>,<U00016E52>);/ - (<U00016E73>,<U00016E53>);(<U00016E74>,<U00016E54>);/ - (<U00016E75>,<U00016E55>);(<U00016E76>,<U00016E56>);/ - (<U00016E77>,<U00016E57>);(<U00016E78>,<U00016E58>);/ - (<U00016E79>,<U00016E59>);(<U00016E7A>,<U00016E5A>);/ - (<U00016E7B>,<U00016E5B>);(<U00016E7C>,<U00016E5C>);/ - (<U00016E7D>,<U00016E5D>);(<U00016E7E>,<U00016E5E>);/ - (<U00016E7F>,<U00016E5F>);(<U0001E922>,<U0001E900>);/ - (<U0001E923>,<U0001E901>);(<U0001E924>,<U0001E902>);/ - (<U0001E925>,<U0001E903>);(<U0001E926>,<U0001E904>);/ - (<U0001E927>,<U0001E905>);(<U0001E928>,<U0001E906>);/ - (<U0001E929>,<U0001E907>);(<U0001E92A>,<U0001E908>);/ - (<U0001E92B>,<U0001E909>);(<U0001E92C>,<U0001E90A>);/ - (<U0001E92D>,<U0001E90B>);(<U0001E92E>,<U0001E90C>);/ - (<U0001E92F>,<U0001E90D>);(<U0001E930>,<U0001E90E>);/ - (<U0001E931>,<U0001E90F>);(<U0001E932>,<U0001E910>);/ - (<U0001E933>,<U0001E911>);(<U0001E934>,<U0001E912>);/ - (<U0001E935>,<U0001E913>);(<U0001E936>,<U0001E914>);/ - (<U0001E937>,<U0001E915>);(<U0001E938>,<U0001E916>);/ - (<U0001E939>,<U0001E917>);(<U0001E93A>,<U0001E918>);/ - (<U0001E93B>,<U0001E919>);(<U0001E93C>,<U0001E91A>);/ - (<U0001E93D>,<U0001E91B>);(<U0001E93E>,<U0001E91C>);/ - (<U0001E93F>,<U0001E91D>);(<U0001E940>,<U0001E91E>);/ - (<U0001E941>,<U0001E91F>);(<U0001E942>,<U0001E920>);/ - (<U0001E943>,<U0001E921>) + (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019B>,<UA7DC>);(<U019E>,<U0220>);/ + (<U01A1>,<U01A0>);(<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);/ + (<U01AD>,<U01AC>);(<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);/ + (<U01B9>,<U01B8>);(<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C5>,<U01C4>);/ + (<U01C6>,<U01C4>);(<U01C8>,<U01C7>);(<U01C9>,<U01C7>);(<U01CB>,<U01CA>);/ + (<U01CC>,<U01CA>);(<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);/ + (<U01D4>,<U01D3>);(<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);/ + (<U01DC>,<U01DB>);(<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);/ + (<U01E3>,<U01E2>);(<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);/ + (<U01EB>,<U01EA>);(<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F2>,<U01F1>);/ + (<U01F3>,<U01F1>);(<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);/ + (<U01FD>,<U01FC>);(<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);/ + (<U0205>,<U0204>);(<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);/ + (<U020D>,<U020C>);(<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);/ + (<U0215>,<U0214>);(<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);/ + (<U021D>,<U021C>);(<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);/ + (<U0227>,<U0226>);(<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);/ + (<U022F>,<U022E>);(<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);/ + (<U023F>,<U2C7E>);(<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);/ + (<U0249>,<U0248>);(<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);/ + (<U0250>,<U2C6F>);(<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);/ + (<U0254>,<U0186>);(<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);/ + (<U025B>,<U0190>);(<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);/ + (<U0263>,<U0194>);(<U0264>,<UA7CB>);(<U0265>,<UA78D>);(<U0266>,<UA7AA>);/ + (<U0268>,<U0197>);(<U0269>,<U0196>);(<U026A>,<UA7AE>);(<U026B>,<U2C62>);/ + (<U026C>,<UA7AD>);(<U026F>,<U019C>);(<U0271>,<U2C6E>);(<U0272>,<U019D>);/ + (<U0275>,<U019F>);(<U027D>,<U2C64>);(<U0280>,<U01A6>);(<U0282>,<UA7C5>);/ + (<U0283>,<U01A9>);(<U0287>,<UA7B1>);(<U0288>,<U01AE>);(<U0289>,<U0244>);/ + (<U028A>,<U01B1>);(<U028B>,<U01B2>);(<U028C>,<U0245>);(<U0292>,<U01B7>);/ + (<U029D>,<UA7B2>);(<U029E>,<UA7B0>);(<U0345>,<U0399>);(<U0371>,<U0370>);/ + (<U0373>,<U0372>);(<U0377>,<U0376>);(<U037B>,<U03FD>);(<U037C>,<U03FE>);/ + (<U037D>,<U03FF>);(<U03AC>,<U0386>);(<U03AD>,<U0388>);(<U03AE>,<U0389>);/ + (<U03AF>,<U038A>);(<U03B1>,<U0391>);(<U03B2>,<U0392>);(<U03B3>,<U0393>);/ + (<U03B4>,<U0394>);(<U03B5>,<U0395>);(<U03B6>,<U0396>);(<U03B7>,<U0397>);/ + (<U03B8>,<U0398>);(<U03B9>,<U0399>);(<U03BA>,<U039A>);(<U03BB>,<U039B>);/ + (<U03BC>,<U039C>);(<U03BD>,<U039D>);(<U03BE>,<U039E>);(<U03BF>,<U039F>);/ + (<U03C0>,<U03A0>);(<U03C1>,<U03A1>);(<U03C2>,<U03A3>);(<U03C3>,<U03A3>);/ + (<U03C4>,<U03A4>);(<U03C5>,<U03A5>);(<U03C6>,<U03A6>);(<U03C7>,<U03A7>);/ + (<U03C8>,<U03A8>);(<U03C9>,<U03A9>);(<U03CA>,<U03AA>);(<U03CB>,<U03AB>);/ + (<U03CC>,<U038C>);(<U03CD>,<U038E>);(<U03CE>,<U038F>);(<U03D0>,<U0392>);/ + (<U03D1>,<U0398>);(<U03D5>,<U03A6>);(<U03D6>,<U03A0>);(<U03D7>,<U03CF>);/ + (<U03D9>,<U03D8>);(<U03DB>,<U03DA>);(<U03DD>,<U03DC>);(<U03DF>,<U03DE>);/ + (<U03E1>,<U03E0>);(<U03E3>,<U03E2>);(<U03E5>,<U03E4>);(<U03E7>,<U03E6>);/ + (<U03E9>,<U03E8>);(<U03EB>,<U03EA>);(<U03ED>,<U03EC>);(<U03EF>,<U03EE>);/ + (<U03F0>,<U039A>);(<U03F1>,<U03A1>);(<U03F2>,<U03F9>);(<U03F3>,<U037F>);/ + (<U03F5>,<U0395>);(<U03F8>,<U03F7>);(<U03FB>,<U03FA>);(<U0430>,<U0410>);/ + (<U0431>,<U0411>);(<U0432>,<U0412>);(<U0433>,<U0413>);(<U0434>,<U0414>);/ + (<U0435>,<U0415>);(<U0436>,<U0416>);(<U0437>,<U0417>);(<U0438>,<U0418>);/ + (<U0439>,<U0419>);(<U043A>,<U041A>);(<U043B>,<U041B>);(<U043C>,<U041C>);/ + (<U043D>,<U041D>);(<U043E>,<U041E>);(<U043F>,<U041F>);(<U0440>,<U0420>);/ + (<U0441>,<U0421>);(<U0442>,<U0422>);(<U0443>,<U0423>);(<U0444>,<U0424>);/ + (<U0445>,<U0425>);(<U0446>,<U0426>);(<U0447>,<U0427>);(<U0448>,<U0428>);/ + (<U0449>,<U0429>);(<U044A>,<U042A>);(<U044B>,<U042B>);(<U044C>,<U042C>);/ + (<U044D>,<U042D>);(<U044E>,<U042E>);(<U044F>,<U042F>);(<U0450>,<U0400>);/ + (<U0451>,<U0401>);(<U0452>,<U0402>);(<U0453>,<U0403>);(<U0454>,<U0404>);/ + (<U0455>,<U0405>);(<U0456>,<U0406>);(<U0457>,<U0407>);(<U0458>,<U0408>);/ + (<U0459>,<U0409>);(<U045A>,<U040A>);(<U045B>,<U040B>);(<U045C>,<U040C>);/ + (<U045D>,<U040D>);(<U045E>,<U040E>);(<U045F>,<U040F>);(<U0461>,<U0460>);/ + (<U0463>,<U0462>);(<U0465>,<U0464>);(<U0467>,<U0466>);(<U0469>,<U0468>);/ + (<U046B>,<U046A>);(<U046D>,<U046C>);(<U046F>,<U046E>);(<U0471>,<U0470>);/ + (<U0473>,<U0472>);(<U0475>,<U0474>);(<U0477>,<U0476>);(<U0479>,<U0478>);/ + (<U047B>,<U047A>);(<U047D>,<U047C>);(<U047F>,<U047E>);(<U0481>,<U0480>);/ + (<U048B>,<U048A>);(<U048D>,<U048C>);(<U048F>,<U048E>);(<U0491>,<U0490>);/ + (<U0493>,<U0492>);(<U0495>,<U0494>);(<U0497>,<U0496>);(<U0499>,<U0498>);/ + (<U049B>,<U049A>);(<U049D>,<U049C>);(<U049F>,<U049E>);(<U04A1>,<U04A0>);/ + (<U04A3>,<U04A2>);(<U04A5>,<U04A4>);(<U04A7>,<U04A6>);(<U04A9>,<U04A8>);/ + (<U04AB>,<U04AA>);(<U04AD>,<U04AC>);(<U04AF>,<U04AE>);(<U04B1>,<U04B0>);/ + (<U04B3>,<U04B2>);(<U04B5>,<U04B4>);(<U04B7>,<U04B6>);(<U04B9>,<U04B8>);/ + (<U04BB>,<U04BA>);(<U04BD>,<U04BC>);(<U04BF>,<U04BE>);(<U04C2>,<U04C1>);/ + (<U04C4>,<U04C3>);(<U04C6>,<U04C5>);(<U04C8>,<U04C7>);(<U04CA>,<U04C9>);/ + (<U04CC>,<U04CB>);(<U04CE>,<U04CD>);(<U04CF>,<U04C0>);(<U04D1>,<U04D0>);/ + (<U04D3>,<U04D2>);(<U04D5>,<U04D4>);(<U04D7>,<U04D6>);(<U04D9>,<U04D8>);/ + (<U04DB>,<U04DA>);(<U04DD>,<U04DC>);(<U04DF>,<U04DE>);(<U04E1>,<U04E0>);/ + (<U04E3>,<U04E2>);(<U04E5>,<U04E4>);(<U04E7>,<U04E6>);(<U04E9>,<U04E8>);/ + (<U04EB>,<U04EA>);(<U04ED>,<U04EC>);(<U04EF>,<U04EE>);(<U04F1>,<U04F0>);/ + (<U04F3>,<U04F2>);(<U04F5>,<U04F4>);(<U04F7>,<U04F6>);(<U04F9>,<U04F8>);/ + (<U04FB>,<U04FA>);(<U04FD>,<U04FC>);(<U04FF>,<U04FE>);(<U0501>,<U0500>);/ + (<U0503>,<U0502>);(<U0505>,<U0504>);(<U0507>,<U0506>);(<U0509>,<U0508>);/ + (<U050B>,<U050A>);(<U050D>,<U050C>);(<U050F>,<U050E>);(<U0511>,<U0510>);/ + (<U0513>,<U0512>);(<U0515>,<U0514>);(<U0517>,<U0516>);(<U0519>,<U0518>);/ + (<U051B>,<U051A>);(<U051D>,<U051C>);(<U051F>,<U051E>);(<U0521>,<U0520>);/ + (<U0523>,<U0522>);(<U0525>,<U0524>);(<U0527>,<U0526>);(<U0529>,<U0528>);/ + (<U052B>,<U052A>);(<U052D>,<U052C>);(<U052F>,<U052E>);(<U0561>,<U0531>);/ + (<U0562>,<U0532>);(<U0563>,<U0533>);(<U0564>,<U0534>);(<U0565>,<U0535>);/ + (<U0566>,<U0536>);(<U0567>,<U0537>);(<U0568>,<U0538>);(<U0569>,<U0539>);/ + (<U056A>,<U053A>);(<U056B>,<U053B>);(<U056C>,<U053C>);(<U056D>,<U053D>);/ + (<U056E>,<U053E>);(<U056F>,<U053F>);(<U0570>,<U0540>);(<U0571>,<U0541>);/ + (<U0572>,<U0542>);(<U0573>,<U0543>);(<U0574>,<U0544>);(<U0575>,<U0545>);/ + (<U0576>,<U0546>);(<U0577>,<U0547>);(<U0578>,<U0548>);(<U0579>,<U0549>);/ + (<U057A>,<U054A>);(<U057B>,<U054B>);(<U057C>,<U054C>);(<U057D>,<U054D>);/ + (<U057E>,<U054E>);(<U057F>,<U054F>);(<U0580>,<U0550>);(<U0581>,<U0551>);/ + (<U0582>,<U0552>);(<U0583>,<U0553>);(<U0584>,<U0554>);(<U0585>,<U0555>);/ + (<U0586>,<U0556>);(<U10D0>,<U1C90>);(<U10D1>,<U1C91>);(<U10D2>,<U1C92>);/ + (<U10D3>,<U1C93>);(<U10D4>,<U1C94>);(<U10D5>,<U1C95>);(<U10D6>,<U1C96>);/ + (<U10D7>,<U1C97>);(<U10D8>,<U1C98>);(<U10D9>,<U1C99>);(<U10DA>,<U1C9A>);/ + (<U10DB>,<U1C9B>);(<U10DC>,<U1C9C>);(<U10DD>,<U1C9D>);(<U10DE>,<U1C9E>);/ + (<U10DF>,<U1C9F>);(<U10E0>,<U1CA0>);(<U10E1>,<U1CA1>);(<U10E2>,<U1CA2>);/ + (<U10E3>,<U1CA3>);(<U10E4>,<U1CA4>);(<U10E5>,<U1CA5>);(<U10E6>,<U1CA6>);/ + (<U10E7>,<U1CA7>);(<U10E8>,<U1CA8>);(<U10E9>,<U1CA9>);(<U10EA>,<U1CAA>);/ + (<U10EB>,<U1CAB>);(<U10EC>,<U1CAC>);(<U10ED>,<U1CAD>);(<U10EE>,<U1CAE>);/ + (<U10EF>,<U1CAF>);(<U10F0>,<U1CB0>);(<U10F1>,<U1CB1>);(<U10F2>,<U1CB2>);/ + (<U10F3>,<U1CB3>);(<U10F4>,<U1CB4>);(<U10F5>,<U1CB5>);(<U10F6>,<U1CB6>);/ + (<U10F7>,<U1CB7>);(<U10F8>,<U1CB8>);(<U10F9>,<U1CB9>);(<U10FA>,<U1CBA>);/ + (<U10FD>,<U1CBD>);(<U10FE>,<U1CBE>);(<U10FF>,<U1CBF>);(<U13F8>,<U13F0>);/ + (<U13F9>,<U13F1>);(<U13FA>,<U13F2>);(<U13FB>,<U13F3>);(<U13FC>,<U13F4>);/ + (<U13FD>,<U13F5>);(<U1C80>,<U0412>);(<U1C81>,<U0414>);(<U1C82>,<U041E>);/ + (<U1C83>,<U0421>);(<U1C84>,<U0422>);(<U1C85>,<U0422>);(<U1C86>,<U042A>);/ + (<U1C87>,<U0462>);(<U1C88>,<UA64A>);(<U1C8A>,<U1C89>);(<U1D79>,<UA77D>);/ + (<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);(<U1E03>,<U1E02>);/ + (<U1E05>,<U1E04>);(<U1E07>,<U1E06>);(<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);/ + (<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);(<U1E13>,<U1E12>);/ + (<U1E15>,<U1E14>);(<U1E17>,<U1E16>);(<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);/ + (<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);(<U1E23>,<U1E22>);/ + (<U1E25>,<U1E24>);(<U1E27>,<U1E26>);(<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);/ + (<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);(<U1E33>,<U1E32>);/ + (<U1E35>,<U1E34>);(<U1E37>,<U1E36>);(<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);/ + (<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);(<U1E43>,<U1E42>);/ + (<U1E45>,<U1E44>);(<U1E47>,<U1E46>);(<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);/ + (<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);(<U1E53>,<U1E52>);/ + (<U1E55>,<U1E54>);(<U1E57>,<U1E56>);(<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);/ + (<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);(<U1E63>,<U1E62>);/ + (<U1E65>,<U1E64>);(<U1E67>,<U1E66>);(<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);/ + (<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);(<U1E73>,<U1E72>);/ + (<U1E75>,<U1E74>);(<U1E77>,<U1E76>);(<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);/ + (<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);(<U1E83>,<U1E82>);/ + (<U1E85>,<U1E84>);(<U1E87>,<U1E86>);(<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);/ + (<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);(<U1E93>,<U1E92>);/ + (<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);/ + (<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);/ + (<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);/ + (<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);/ + (<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);/ + (<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);/ + (<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);/ + (<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);/ + (<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);/ + (<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);/ + (<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);/ + (<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);/ + (<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);(<U1F01>,<U1F09>);/ + (<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);/ + (<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);(<U1F11>,<U1F19>);/ + (<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);/ + (<U1F20>,<U1F28>);(<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);/ + (<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);/ + (<U1F30>,<U1F38>);(<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);/ + (<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);/ + (<U1F40>,<U1F48>);(<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);/ + (<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);/ + (<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);(<U1F61>,<U1F69>);/ + (<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);/ + (<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);/ + (<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);/ + (<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);/ + (<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);/ + (<U1F80>,<U1F88>);(<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);/ + (<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);/ + (<U1F90>,<U1F98>);(<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);/ + (<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);/ + (<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);/ + (<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);/ + (<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);/ + (<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);/ + (<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);(<U214E>,<U2132>);/ + (<U2170>,<U2160>);(<U2171>,<U2161>);(<U2172>,<U2162>);(<U2173>,<U2163>);/ + (<U2174>,<U2164>);(<U2175>,<U2165>);(<U2176>,<U2166>);(<U2177>,<U2167>);/ + (<U2178>,<U2168>);(<U2179>,<U2169>);(<U217A>,<U216A>);(<U217B>,<U216B>);/ + (<U217C>,<U216C>);(<U217D>,<U216D>);(<U217E>,<U216E>);(<U217F>,<U216F>);/ + (<U2184>,<U2183>);(<U24D0>,<U24B6>);(<U24D1>,<U24B7>);(<U24D2>,<U24B8>);/ + (<U24D3>,<U24B9>);(<U24D4>,<U24BA>);(<U24D5>,<U24BB>);(<U24D6>,<U24BC>);/ + (<U24D7>,<U24BD>);(<U24D8>,<U24BE>);(<U24D9>,<U24BF>);(<U24DA>,<U24C0>);/ + (<U24DB>,<U24C1>);(<U24DC>,<U24C2>);(<U24DD>,<U24C3>);(<U24DE>,<U24C4>);/ + (<U24DF>,<U24C5>);(<U24E0>,<U24C6>);(<U24E1>,<U24C7>);(<U24E2>,<U24C8>);/ + (<U24E3>,<U24C9>);(<U24E4>,<U24CA>);(<U24E5>,<U24CB>);(<U24E6>,<U24CC>);/ + (<U24E7>,<U24CD>);(<U24E8>,<U24CE>);(<U24E9>,<U24CF>);(<U2C30>,<U2C00>);/ + (<U2C31>,<U2C01>);(<U2C32>,<U2C02>);(<U2C33>,<U2C03>);(<U2C34>,<U2C04>);/ + (<U2C35>,<U2C05>);(<U2C36>,<U2C06>);(<U2C37>,<U2C07>);(<U2C38>,<U2C08>);/ + (<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);/ + (<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);/ + (<U2C41>,<U2C11>);(<U2C42>,<U2C12>);(<U2C43>,<U2C13>);(<U2C44>,<U2C14>);/ + (<U2C45>,<U2C15>);(<U2C46>,<U2C16>);(<U2C47>,<U2C17>);(<U2C48>,<U2C18>);/ + (<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);/ + (<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);/ + (<U2C51>,<U2C21>);(<U2C52>,<U2C22>);(<U2C53>,<U2C23>);(<U2C54>,<U2C24>);/ + (<U2C55>,<U2C25>);(<U2C56>,<U2C26>);(<U2C57>,<U2C27>);(<U2C58>,<U2C28>);/ + (<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);/ + (<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);/ + (<U2C65>,<U023A>);(<U2C66>,<U023E>);(<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);/ + (<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);(<U2C76>,<U2C75>);(<U2C81>,<U2C80>);/ + (<U2C83>,<U2C82>);(<U2C85>,<U2C84>);(<U2C87>,<U2C86>);(<U2C89>,<U2C88>);/ + (<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);/ + (<U2C93>,<U2C92>);(<U2C95>,<U2C94>);(<U2C97>,<U2C96>);(<U2C99>,<U2C98>);/ + (<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);/ + (<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);/ + (<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);/ + (<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);/ + (<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);/ + (<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);/ + (<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);/ + (<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);/ + (<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);/ + (<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);/ + (<U2D00>,<U10A0>);(<U2D01>,<U10A1>);(<U2D02>,<U10A2>);(<U2D03>,<U10A3>);/ + (<U2D04>,<U10A4>);(<U2D05>,<U10A5>);(<U2D06>,<U10A6>);(<U2D07>,<U10A7>);/ + (<U2D08>,<U10A8>);(<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);/ + (<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);/ + (<U2D10>,<U10B0>);(<U2D11>,<U10B1>);(<U2D12>,<U10B2>);(<U2D13>,<U10B3>);/ + (<U2D14>,<U10B4>);(<U2D15>,<U10B5>);(<U2D16>,<U10B6>);(<U2D17>,<U10B7>);/ + (<U2D18>,<U10B8>);(<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);/ + (<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);/ + (<U2D20>,<U10C0>);(<U2D21>,<U10C1>);(<U2D22>,<U10C2>);(<U2D23>,<U10C3>);/ + (<U2D24>,<U10C4>);(<U2D25>,<U10C5>);(<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);/ + (<UA641>,<UA640>);(<UA643>,<UA642>);(<UA645>,<UA644>);(<UA647>,<UA646>);/ + (<UA649>,<UA648>);(<UA64B>,<UA64A>);(<UA64D>,<UA64C>);(<UA64F>,<UA64E>);/ + (<UA651>,<UA650>);(<UA653>,<UA652>);(<UA655>,<UA654>);(<UA657>,<UA656>);/ + (<UA659>,<UA658>);(<UA65B>,<UA65A>);(<UA65D>,<UA65C>);(<UA65F>,<UA65E>);/ + (<UA661>,<UA660>);(<UA663>,<UA662>);(<UA665>,<UA664>);(<UA667>,<UA666>);/ + (<UA669>,<UA668>);(<UA66B>,<UA66A>);(<UA66D>,<UA66C>);(<UA681>,<UA680>);/ + (<UA683>,<UA682>);(<UA685>,<UA684>);(<UA687>,<UA686>);(<UA689>,<UA688>);/ + (<UA68B>,<UA68A>);(<UA68D>,<UA68C>);(<UA68F>,<UA68E>);(<UA691>,<UA690>);/ + (<UA693>,<UA692>);(<UA695>,<UA694>);(<UA697>,<UA696>);(<UA699>,<UA698>);/ + (<UA69B>,<UA69A>);(<UA723>,<UA722>);(<UA725>,<UA724>);(<UA727>,<UA726>);/ + (<UA729>,<UA728>);(<UA72B>,<UA72A>);(<UA72D>,<UA72C>);(<UA72F>,<UA72E>);/ + (<UA733>,<UA732>);(<UA735>,<UA734>);(<UA737>,<UA736>);(<UA739>,<UA738>);/ + (<UA73B>,<UA73A>);(<UA73D>,<UA73C>);(<UA73F>,<UA73E>);(<UA741>,<UA740>);/ + (<UA743>,<UA742>);(<UA745>,<UA744>);(<UA747>,<UA746>);(<UA749>,<UA748>);/ + (<UA74B>,<UA74A>);(<UA74D>,<UA74C>);(<UA74F>,<UA74E>);(<UA751>,<UA750>);/ + (<UA753>,<UA752>);(<UA755>,<UA754>);(<UA757>,<UA756>);(<UA759>,<UA758>);/ + (<UA75B>,<UA75A>);(<UA75D>,<UA75C>);(<UA75F>,<UA75E>);(<UA761>,<UA760>);/ + (<UA763>,<UA762>);(<UA765>,<UA764>);(<UA767>,<UA766>);(<UA769>,<UA768>);/ + (<UA76B>,<UA76A>);(<UA76D>,<UA76C>);(<UA76F>,<UA76E>);(<UA77A>,<UA779>);/ + (<UA77C>,<UA77B>);(<UA77F>,<UA77E>);(<UA781>,<UA780>);(<UA783>,<UA782>);/ + (<UA785>,<UA784>);(<UA787>,<UA786>);(<UA78C>,<UA78B>);(<UA791>,<UA790>);/ + (<UA793>,<UA792>);(<UA794>,<UA7C4>);(<UA797>,<UA796>);(<UA799>,<UA798>);/ + (<UA79B>,<UA79A>);(<UA79D>,<UA79C>);(<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);/ + (<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);/ + (<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);/ + (<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);/ + (<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);(<UA7CD>,<UA7CC>);(<UA7D1>,<UA7D0>);/ + (<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);(<UA7DB>,<UA7DA>);(<UA7F6>,<UA7F5>);/ + (<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);(<UAB71>,<U13A1>);(<UAB72>,<U13A2>);/ + (<UAB73>,<U13A3>);(<UAB74>,<U13A4>);(<UAB75>,<U13A5>);(<UAB76>,<U13A6>);/ + (<UAB77>,<U13A7>);(<UAB78>,<U13A8>);(<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);/ + (<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);/ + (<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);(<UAB81>,<U13B1>);(<UAB82>,<U13B2>);/ + (<UAB83>,<U13B3>);(<UAB84>,<U13B4>);(<UAB85>,<U13B5>);(<UAB86>,<U13B6>);/ + (<UAB87>,<U13B7>);(<UAB88>,<U13B8>);(<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);/ + (<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);/ + (<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);(<UAB91>,<U13C1>);(<UAB92>,<U13C2>);/ + (<UAB93>,<U13C3>);(<UAB94>,<U13C4>);(<UAB95>,<U13C5>);(<UAB96>,<U13C6>);/ + (<UAB97>,<U13C7>);(<UAB98>,<U13C8>);(<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);/ + (<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);/ + (<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);(<UABA1>,<U13D1>);(<UABA2>,<U13D2>);/ + (<UABA3>,<U13D3>);(<UABA4>,<U13D4>);(<UABA5>,<U13D5>);(<UABA6>,<U13D6>);/ + (<UABA7>,<U13D7>);(<UABA8>,<U13D8>);(<UABA9>,<U13D9>);(<UABAA>,<U13DA>);/ + (<UABAB>,<U13DB>);(<UABAC>,<U13DC>);(<UABAD>,<U13DD>);(<UABAE>,<U13DE>);/ + (<UABAF>,<U13DF>);(<UABB0>,<U13E0>);(<UABB1>,<U13E1>);(<UABB2>,<U13E2>);/ + (<UABB3>,<U13E3>);(<UABB4>,<U13E4>);(<UABB5>,<U13E5>);(<UABB6>,<U13E6>);/ + (<UABB7>,<U13E7>);(<UABB8>,<U13E8>);(<UABB9>,<U13E9>);(<UABBA>,<U13EA>);/ + (<UABBB>,<U13EB>);(<UABBC>,<U13EC>);(<UABBD>,<U13ED>);(<UABBE>,<U13EE>);/ + (<UABBF>,<U13EF>);(<UFF41>,<UFF21>);(<UFF42>,<UFF22>);(<UFF43>,<UFF23>);/ + (<UFF44>,<UFF24>);(<UFF45>,<UFF25>);(<UFF46>,<UFF26>);(<UFF47>,<UFF27>);/ + (<UFF48>,<UFF28>);(<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);/ + (<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);/ + (<UFF50>,<UFF30>);(<UFF51>,<UFF31>);(<UFF52>,<UFF32>);(<UFF53>,<UFF33>);/ + (<UFF54>,<UFF34>);(<UFF55>,<UFF35>);(<UFF56>,<UFF36>);(<UFF57>,<UFF37>);/ + (<UFF58>,<UFF38>);(<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);/ + (<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ + (<U0001042A>,<U00010402>);(<U0001042B>,<U00010403>);/ + (<U0001042C>,<U00010404>);(<U0001042D>,<U00010405>);/ + (<U0001042E>,<U00010406>);(<U0001042F>,<U00010407>);/ + (<U00010430>,<U00010408>);(<U00010431>,<U00010409>);/ + (<U00010432>,<U0001040A>);(<U00010433>,<U0001040B>);/ + (<U00010434>,<U0001040C>);(<U00010435>,<U0001040D>);/ + (<U00010436>,<U0001040E>);(<U00010437>,<U0001040F>);/ + (<U00010438>,<U00010410>);(<U00010439>,<U00010411>);/ + (<U0001043A>,<U00010412>);(<U0001043B>,<U00010413>);/ + (<U0001043C>,<U00010414>);(<U0001043D>,<U00010415>);/ + (<U0001043E>,<U00010416>);(<U0001043F>,<U00010417>);/ + (<U00010440>,<U00010418>);(<U00010441>,<U00010419>);/ + (<U00010442>,<U0001041A>);(<U00010443>,<U0001041B>);/ + (<U00010444>,<U0001041C>);(<U00010445>,<U0001041D>);/ + (<U00010446>,<U0001041E>);(<U00010447>,<U0001041F>);/ + (<U00010448>,<U00010420>);(<U00010449>,<U00010421>);/ + (<U0001044A>,<U00010422>);(<U0001044B>,<U00010423>);/ + (<U0001044C>,<U00010424>);(<U0001044D>,<U00010425>);/ + (<U0001044E>,<U00010426>);(<U0001044F>,<U00010427>);/ + (<U000104D8>,<U000104B0>);(<U000104D9>,<U000104B1>);/ + (<U000104DA>,<U000104B2>);(<U000104DB>,<U000104B3>);/ + (<U000104DC>,<U000104B4>);(<U000104DD>,<U000104B5>);/ + (<U000104DE>,<U000104B6>);(<U000104DF>,<U000104B7>);/ + (<U000104E0>,<U000104B8>);(<U000104E1>,<U000104B9>);/ + (<U000104E2>,<U000104BA>);(<U000104E3>,<U000104BB>);/ + (<U000104E4>,<U000104BC>);(<U000104E5>,<U000104BD>);/ + (<U000104E6>,<U000104BE>);(<U000104E7>,<U000104BF>);/ + (<U000104E8>,<U000104C0>);(<U000104E9>,<U000104C1>);/ + (<U000104EA>,<U000104C2>);(<U000104EB>,<U000104C3>);/ + (<U000104EC>,<U000104C4>);(<U000104ED>,<U000104C5>);/ + (<U000104EE>,<U000104C6>);(<U000104EF>,<U000104C7>);/ + (<U000104F0>,<U000104C8>);(<U000104F1>,<U000104C9>);/ + (<U000104F2>,<U000104CA>);(<U000104F3>,<U000104CB>);/ + (<U000104F4>,<U000104CC>);(<U000104F5>,<U000104CD>);/ + (<U000104F6>,<U000104CE>);(<U000104F7>,<U000104CF>);/ + (<U000104F8>,<U000104D0>);(<U000104F9>,<U000104D1>);/ + (<U000104FA>,<U000104D2>);(<U000104FB>,<U000104D3>);/ + (<U00010597>,<U00010570>);(<U00010598>,<U00010571>);/ + (<U00010599>,<U00010572>);(<U0001059A>,<U00010573>);/ + (<U0001059B>,<U00010574>);(<U0001059C>,<U00010575>);/ + (<U0001059D>,<U00010576>);(<U0001059E>,<U00010577>);/ + (<U0001059F>,<U00010578>);(<U000105A0>,<U00010579>);/ + (<U000105A1>,<U0001057A>);(<U000105A3>,<U0001057C>);/ + (<U000105A4>,<U0001057D>);(<U000105A5>,<U0001057E>);/ + (<U000105A6>,<U0001057F>);(<U000105A7>,<U00010580>);/ + (<U000105A8>,<U00010581>);(<U000105A9>,<U00010582>);/ + (<U000105AA>,<U00010583>);(<U000105AB>,<U00010584>);/ + (<U000105AC>,<U00010585>);(<U000105AD>,<U00010586>);/ + (<U000105AE>,<U00010587>);(<U000105AF>,<U00010588>);/ + (<U000105B0>,<U00010589>);(<U000105B1>,<U0001058A>);/ + (<U000105B3>,<U0001058C>);(<U000105B4>,<U0001058D>);/ + (<U000105B5>,<U0001058E>);(<U000105B6>,<U0001058F>);/ + (<U000105B7>,<U00010590>);(<U000105B8>,<U00010591>);/ + (<U000105B9>,<U00010592>);(<U000105BB>,<U00010594>);/ + (<U000105BC>,<U00010595>);(<U00010CC0>,<U00010C80>);/ + (<U00010CC1>,<U00010C81>);(<U00010CC2>,<U00010C82>);/ + (<U00010CC3>,<U00010C83>);(<U00010CC4>,<U00010C84>);/ + (<U00010CC5>,<U00010C85>);(<U00010CC6>,<U00010C86>);/ + (<U00010CC7>,<U00010C87>);(<U00010CC8>,<U00010C88>);/ + (<U00010CC9>,<U00010C89>);(<U00010CCA>,<U00010C8A>);/ + (<U00010CCB>,<U00010C8B>);(<U00010CCC>,<U00010C8C>);/ + (<U00010CCD>,<U00010C8D>);(<U00010CCE>,<U00010C8E>);/ + (<U00010CCF>,<U00010C8F>);(<U00010CD0>,<U00010C90>);/ + (<U00010CD1>,<U00010C91>);(<U00010CD2>,<U00010C92>);/ + (<U00010CD3>,<U00010C93>);(<U00010CD4>,<U00010C94>);/ + (<U00010CD5>,<U00010C95>);(<U00010CD6>,<U00010C96>);/ + (<U00010CD7>,<U00010C97>);(<U00010CD8>,<U00010C98>);/ + (<U00010CD9>,<U00010C99>);(<U00010CDA>,<U00010C9A>);/ + (<U00010CDB>,<U00010C9B>);(<U00010CDC>,<U00010C9C>);/ + (<U00010CDD>,<U00010C9D>);(<U00010CDE>,<U00010C9E>);/ + (<U00010CDF>,<U00010C9F>);(<U00010CE0>,<U00010CA0>);/ + (<U00010CE1>,<U00010CA1>);(<U00010CE2>,<U00010CA2>);/ + (<U00010CE3>,<U00010CA3>);(<U00010CE4>,<U00010CA4>);/ + (<U00010CE5>,<U00010CA5>);(<U00010CE6>,<U00010CA6>);/ + (<U00010CE7>,<U00010CA7>);(<U00010CE8>,<U00010CA8>);/ + (<U00010CE9>,<U00010CA9>);(<U00010CEA>,<U00010CAA>);/ + (<U00010CEB>,<U00010CAB>);(<U00010CEC>,<U00010CAC>);/ + (<U00010CED>,<U00010CAD>);(<U00010CEE>,<U00010CAE>);/ + (<U00010CEF>,<U00010CAF>);(<U00010CF0>,<U00010CB0>);/ + (<U00010CF1>,<U00010CB1>);(<U00010CF2>,<U00010CB2>);/ + (<U00010D70>,<U00010D50>);(<U00010D71>,<U00010D51>);/ + (<U00010D72>,<U00010D52>);(<U00010D73>,<U00010D53>);/ + (<U00010D74>,<U00010D54>);(<U00010D75>,<U00010D55>);/ + (<U00010D76>,<U00010D56>);(<U00010D77>,<U00010D57>);/ + (<U00010D78>,<U00010D58>);(<U00010D79>,<U00010D59>);/ + (<U00010D7A>,<U00010D5A>);(<U00010D7B>,<U00010D5B>);/ + (<U00010D7C>,<U00010D5C>);(<U00010D7D>,<U00010D5D>);/ + (<U00010D7E>,<U00010D5E>);(<U00010D7F>,<U00010D5F>);/ + (<U00010D80>,<U00010D60>);(<U00010D81>,<U00010D61>);/ + (<U00010D82>,<U00010D62>);(<U00010D83>,<U00010D63>);/ + (<U00010D84>,<U00010D64>);(<U00010D85>,<U00010D65>);/ + (<U000118C0>,<U000118A0>);(<U000118C1>,<U000118A1>);/ + (<U000118C2>,<U000118A2>);(<U000118C3>,<U000118A3>);/ + (<U000118C4>,<U000118A4>);(<U000118C5>,<U000118A5>);/ + (<U000118C6>,<U000118A6>);(<U000118C7>,<U000118A7>);/ + (<U000118C8>,<U000118A8>);(<U000118C9>,<U000118A9>);/ + (<U000118CA>,<U000118AA>);(<U000118CB>,<U000118AB>);/ + (<U000118CC>,<U000118AC>);(<U000118CD>,<U000118AD>);/ + (<U000118CE>,<U000118AE>);(<U000118CF>,<U000118AF>);/ + (<U000118D0>,<U000118B0>);(<U000118D1>,<U000118B1>);/ + (<U000118D2>,<U000118B2>);(<U000118D3>,<U000118B3>);/ + (<U000118D4>,<U000118B4>);(<U000118D5>,<U000118B5>);/ + (<U000118D6>,<U000118B6>);(<U000118D7>,<U000118B7>);/ + (<U000118D8>,<U000118B8>);(<U000118D9>,<U000118B9>);/ + (<U000118DA>,<U000118BA>);(<U000118DB>,<U000118BB>);/ + (<U000118DC>,<U000118BC>);(<U000118DD>,<U000118BD>);/ + (<U000118DE>,<U000118BE>);(<U000118DF>,<U000118BF>);/ + (<U00016E60>,<U00016E40>);(<U00016E61>,<U00016E41>);/ + (<U00016E62>,<U00016E42>);(<U00016E63>,<U00016E43>);/ + (<U00016E64>,<U00016E44>);(<U00016E65>,<U00016E45>);/ + (<U00016E66>,<U00016E46>);(<U00016E67>,<U00016E47>);/ + (<U00016E68>,<U00016E48>);(<U00016E69>,<U00016E49>);/ + (<U00016E6A>,<U00016E4A>);(<U00016E6B>,<U00016E4B>);/ + (<U00016E6C>,<U00016E4C>);(<U00016E6D>,<U00016E4D>);/ + (<U00016E6E>,<U00016E4E>);(<U00016E6F>,<U00016E4F>);/ + (<U00016E70>,<U00016E50>);(<U00016E71>,<U00016E51>);/ + (<U00016E72>,<U00016E52>);(<U00016E73>,<U00016E53>);/ + (<U00016E74>,<U00016E54>);(<U00016E75>,<U00016E55>);/ + (<U00016E76>,<U00016E56>);(<U00016E77>,<U00016E57>);/ + (<U00016E78>,<U00016E58>);(<U00016E79>,<U00016E59>);/ + (<U00016E7A>,<U00016E5A>);(<U00016E7B>,<U00016E5B>);/ + (<U00016E7C>,<U00016E5C>);(<U00016E7D>,<U00016E5D>);/ + (<U00016E7E>,<U00016E5E>);(<U00016E7F>,<U00016E5F>);/ + (<U0001E922>,<U0001E900>);(<U0001E923>,<U0001E901>);/ + (<U0001E924>,<U0001E902>);(<U0001E925>,<U0001E903>);/ + (<U0001E926>,<U0001E904>);(<U0001E927>,<U0001E905>);/ + (<U0001E928>,<U0001E906>);(<U0001E929>,<U0001E907>);/ + (<U0001E92A>,<U0001E908>);(<U0001E92B>,<U0001E909>);/ + (<U0001E92C>,<U0001E90A>);(<U0001E92D>,<U0001E90B>);/ + (<U0001E92E>,<U0001E90C>);(<U0001E92F>,<U0001E90D>);/ + (<U0001E930>,<U0001E90E>);(<U0001E931>,<U0001E90F>);/ + (<U0001E932>,<U0001E910>);(<U0001E933>,<U0001E911>);/ + (<U0001E934>,<U0001E912>);(<U0001E935>,<U0001E913>);/ + (<U0001E936>,<U0001E914>);(<U0001E937>,<U0001E915>);/ + (<U0001E938>,<U0001E916>);(<U0001E939>,<U0001E917>);/ + (<U0001E93A>,<U0001E918>);(<U0001E93B>,<U0001E919>);/ + (<U0001E93C>,<U0001E91A>);(<U0001E93D>,<U0001E91B>);/ + (<U0001E93E>,<U0001E91C>);(<U0001E93F>,<U0001E91D>);/ + (<U0001E940>,<U0001E91E>);(<U0001E941>,<U0001E91F>);/ + (<U0001E942>,<U0001E920>);(<U0001E943>,<U0001E921>) tolower / (<U0041>,<U0061>);(<U0042>,<U0062>);(<U0043>,<U0063>);(<U0044>,<U0064>);/ @@ -1852,281 +1907,294 @@ tolower / (<U13E7>,<UABB7>);(<U13E8>,<UABB8>);(<U13E9>,<UABB9>);(<U13EA>,<UABBA>);/ (<U13EB>,<UABBB>);(<U13EC>,<UABBC>);(<U13ED>,<UABBD>);(<U13EE>,<UABBE>);/ (<U13EF>,<UABBF>);(<U13F0>,<U13F8>);(<U13F1>,<U13F9>);(<U13F2>,<U13FA>);/ - (<U13F3>,<U13FB>);(<U13F4>,<U13FC>);(<U13F5>,<U13FD>);(<U1C90>,<U10D0>);/ - (<U1C91>,<U10D1>);(<U1C92>,<U10D2>);(<U1C93>,<U10D3>);(<U1C94>,<U10D4>);/ - (<U1C95>,<U10D5>);(<U1C96>,<U10D6>);(<U1C97>,<U10D7>);(<U1C98>,<U10D8>);/ - (<U1C99>,<U10D9>);(<U1C9A>,<U10DA>);(<U1C9B>,<U10DB>);(<U1C9C>,<U10DC>);/ - (<U1C9D>,<U10DD>);(<U1C9E>,<U10DE>);(<U1C9F>,<U10DF>);(<U1CA0>,<U10E0>);/ - (<U1CA1>,<U10E1>);(<U1CA2>,<U10E2>);(<U1CA3>,<U10E3>);(<U1CA4>,<U10E4>);/ - (<U1CA5>,<U10E5>);(<U1CA6>,<U10E6>);(<U1CA7>,<U10E7>);(<U1CA8>,<U10E8>);/ - (<U1CA9>,<U10E9>);(<U1CAA>,<U10EA>);(<U1CAB>,<U10EB>);(<U1CAC>,<U10EC>);/ - (<U1CAD>,<U10ED>);(<U1CAE>,<U10EE>);(<U1CAF>,<U10EF>);(<U1CB0>,<U10F0>);/ - (<U1CB1>,<U10F1>);(<U1CB2>,<U10F2>);(<U1CB3>,<U10F3>);(<U1CB4>,<U10F4>);/ - (<U1CB5>,<U10F5>);(<U1CB6>,<U10F6>);(<U1CB7>,<U10F7>);(<U1CB8>,<U10F8>);/ - (<U1CB9>,<U10F9>);(<U1CBA>,<U10FA>);(<U1CBD>,<U10FD>);(<U1CBE>,<U10FE>);/ - (<U1CBF>,<U10FF>);(<U1E00>,<U1E01>);(<U1E02>,<U1E03>);(<U1E04>,<U1E05>);/ - (<U1E06>,<U1E07>);(<U1E08>,<U1E09>);(<U1E0A>,<U1E0B>);(<U1E0C>,<U1E0D>);/ - (<U1E0E>,<U1E0F>);(<U1E10>,<U1E11>);(<U1E12>,<U1E13>);(<U1E14>,<U1E15>);/ - (<U1E16>,<U1E17>);(<U1E18>,<U1E19>);(<U1E1A>,<U1E1B>);(<U1E1C>,<U1E1D>);/ - (<U1E1E>,<U1E1F>);(<U1E20>,<U1E21>);(<U1E22>,<U1E23>);(<U1E24>,<U1E25>);/ - (<U1E26>,<U1E27>);(<U1E28>,<U1E29>);(<U1E2A>,<U1E2B>);(<U1E2C>,<U1E2D>);/ - (<U1E2E>,<U1E2F>);(<U1E30>,<U1E31>);(<U1E32>,<U1E33>);(<U1E34>,<U1E35>);/ - (<U1E36>,<U1E37>);(<U1E38>,<U1E39>);(<U1E3A>,<U1E3B>);(<U1E3C>,<U1E3D>);/ - (<U1E3E>,<U1E3F>);(<U1E40>,<U1E41>);(<U1E42>,<U1E43>);(<U1E44>,<U1E45>);/ - (<U1E46>,<U1E47>);(<U1E48>,<U1E49>);(<U1E4A>,<U1E4B>);(<U1E4C>,<U1E4D>);/ - (<U1E4E>,<U1E4F>);(<U1E50>,<U1E51>);(<U1E52>,<U1E53>);(<U1E54>,<U1E55>);/ - (<U1E56>,<U1E57>);(<U1E58>,<U1E59>);(<U1E5A>,<U1E5B>);(<U1E5C>,<U1E5D>);/ - (<U1E5E>,<U1E5F>);(<U1E60>,<U1E61>);(<U1E62>,<U1E63>);(<U1E64>,<U1E65>);/ - (<U1E66>,<U1E67>);(<U1E68>,<U1E69>);(<U1E6A>,<U1E6B>);(<U1E6C>,<U1E6D>);/ - (<U1E6E>,<U1E6F>);(<U1E70>,<U1E71>);(<U1E72>,<U1E73>);(<U1E74>,<U1E75>);/ - (<U1E76>,<U1E77>);(<U1E78>,<U1E79>);(<U1E7A>,<U1E7B>);(<U1E7C>,<U1E7D>);/ - (<U1E7E>,<U1E7F>);(<U1E80>,<U1E81>);(<U1E82>,<U1E83>);(<U1E84>,<U1E85>);/ - (<U1E86>,<U1E87>);(<U1E88>,<U1E89>);(<U1E8A>,<U1E8B>);(<U1E8C>,<U1E8D>);/ - (<U1E8E>,<U1E8F>);(<U1E90>,<U1E91>);(<U1E92>,<U1E93>);(<U1E94>,<U1E95>);/ - (<U1E9E>,<U00DF>);(<U1EA0>,<U1EA1>);(<U1EA2>,<U1EA3>);(<U1EA4>,<U1EA5>);/ - (<U1EA6>,<U1EA7>);(<U1EA8>,<U1EA9>);(<U1EAA>,<U1EAB>);(<U1EAC>,<U1EAD>);/ - (<U1EAE>,<U1EAF>);(<U1EB0>,<U1EB1>);(<U1EB2>,<U1EB3>);(<U1EB4>,<U1EB5>);/ - (<U1EB6>,<U1EB7>);(<U1EB8>,<U1EB9>);(<U1EBA>,<U1EBB>);(<U1EBC>,<U1EBD>);/ - (<U1EBE>,<U1EBF>);(<U1EC0>,<U1EC1>);(<U1EC2>,<U1EC3>);(<U1EC4>,<U1EC5>);/ - (<U1EC6>,<U1EC7>);(<U1EC8>,<U1EC9>);(<U1ECA>,<U1ECB>);(<U1ECC>,<U1ECD>);/ - (<U1ECE>,<U1ECF>);(<U1ED0>,<U1ED1>);(<U1ED2>,<U1ED3>);(<U1ED4>,<U1ED5>);/ - (<U1ED6>,<U1ED7>);(<U1ED8>,<U1ED9>);(<U1EDA>,<U1EDB>);(<U1EDC>,<U1EDD>);/ - (<U1EDE>,<U1EDF>);(<U1EE0>,<U1EE1>);(<U1EE2>,<U1EE3>);(<U1EE4>,<U1EE5>);/ - (<U1EE6>,<U1EE7>);(<U1EE8>,<U1EE9>);(<U1EEA>,<U1EEB>);(<U1EEC>,<U1EED>);/ - (<U1EEE>,<U1EEF>);(<U1EF0>,<U1EF1>);(<U1EF2>,<U1EF3>);(<U1EF4>,<U1EF5>);/ - (<U1EF6>,<U1EF7>);(<U1EF8>,<U1EF9>);(<U1EFA>,<U1EFB>);(<U1EFC>,<U1EFD>);/ - (<U1EFE>,<U1EFF>);(<U1F08>,<U1F00>);(<U1F09>,<U1F01>);(<U1F0A>,<U1F02>);/ - (<U1F0B>,<U1F03>);(<U1F0C>,<U1F04>);(<U1F0D>,<U1F05>);(<U1F0E>,<U1F06>);/ - (<U1F0F>,<U1F07>);(<U1F18>,<U1F10>);(<U1F19>,<U1F11>);(<U1F1A>,<U1F12>);/ - (<U1F1B>,<U1F13>);(<U1F1C>,<U1F14>);(<U1F1D>,<U1F15>);(<U1F28>,<U1F20>);/ - (<U1F29>,<U1F21>);(<U1F2A>,<U1F22>);(<U1F2B>,<U1F23>);(<U1F2C>,<U1F24>);/ - (<U1F2D>,<U1F25>);(<U1F2E>,<U1F26>);(<U1F2F>,<U1F27>);(<U1F38>,<U1F30>);/ - (<U1F39>,<U1F31>);(<U1F3A>,<U1F32>);(<U1F3B>,<U1F33>);(<U1F3C>,<U1F34>);/ - (<U1F3D>,<U1F35>);(<U1F3E>,<U1F36>);(<U1F3F>,<U1F37>);(<U1F48>,<U1F40>);/ - (<U1F49>,<U1F41>);(<U1F4A>,<U1F42>);(<U1F4B>,<U1F43>);(<U1F4C>,<U1F44>);/ - (<U1F4D>,<U1F45>);(<U1F59>,<U1F51>);(<U1F5B>,<U1F53>);(<U1F5D>,<U1F55>);/ - (<U1F5F>,<U1F57>);(<U1F68>,<U1F60>);(<U1F69>,<U1F61>);(<U1F6A>,<U1F62>);/ - (<U1F6B>,<U1F63>);(<U1F6C>,<U1F64>);(<U1F6D>,<U1F65>);(<U1F6E>,<U1F66>);/ - (<U1F6F>,<U1F67>);(<U1F88>,<U1F80>);(<U1F89>,<U1F81>);(<U1F8A>,<U1F82>);/ - (<U1F8B>,<U1F83>);(<U1F8C>,<U1F84>);(<U1F8D>,<U1F85>);(<U1F8E>,<U1F86>);/ - (<U1F8F>,<U1F87>);(<U1F98>,<U1F90>);(<U1F99>,<U1F91>);(<U1F9A>,<U1F92>);/ - (<U1F9B>,<U1F93>);(<U1F9C>,<U1F94>);(<U1F9D>,<U1F95>);(<U1F9E>,<U1F96>);/ - (<U1F9F>,<U1F97>);(<U1FA8>,<U1FA0>);(<U1FA9>,<U1FA1>);(<U1FAA>,<U1FA2>);/ - (<U1FAB>,<U1FA3>);(<U1FAC>,<U1FA4>);(<U1FAD>,<U1FA5>);(<U1FAE>,<U1FA6>);/ - (<U1FAF>,<U1FA7>);(<U1FB8>,<U1FB0>);(<U1FB9>,<U1FB1>);(<U1FBA>,<U1F70>);/ - (<U1FBB>,<U1F71>);(<U1FBC>,<U1FB3>);(<U1FC8>,<U1F72>);(<U1FC9>,<U1F73>);/ - (<U1FCA>,<U1F74>);(<U1FCB>,<U1F75>);(<U1FCC>,<U1FC3>);(<U1FD8>,<U1FD0>);/ - (<U1FD9>,<U1FD1>);(<U1FDA>,<U1F76>);(<U1FDB>,<U1F77>);(<U1FE8>,<U1FE0>);/ - (<U1FE9>,<U1FE1>);(<U1FEA>,<U1F7A>);(<U1FEB>,<U1F7B>);(<U1FEC>,<U1FE5>);/ - (<U1FF8>,<U1F78>);(<U1FF9>,<U1F79>);(<U1FFA>,<U1F7C>);(<U1FFB>,<U1F7D>);/ - (<U1FFC>,<U1FF3>);(<U2126>,<U03C9>);(<U212A>,<U006B>);(<U212B>,<U00E5>);/ - (<U2132>,<U214E>);(<U2160>,<U2170>);(<U2161>,<U2171>);(<U2162>,<U2172>);/ - (<U2163>,<U2173>);(<U2164>,<U2174>);(<U2165>,<U2175>);(<U2166>,<U2176>);/ - (<U2167>,<U2177>);(<U2168>,<U2178>);(<U2169>,<U2179>);(<U216A>,<U217A>);/ - (<U216B>,<U217B>);(<U216C>,<U217C>);(<U216D>,<U217D>);(<U216E>,<U217E>);/ - (<U216F>,<U217F>);(<U2183>,<U2184>);(<U24B6>,<U24D0>);(<U24B7>,<U24D1>);/ - (<U24B8>,<U24D2>);(<U24B9>,<U24D3>);(<U24BA>,<U24D4>);(<U24BB>,<U24D5>);/ - (<U24BC>,<U24D6>);(<U24BD>,<U24D7>);(<U24BE>,<U24D8>);(<U24BF>,<U24D9>);/ - (<U24C0>,<U24DA>);(<U24C1>,<U24DB>);(<U24C2>,<U24DC>);(<U24C3>,<U24DD>);/ - (<U24C4>,<U24DE>);(<U24C5>,<U24DF>);(<U24C6>,<U24E0>);(<U24C7>,<U24E1>);/ - (<U24C8>,<U24E2>);(<U24C9>,<U24E3>);(<U24CA>,<U24E4>);(<U24CB>,<U24E5>);/ - (<U24CC>,<U24E6>);(<U24CD>,<U24E7>);(<U24CE>,<U24E8>);(<U24CF>,<U24E9>);/ - (<U2C00>,<U2C30>);(<U2C01>,<U2C31>);(<U2C02>,<U2C32>);(<U2C03>,<U2C33>);/ - (<U2C04>,<U2C34>);(<U2C05>,<U2C35>);(<U2C06>,<U2C36>);(<U2C07>,<U2C37>);/ - (<U2C08>,<U2C38>);(<U2C09>,<U2C39>);(<U2C0A>,<U2C3A>);(<U2C0B>,<U2C3B>);/ - (<U2C0C>,<U2C3C>);(<U2C0D>,<U2C3D>);(<U2C0E>,<U2C3E>);(<U2C0F>,<U2C3F>);/ - (<U2C10>,<U2C40>);(<U2C11>,<U2C41>);(<U2C12>,<U2C42>);(<U2C13>,<U2C43>);/ - (<U2C14>,<U2C44>);(<U2C15>,<U2C45>);(<U2C16>,<U2C46>);(<U2C17>,<U2C47>);/ - (<U2C18>,<U2C48>);(<U2C19>,<U2C49>);(<U2C1A>,<U2C4A>);(<U2C1B>,<U2C4B>);/ - (<U2C1C>,<U2C4C>);(<U2C1D>,<U2C4D>);(<U2C1E>,<U2C4E>);(<U2C1F>,<U2C4F>);/ - (<U2C20>,<U2C50>);(<U2C21>,<U2C51>);(<U2C22>,<U2C52>);(<U2C23>,<U2C53>);/ - (<U2C24>,<U2C54>);(<U2C25>,<U2C55>);(<U2C26>,<U2C56>);(<U2C27>,<U2C57>);/ - (<U2C28>,<U2C58>);(<U2C29>,<U2C59>);(<U2C2A>,<U2C5A>);(<U2C2B>,<U2C5B>);/ - (<U2C2C>,<U2C5C>);(<U2C2D>,<U2C5D>);(<U2C2E>,<U2C5E>);(<U2C2F>,<U2C5F>);/ - (<U2C60>,<U2C61>);(<U2C62>,<U026B>);(<U2C63>,<U1D7D>);(<U2C64>,<U027D>);/ - (<U2C67>,<U2C68>);(<U2C69>,<U2C6A>);(<U2C6B>,<U2C6C>);(<U2C6D>,<U0251>);/ - (<U2C6E>,<U0271>);(<U2C6F>,<U0250>);(<U2C70>,<U0252>);(<U2C72>,<U2C73>);/ - (<U2C75>,<U2C76>);(<U2C7E>,<U023F>);(<U2C7F>,<U0240>);(<U2C80>,<U2C81>);/ - (<U2C82>,<U2C83>);(<U2C84>,<U2C85>);(<U2C86>,<U2C87>);(<U2C88>,<U2C89>);/ - (<U2C8A>,<U2C8B>);(<U2C8C>,<U2C8D>);(<U2C8E>,<U2C8F>);(<U2C90>,<U2C91>);/ - (<U2C92>,<U2C93>);(<U2C94>,<U2C95>);(<U2C96>,<U2C97>);(<U2C98>,<U2C99>);/ - (<U2C9A>,<U2C9B>);(<U2C9C>,<U2C9D>);(<U2C9E>,<U2C9F>);(<U2CA0>,<U2CA1>);/ - (<U2CA2>,<U2CA3>);(<U2CA4>,<U2CA5>);(<U2CA6>,<U2CA7>);(<U2CA8>,<U2CA9>);/ - (<U2CAA>,<U2CAB>);(<U2CAC>,<U2CAD>);(<U2CAE>,<U2CAF>);(<U2CB0>,<U2CB1>);/ - (<U2CB2>,<U2CB3>);(<U2CB4>,<U2CB5>);(<U2CB6>,<U2CB7>);(<U2CB8>,<U2CB9>);/ - (<U2CBA>,<U2CBB>);(<U2CBC>,<U2CBD>);(<U2CBE>,<U2CBF>);(<U2CC0>,<U2CC1>);/ - (<U2CC2>,<U2CC3>);(<U2CC4>,<U2CC5>);(<U2CC6>,<U2CC7>);(<U2CC8>,<U2CC9>);/ - (<U2CCA>,<U2CCB>);(<U2CCC>,<U2CCD>);(<U2CCE>,<U2CCF>);(<U2CD0>,<U2CD1>);/ - (<U2CD2>,<U2CD3>);(<U2CD4>,<U2CD5>);(<U2CD6>,<U2CD7>);(<U2CD8>,<U2CD9>);/ - (<U2CDA>,<U2CDB>);(<U2CDC>,<U2CDD>);(<U2CDE>,<U2CDF>);(<U2CE0>,<U2CE1>);/ - (<U2CE2>,<U2CE3>);(<U2CEB>,<U2CEC>);(<U2CED>,<U2CEE>);(<U2CF2>,<U2CF3>);/ - (<UA640>,<UA641>);(<UA642>,<UA643>);(<UA644>,<UA645>);(<UA646>,<UA647>);/ - (<UA648>,<UA649>);(<UA64A>,<UA64B>);(<UA64C>,<UA64D>);(<UA64E>,<UA64F>);/ - (<UA650>,<UA651>);(<UA652>,<UA653>);(<UA654>,<UA655>);(<UA656>,<UA657>);/ - (<UA658>,<UA659>);(<UA65A>,<UA65B>);(<UA65C>,<UA65D>);(<UA65E>,<UA65F>);/ - (<UA660>,<UA661>);(<UA662>,<UA663>);(<UA664>,<UA665>);(<UA666>,<UA667>);/ - (<UA668>,<UA669>);(<UA66A>,<UA66B>);(<UA66C>,<UA66D>);(<UA680>,<UA681>);/ - (<UA682>,<UA683>);(<UA684>,<UA685>);(<UA686>,<UA687>);(<UA688>,<UA689>);/ - (<UA68A>,<UA68B>);(<UA68C>,<UA68D>);(<UA68E>,<UA68F>);(<UA690>,<UA691>);/ - (<UA692>,<UA693>);(<UA694>,<UA695>);(<UA696>,<UA697>);(<UA698>,<UA699>);/ - (<UA69A>,<UA69B>);(<UA722>,<UA723>);(<UA724>,<UA725>);(<UA726>,<UA727>);/ - (<UA728>,<UA729>);(<UA72A>,<UA72B>);(<UA72C>,<UA72D>);(<UA72E>,<UA72F>);/ - (<UA732>,<UA733>);(<UA734>,<UA735>);(<UA736>,<UA737>);(<UA738>,<UA739>);/ - (<UA73A>,<UA73B>);(<UA73C>,<UA73D>);(<UA73E>,<UA73F>);(<UA740>,<UA741>);/ - (<UA742>,<UA743>);(<UA744>,<UA745>);(<UA746>,<UA747>);(<UA748>,<UA749>);/ - (<UA74A>,<UA74B>);(<UA74C>,<UA74D>);(<UA74E>,<UA74F>);(<UA750>,<UA751>);/ - (<UA752>,<UA753>);(<UA754>,<UA755>);(<UA756>,<UA757>);(<UA758>,<UA759>);/ - (<UA75A>,<UA75B>);(<UA75C>,<UA75D>);(<UA75E>,<UA75F>);(<UA760>,<UA761>);/ - (<UA762>,<UA763>);(<UA764>,<UA765>);(<UA766>,<UA767>);(<UA768>,<UA769>);/ - (<UA76A>,<UA76B>);(<UA76C>,<UA76D>);(<UA76E>,<UA76F>);(<UA779>,<UA77A>);/ - (<UA77B>,<UA77C>);(<UA77D>,<U1D79>);(<UA77E>,<UA77F>);(<UA780>,<UA781>);/ - (<UA782>,<UA783>);(<UA784>,<UA785>);(<UA786>,<UA787>);(<UA78B>,<UA78C>);/ - (<UA78D>,<U0265>);(<UA790>,<UA791>);(<UA792>,<UA793>);(<UA796>,<UA797>);/ - (<UA798>,<UA799>);(<UA79A>,<UA79B>);(<UA79C>,<UA79D>);(<UA79E>,<UA79F>);/ - (<UA7A0>,<UA7A1>);(<UA7A2>,<UA7A3>);(<UA7A4>,<UA7A5>);(<UA7A6>,<UA7A7>);/ - (<UA7A8>,<UA7A9>);(<UA7AA>,<U0266>);(<UA7AB>,<U025C>);(<UA7AC>,<U0261>);/ - (<UA7AD>,<U026C>);(<UA7AE>,<U026A>);(<UA7B0>,<U029E>);(<UA7B1>,<U0287>);/ - (<UA7B2>,<U029D>);(<UA7B3>,<UAB53>);(<UA7B4>,<UA7B5>);(<UA7B6>,<UA7B7>);/ - (<UA7B8>,<UA7B9>);(<UA7BA>,<UA7BB>);(<UA7BC>,<UA7BD>);(<UA7BE>,<UA7BF>);/ - (<UA7C0>,<UA7C1>);(<UA7C2>,<UA7C3>);(<UA7C4>,<UA794>);(<UA7C5>,<U0282>);/ - (<UA7C6>,<U1D8E>);(<UA7C7>,<UA7C8>);(<UA7C9>,<UA7CA>);(<UA7D0>,<UA7D1>);/ - (<UA7D6>,<UA7D7>);(<UA7D8>,<UA7D9>);(<UA7F5>,<UA7F6>);(<UFF21>,<UFF41>);/ - (<UFF22>,<UFF42>);(<UFF23>,<UFF43>);(<UFF24>,<UFF44>);(<UFF25>,<UFF45>);/ - (<UFF26>,<UFF46>);(<UFF27>,<UFF47>);(<UFF28>,<UFF48>);(<UFF29>,<UFF49>);/ - (<UFF2A>,<UFF4A>);(<UFF2B>,<UFF4B>);(<UFF2C>,<UFF4C>);(<UFF2D>,<UFF4D>);/ - (<UFF2E>,<UFF4E>);(<UFF2F>,<UFF4F>);(<UFF30>,<UFF50>);(<UFF31>,<UFF51>);/ - (<UFF32>,<UFF52>);(<UFF33>,<UFF53>);(<UFF34>,<UFF54>);(<UFF35>,<UFF55>);/ - (<UFF36>,<UFF56>);(<UFF37>,<UFF57>);(<UFF38>,<UFF58>);(<UFF39>,<UFF59>);/ - (<UFF3A>,<UFF5A>);(<U00010400>,<U00010428>);(<U00010401>,<U00010429>);/ - (<U00010402>,<U0001042A>);(<U00010403>,<U0001042B>);/ - (<U00010404>,<U0001042C>);(<U00010405>,<U0001042D>);/ - (<U00010406>,<U0001042E>);(<U00010407>,<U0001042F>);/ - (<U00010408>,<U00010430>);(<U00010409>,<U00010431>);/ - (<U0001040A>,<U00010432>);(<U0001040B>,<U00010433>);/ - (<U0001040C>,<U00010434>);(<U0001040D>,<U00010435>);/ - (<U0001040E>,<U00010436>);(<U0001040F>,<U00010437>);/ - (<U00010410>,<U00010438>);(<U00010411>,<U00010439>);/ - (<U00010412>,<U0001043A>);(<U00010413>,<U0001043B>);/ - (<U00010414>,<U0001043C>);(<U00010415>,<U0001043D>);/ - (<U00010416>,<U0001043E>);(<U00010417>,<U0001043F>);/ - (<U00010418>,<U00010440>);(<U00010419>,<U00010441>);/ - (<U0001041A>,<U00010442>);(<U0001041B>,<U00010443>);/ - (<U0001041C>,<U00010444>);(<U0001041D>,<U00010445>);/ - (<U0001041E>,<U00010446>);(<U0001041F>,<U00010447>);/ - (<U00010420>,<U00010448>);(<U00010421>,<U00010449>);/ - (<U00010422>,<U0001044A>);(<U00010423>,<U0001044B>);/ - (<U00010424>,<U0001044C>);(<U00010425>,<U0001044D>);/ - (<U00010426>,<U0001044E>);(<U00010427>,<U0001044F>);/ - (<U000104B0>,<U000104D8>);(<U000104B1>,<U000104D9>);/ - (<U000104B2>,<U000104DA>);(<U000104B3>,<U000104DB>);/ - (<U000104B4>,<U000104DC>);(<U000104B5>,<U000104DD>);/ - (<U000104B6>,<U000104DE>);(<U000104B7>,<U000104DF>);/ - (<U000104B8>,<U000104E0>);(<U000104B9>,<U000104E1>);/ - (<U000104BA>,<U000104E2>);(<U000104BB>,<U000104E3>);/ - (<U000104BC>,<U000104E4>);(<U000104BD>,<U000104E5>);/ - (<U000104BE>,<U000104E6>);(<U000104BF>,<U000104E7>);/ - (<U000104C0>,<U000104E8>);(<U000104C1>,<U000104E9>);/ - (<U000104C2>,<U000104EA>);(<U000104C3>,<U000104EB>);/ - (<U000104C4>,<U000104EC>);(<U000104C5>,<U000104ED>);/ - (<U000104C6>,<U000104EE>);(<U000104C7>,<U000104EF>);/ - (<U000104C8>,<U000104F0>);(<U000104C9>,<U000104F1>);/ - (<U000104CA>,<U000104F2>);(<U000104CB>,<U000104F3>);/ - (<U000104CC>,<U000104F4>);(<U000104CD>,<U000104F5>);/ - (<U000104CE>,<U000104F6>);(<U000104CF>,<U000104F7>);/ - (<U000104D0>,<U000104F8>);(<U000104D1>,<U000104F9>);/ - (<U000104D2>,<U000104FA>);(<U000104D3>,<U000104FB>);/ - (<U00010570>,<U00010597>);(<U00010571>,<U00010598>);/ - (<U00010572>,<U00010599>);(<U00010573>,<U0001059A>);/ - (<U00010574>,<U0001059B>);(<U00010575>,<U0001059C>);/ - (<U00010576>,<U0001059D>);(<U00010577>,<U0001059E>);/ - (<U00010578>,<U0001059F>);(<U00010579>,<U000105A0>);/ - (<U0001057A>,<U000105A1>);(<U0001057C>,<U000105A3>);/ - (<U0001057D>,<U000105A4>);(<U0001057E>,<U000105A5>);/ - (<U0001057F>,<U000105A6>);(<U00010580>,<U000105A7>);/ - (<U00010581>,<U000105A8>);(<U00010582>,<U000105A9>);/ - (<U00010583>,<U000105AA>);(<U00010584>,<U000105AB>);/ - (<U00010585>,<U000105AC>);(<U00010586>,<U000105AD>);/ - (<U00010587>,<U000105AE>);(<U00010588>,<U000105AF>);/ - (<U00010589>,<U000105B0>);(<U0001058A>,<U000105B1>);/ - (<U0001058C>,<U000105B3>);(<U0001058D>,<U000105B4>);/ - (<U0001058E>,<U000105B5>);(<U0001058F>,<U000105B6>);/ - (<U00010590>,<U000105B7>);(<U00010591>,<U000105B8>);/ - (<U00010592>,<U000105B9>);(<U00010594>,<U000105BB>);/ - (<U00010595>,<U000105BC>);(<U00010C80>,<U00010CC0>);/ - (<U00010C81>,<U00010CC1>);(<U00010C82>,<U00010CC2>);/ - (<U00010C83>,<U00010CC3>);(<U00010C84>,<U00010CC4>);/ - (<U00010C85>,<U00010CC5>);(<U00010C86>,<U00010CC6>);/ - (<U00010C87>,<U00010CC7>);(<U00010C88>,<U00010CC8>);/ - (<U00010C89>,<U00010CC9>);(<U00010C8A>,<U00010CCA>);/ - (<U00010C8B>,<U00010CCB>);(<U00010C8C>,<U00010CCC>);/ - (<U00010C8D>,<U00010CCD>);(<U00010C8E>,<U00010CCE>);/ - (<U00010C8F>,<U00010CCF>);(<U00010C90>,<U00010CD0>);/ - (<U00010C91>,<U00010CD1>);(<U00010C92>,<U00010CD2>);/ - (<U00010C93>,<U00010CD3>);(<U00010C94>,<U00010CD4>);/ - (<U00010C95>,<U00010CD5>);(<U00010C96>,<U00010CD6>);/ - (<U00010C97>,<U00010CD7>);(<U00010C98>,<U00010CD8>);/ - (<U00010C99>,<U00010CD9>);(<U00010C9A>,<U00010CDA>);/ - (<U00010C9B>,<U00010CDB>);(<U00010C9C>,<U00010CDC>);/ - (<U00010C9D>,<U00010CDD>);(<U00010C9E>,<U00010CDE>);/ - (<U00010C9F>,<U00010CDF>);(<U00010CA0>,<U00010CE0>);/ - (<U00010CA1>,<U00010CE1>);(<U00010CA2>,<U00010CE2>);/ - (<U00010CA3>,<U00010CE3>);(<U00010CA4>,<U00010CE4>);/ - (<U00010CA5>,<U00010CE5>);(<U00010CA6>,<U00010CE6>);/ - (<U00010CA7>,<U00010CE7>);(<U00010CA8>,<U00010CE8>);/ - (<U00010CA9>,<U00010CE9>);(<U00010CAA>,<U00010CEA>);/ - (<U00010CAB>,<U00010CEB>);(<U00010CAC>,<U00010CEC>);/ - (<U00010CAD>,<U00010CED>);(<U00010CAE>,<U00010CEE>);/ - (<U00010CAF>,<U00010CEF>);(<U00010CB0>,<U00010CF0>);/ - (<U00010CB1>,<U00010CF1>);(<U00010CB2>,<U00010CF2>);/ - (<U000118A0>,<U000118C0>);(<U000118A1>,<U000118C1>);/ - (<U000118A2>,<U000118C2>);(<U000118A3>,<U000118C3>);/ - (<U000118A4>,<U000118C4>);(<U000118A5>,<U000118C5>);/ - (<U000118A6>,<U000118C6>);(<U000118A7>,<U000118C7>);/ - (<U000118A8>,<U000118C8>);(<U000118A9>,<U000118C9>);/ - (<U000118AA>,<U000118CA>);(<U000118AB>,<U000118CB>);/ - (<U000118AC>,<U000118CC>);(<U000118AD>,<U000118CD>);/ - (<U000118AE>,<U000118CE>);(<U000118AF>,<U000118CF>);/ - (<U000118B0>,<U000118D0>);(<U000118B1>,<U000118D1>);/ - (<U000118B2>,<U000118D2>);(<U000118B3>,<U000118D3>);/ - (<U000118B4>,<U000118D4>);(<U000118B5>,<U000118D5>);/ - (<U000118B6>,<U000118D6>);(<U000118B7>,<U000118D7>);/ - (<U000118B8>,<U000118D8>);(<U000118B9>,<U000118D9>);/ - (<U000118BA>,<U000118DA>);(<U000118BB>,<U000118DB>);/ - (<U000118BC>,<U000118DC>);(<U000118BD>,<U000118DD>);/ - (<U000118BE>,<U000118DE>);(<U000118BF>,<U000118DF>);/ - (<U00016E40>,<U00016E60>);(<U00016E41>,<U00016E61>);/ - (<U00016E42>,<U00016E62>);(<U00016E43>,<U00016E63>);/ - (<U00016E44>,<U00016E64>);(<U00016E45>,<U00016E65>);/ - (<U00016E46>,<U00016E66>);(<U00016E47>,<U00016E67>);/ - (<U00016E48>,<U00016E68>);(<U00016E49>,<U00016E69>);/ - (<U00016E4A>,<U00016E6A>);(<U00016E4B>,<U00016E6B>);/ - (<U00016E4C>,<U00016E6C>);(<U00016E4D>,<U00016E6D>);/ - (<U00016E4E>,<U00016E6E>);(<U00016E4F>,<U00016E6F>);/ - (<U00016E50>,<U00016E70>);(<U00016E51>,<U00016E71>);/ - (<U00016E52>,<U00016E72>);(<U00016E53>,<U00016E73>);/ - (<U00016E54>,<U00016E74>);(<U00016E55>,<U00016E75>);/ - (<U00016E56>,<U00016E76>);(<U00016E57>,<U00016E77>);/ - (<U00016E58>,<U00016E78>);(<U00016E59>,<U00016E79>);/ - (<U00016E5A>,<U00016E7A>);(<U00016E5B>,<U00016E7B>);/ - (<U00016E5C>,<U00016E7C>);(<U00016E5D>,<U00016E7D>);/ - (<U00016E5E>,<U00016E7E>);(<U00016E5F>,<U00016E7F>);/ - (<U0001E900>,<U0001E922>);(<U0001E901>,<U0001E923>);/ - (<U0001E902>,<U0001E924>);(<U0001E903>,<U0001E925>);/ - (<U0001E904>,<U0001E926>);(<U0001E905>,<U0001E927>);/ - (<U0001E906>,<U0001E928>);(<U0001E907>,<U0001E929>);/ - (<U0001E908>,<U0001E92A>);(<U0001E909>,<U0001E92B>);/ - (<U0001E90A>,<U0001E92C>);(<U0001E90B>,<U0001E92D>);/ - (<U0001E90C>,<U0001E92E>);(<U0001E90D>,<U0001E92F>);/ - (<U0001E90E>,<U0001E930>);(<U0001E90F>,<U0001E931>);/ - (<U0001E910>,<U0001E932>);(<U0001E911>,<U0001E933>);/ - (<U0001E912>,<U0001E934>);(<U0001E913>,<U0001E935>);/ - (<U0001E914>,<U0001E936>);(<U0001E915>,<U0001E937>);/ - (<U0001E916>,<U0001E938>);(<U0001E917>,<U0001E939>);/ - (<U0001E918>,<U0001E93A>);(<U0001E919>,<U0001E93B>);/ - (<U0001E91A>,<U0001E93C>);(<U0001E91B>,<U0001E93D>);/ - (<U0001E91C>,<U0001E93E>);(<U0001E91D>,<U0001E93F>);/ - (<U0001E91E>,<U0001E940>);(<U0001E91F>,<U0001E941>);/ - (<U0001E920>,<U0001E942>);(<U0001E921>,<U0001E943>) + (<U13F3>,<U13FB>);(<U13F4>,<U13FC>);(<U13F5>,<U13FD>);(<U1C89>,<U1C8A>);/ + (<U1C90>,<U10D0>);(<U1C91>,<U10D1>);(<U1C92>,<U10D2>);(<U1C93>,<U10D3>);/ + (<U1C94>,<U10D4>);(<U1C95>,<U10D5>);(<U1C96>,<U10D6>);(<U1C97>,<U10D7>);/ + (<U1C98>,<U10D8>);(<U1C99>,<U10D9>);(<U1C9A>,<U10DA>);(<U1C9B>,<U10DB>);/ + (<U1C9C>,<U10DC>);(<U1C9D>,<U10DD>);(<U1C9E>,<U10DE>);(<U1C9F>,<U10DF>);/ + (<U1CA0>,<U10E0>);(<U1CA1>,<U10E1>);(<U1CA2>,<U10E2>);(<U1CA3>,<U10E3>);/ + (<U1CA4>,<U10E4>);(<U1CA5>,<U10E5>);(<U1CA6>,<U10E6>);(<U1CA7>,<U10E7>);/ + (<U1CA8>,<U10E8>);(<U1CA9>,<U10E9>);(<U1CAA>,<U10EA>);(<U1CAB>,<U10EB>);/ + (<U1CAC>,<U10EC>);(<U1CAD>,<U10ED>);(<U1CAE>,<U10EE>);(<U1CAF>,<U10EF>);/ + (<U1CB0>,<U10F0>);(<U1CB1>,<U10F1>);(<U1CB2>,<U10F2>);(<U1CB3>,<U10F3>);/ + (<U1CB4>,<U10F4>);(<U1CB5>,<U10F5>);(<U1CB6>,<U10F6>);(<U1CB7>,<U10F7>);/ + (<U1CB8>,<U10F8>);(<U1CB9>,<U10F9>);(<U1CBA>,<U10FA>);(<U1CBD>,<U10FD>);/ + (<U1CBE>,<U10FE>);(<U1CBF>,<U10FF>);(<U1E00>,<U1E01>);(<U1E02>,<U1E03>);/ + (<U1E04>,<U1E05>);(<U1E06>,<U1E07>);(<U1E08>,<U1E09>);(<U1E0A>,<U1E0B>);/ + (<U1E0C>,<U1E0D>);(<U1E0E>,<U1E0F>);(<U1E10>,<U1E11>);(<U1E12>,<U1E13>);/ + (<U1E14>,<U1E15>);(<U1E16>,<U1E17>);(<U1E18>,<U1E19>);(<U1E1A>,<U1E1B>);/ + (<U1E1C>,<U1E1D>);(<U1E1E>,<U1E1F>);(<U1E20>,<U1E21>);(<U1E22>,<U1E23>);/ + (<U1E24>,<U1E25>);(<U1E26>,<U1E27>);(<U1E28>,<U1E29>);(<U1E2A>,<U1E2B>);/ + (<U1E2C>,<U1E2D>);(<U1E2E>,<U1E2F>);(<U1E30>,<U1E31>);(<U1E32>,<U1E33>);/ + (<U1E34>,<U1E35>);(<U1E36>,<U1E37>);(<U1E38>,<U1E39>);(<U1E3A>,<U1E3B>);/ + (<U1E3C>,<U1E3D>);(<U1E3E>,<U1E3F>);(<U1E40>,<U1E41>);(<U1E42>,<U1E43>);/ + (<U1E44>,<U1E45>);(<U1E46>,<U1E47>);(<U1E48>,<U1E49>);(<U1E4A>,<U1E4B>);/ + (<U1E4C>,<U1E4D>);(<U1E4E>,<U1E4F>);(<U1E50>,<U1E51>);(<U1E52>,<U1E53>);/ + (<U1E54>,<U1E55>);(<U1E56>,<U1E57>);(<U1E58>,<U1E59>);(<U1E5A>,<U1E5B>);/ + (<U1E5C>,<U1E5D>);(<U1E5E>,<U1E5F>);(<U1E60>,<U1E61>);(<U1E62>,<U1E63>);/ + (<U1E64>,<U1E65>);(<U1E66>,<U1E67>);(<U1E68>,<U1E69>);(<U1E6A>,<U1E6B>);/ + (<U1E6C>,<U1E6D>);(<U1E6E>,<U1E6F>);(<U1E70>,<U1E71>);(<U1E72>,<U1E73>);/ + (<U1E74>,<U1E75>);(<U1E76>,<U1E77>);(<U1E78>,<U1E79>);(<U1E7A>,<U1E7B>);/ + (<U1E7C>,<U1E7D>);(<U1E7E>,<U1E7F>);(<U1E80>,<U1E81>);(<U1E82>,<U1E83>);/ + (<U1E84>,<U1E85>);(<U1E86>,<U1E87>);(<U1E88>,<U1E89>);(<U1E8A>,<U1E8B>);/ + (<U1E8C>,<U1E8D>);(<U1E8E>,<U1E8F>);(<U1E90>,<U1E91>);(<U1E92>,<U1E93>);/ + (<U1E94>,<U1E95>);(<U1E9E>,<U00DF>);(<U1EA0>,<U1EA1>);(<U1EA2>,<U1EA3>);/ + (<U1EA4>,<U1EA5>);(<U1EA6>,<U1EA7>);(<U1EA8>,<U1EA9>);(<U1EAA>,<U1EAB>);/ + (<U1EAC>,<U1EAD>);(<U1EAE>,<U1EAF>);(<U1EB0>,<U1EB1>);(<U1EB2>,<U1EB3>);/ + (<U1EB4>,<U1EB5>);(<U1EB6>,<U1EB7>);(<U1EB8>,<U1EB9>);(<U1EBA>,<U1EBB>);/ + (<U1EBC>,<U1EBD>);(<U1EBE>,<U1EBF>);(<U1EC0>,<U1EC1>);(<U1EC2>,<U1EC3>);/ + (<U1EC4>,<U1EC5>);(<U1EC6>,<U1EC7>);(<U1EC8>,<U1EC9>);(<U1ECA>,<U1ECB>);/ + (<U1ECC>,<U1ECD>);(<U1ECE>,<U1ECF>);(<U1ED0>,<U1ED1>);(<U1ED2>,<U1ED3>);/ + (<U1ED4>,<U1ED5>);(<U1ED6>,<U1ED7>);(<U1ED8>,<U1ED9>);(<U1EDA>,<U1EDB>);/ + (<U1EDC>,<U1EDD>);(<U1EDE>,<U1EDF>);(<U1EE0>,<U1EE1>);(<U1EE2>,<U1EE3>);/ + (<U1EE4>,<U1EE5>);(<U1EE6>,<U1EE7>);(<U1EE8>,<U1EE9>);(<U1EEA>,<U1EEB>);/ + (<U1EEC>,<U1EED>);(<U1EEE>,<U1EEF>);(<U1EF0>,<U1EF1>);(<U1EF2>,<U1EF3>);/ + (<U1EF4>,<U1EF5>);(<U1EF6>,<U1EF7>);(<U1EF8>,<U1EF9>);(<U1EFA>,<U1EFB>);/ + (<U1EFC>,<U1EFD>);(<U1EFE>,<U1EFF>);(<U1F08>,<U1F00>);(<U1F09>,<U1F01>);/ + (<U1F0A>,<U1F02>);(<U1F0B>,<U1F03>);(<U1F0C>,<U1F04>);(<U1F0D>,<U1F05>);/ + (<U1F0E>,<U1F06>);(<U1F0F>,<U1F07>);(<U1F18>,<U1F10>);(<U1F19>,<U1F11>);/ + (<U1F1A>,<U1F12>);(<U1F1B>,<U1F13>);(<U1F1C>,<U1F14>);(<U1F1D>,<U1F15>);/ + (<U1F28>,<U1F20>);(<U1F29>,<U1F21>);(<U1F2A>,<U1F22>);(<U1F2B>,<U1F23>);/ + (<U1F2C>,<U1F24>);(<U1F2D>,<U1F25>);(<U1F2E>,<U1F26>);(<U1F2F>,<U1F27>);/ + (<U1F38>,<U1F30>);(<U1F39>,<U1F31>);(<U1F3A>,<U1F32>);(<U1F3B>,<U1F33>);/ + (<U1F3C>,<U1F34>);(<U1F3D>,<U1F35>);(<U1F3E>,<U1F36>);(<U1F3F>,<U1F37>);/ + (<U1F48>,<U1F40>);(<U1F49>,<U1F41>);(<U1F4A>,<U1F42>);(<U1F4B>,<U1F43>);/ + (<U1F4C>,<U1F44>);(<U1F4D>,<U1F45>);(<U1F59>,<U1F51>);(<U1F5B>,<U1F53>);/ + (<U1F5D>,<U1F55>);(<U1F5F>,<U1F57>);(<U1F68>,<U1F60>);(<U1F69>,<U1F61>);/ + (<U1F6A>,<U1F62>);(<U1F6B>,<U1F63>);(<U1F6C>,<U1F64>);(<U1F6D>,<U1F65>);/ + (<U1F6E>,<U1F66>);(<U1F6F>,<U1F67>);(<U1F88>,<U1F80>);(<U1F89>,<U1F81>);/ + (<U1F8A>,<U1F82>);(<U1F8B>,<U1F83>);(<U1F8C>,<U1F84>);(<U1F8D>,<U1F85>);/ + (<U1F8E>,<U1F86>);(<U1F8F>,<U1F87>);(<U1F98>,<U1F90>);(<U1F99>,<U1F91>);/ + (<U1F9A>,<U1F92>);(<U1F9B>,<U1F93>);(<U1F9C>,<U1F94>);(<U1F9D>,<U1F95>);/ + (<U1F9E>,<U1F96>);(<U1F9F>,<U1F97>);(<U1FA8>,<U1FA0>);(<U1FA9>,<U1FA1>);/ + (<U1FAA>,<U1FA2>);(<U1FAB>,<U1FA3>);(<U1FAC>,<U1FA4>);(<U1FAD>,<U1FA5>);/ + (<U1FAE>,<U1FA6>);(<U1FAF>,<U1FA7>);(<U1FB8>,<U1FB0>);(<U1FB9>,<U1FB1>);/ + (<U1FBA>,<U1F70>);(<U1FBB>,<U1F71>);(<U1FBC>,<U1FB3>);(<U1FC8>,<U1F72>);/ + (<U1FC9>,<U1F73>);(<U1FCA>,<U1F74>);(<U1FCB>,<U1F75>);(<U1FCC>,<U1FC3>);/ + (<U1FD8>,<U1FD0>);(<U1FD9>,<U1FD1>);(<U1FDA>,<U1F76>);(<U1FDB>,<U1F77>);/ + (<U1FE8>,<U1FE0>);(<U1FE9>,<U1FE1>);(<U1FEA>,<U1F7A>);(<U1FEB>,<U1F7B>);/ + (<U1FEC>,<U1FE5>);(<U1FF8>,<U1F78>);(<U1FF9>,<U1F79>);(<U1FFA>,<U1F7C>);/ + (<U1FFB>,<U1F7D>);(<U1FFC>,<U1FF3>);(<U2126>,<U03C9>);(<U212A>,<U006B>);/ + (<U212B>,<U00E5>);(<U2132>,<U214E>);(<U2160>,<U2170>);(<U2161>,<U2171>);/ + (<U2162>,<U2172>);(<U2163>,<U2173>);(<U2164>,<U2174>);(<U2165>,<U2175>);/ + (<U2166>,<U2176>);(<U2167>,<U2177>);(<U2168>,<U2178>);(<U2169>,<U2179>);/ + (<U216A>,<U217A>);(<U216B>,<U217B>);(<U216C>,<U217C>);(<U216D>,<U217D>);/ + (<U216E>,<U217E>);(<U216F>,<U217F>);(<U2183>,<U2184>);(<U24B6>,<U24D0>);/ + (<U24B7>,<U24D1>);(<U24B8>,<U24D2>);(<U24B9>,<U24D3>);(<U24BA>,<U24D4>);/ + (<U24BB>,<U24D5>);(<U24BC>,<U24D6>);(<U24BD>,<U24D7>);(<U24BE>,<U24D8>);/ + (<U24BF>,<U24D9>);(<U24C0>,<U24DA>);(<U24C1>,<U24DB>);(<U24C2>,<U24DC>);/ + (<U24C3>,<U24DD>);(<U24C4>,<U24DE>);(<U24C5>,<U24DF>);(<U24C6>,<U24E0>);/ + (<U24C7>,<U24E1>);(<U24C8>,<U24E2>);(<U24C9>,<U24E3>);(<U24CA>,<U24E4>);/ + (<U24CB>,<U24E5>);(<U24CC>,<U24E6>);(<U24CD>,<U24E7>);(<U24CE>,<U24E8>);/ + (<U24CF>,<U24E9>);(<U2C00>,<U2C30>);(<U2C01>,<U2C31>);(<U2C02>,<U2C32>);/ + (<U2C03>,<U2C33>);(<U2C04>,<U2C34>);(<U2C05>,<U2C35>);(<U2C06>,<U2C36>);/ + (<U2C07>,<U2C37>);(<U2C08>,<U2C38>);(<U2C09>,<U2C39>);(<U2C0A>,<U2C3A>);/ + (<U2C0B>,<U2C3B>);(<U2C0C>,<U2C3C>);(<U2C0D>,<U2C3D>);(<U2C0E>,<U2C3E>);/ + (<U2C0F>,<U2C3F>);(<U2C10>,<U2C40>);(<U2C11>,<U2C41>);(<U2C12>,<U2C42>);/ + (<U2C13>,<U2C43>);(<U2C14>,<U2C44>);(<U2C15>,<U2C45>);(<U2C16>,<U2C46>);/ + (<U2C17>,<U2C47>);(<U2C18>,<U2C48>);(<U2C19>,<U2C49>);(<U2C1A>,<U2C4A>);/ + (<U2C1B>,<U2C4B>);(<U2C1C>,<U2C4C>);(<U2C1D>,<U2C4D>);(<U2C1E>,<U2C4E>);/ + (<U2C1F>,<U2C4F>);(<U2C20>,<U2C50>);(<U2C21>,<U2C51>);(<U2C22>,<U2C52>);/ + (<U2C23>,<U2C53>);(<U2C24>,<U2C54>);(<U2C25>,<U2C55>);(<U2C26>,<U2C56>);/ + (<U2C27>,<U2C57>);(<U2C28>,<U2C58>);(<U2C29>,<U2C59>);(<U2C2A>,<U2C5A>);/ + (<U2C2B>,<U2C5B>);(<U2C2C>,<U2C5C>);(<U2C2D>,<U2C5D>);(<U2C2E>,<U2C5E>);/ + (<U2C2F>,<U2C5F>);(<U2C60>,<U2C61>);(<U2C62>,<U026B>);(<U2C63>,<U1D7D>);/ + (<U2C64>,<U027D>);(<U2C67>,<U2C68>);(<U2C69>,<U2C6A>);(<U2C6B>,<U2C6C>);/ + (<U2C6D>,<U0251>);(<U2C6E>,<U0271>);(<U2C6F>,<U0250>);(<U2C70>,<U0252>);/ + (<U2C72>,<U2C73>);(<U2C75>,<U2C76>);(<U2C7E>,<U023F>);(<U2C7F>,<U0240>);/ + (<U2C80>,<U2C81>);(<U2C82>,<U2C83>);(<U2C84>,<U2C85>);(<U2C86>,<U2C87>);/ + (<U2C88>,<U2C89>);(<U2C8A>,<U2C8B>);(<U2C8C>,<U2C8D>);(<U2C8E>,<U2C8F>);/ + (<U2C90>,<U2C91>);(<U2C92>,<U2C93>);(<U2C94>,<U2C95>);(<U2C96>,<U2C97>);/ + (<U2C98>,<U2C99>);(<U2C9A>,<U2C9B>);(<U2C9C>,<U2C9D>);(<U2C9E>,<U2C9F>);/ + (<U2CA0>,<U2CA1>);(<U2CA2>,<U2CA3>);(<U2CA4>,<U2CA5>);(<U2CA6>,<U2CA7>);/ + (<U2CA8>,<U2CA9>);(<U2CAA>,<U2CAB>);(<U2CAC>,<U2CAD>);(<U2CAE>,<U2CAF>);/ + (<U2CB0>,<U2CB1>);(<U2CB2>,<U2CB3>);(<U2CB4>,<U2CB5>);(<U2CB6>,<U2CB7>);/ + (<U2CB8>,<U2CB9>);(<U2CBA>,<U2CBB>);(<U2CBC>,<U2CBD>);(<U2CBE>,<U2CBF>);/ + (<U2CC0>,<U2CC1>);(<U2CC2>,<U2CC3>);(<U2CC4>,<U2CC5>);(<U2CC6>,<U2CC7>);/ + (<U2CC8>,<U2CC9>);(<U2CCA>,<U2CCB>);(<U2CCC>,<U2CCD>);(<U2CCE>,<U2CCF>);/ + (<U2CD0>,<U2CD1>);(<U2CD2>,<U2CD3>);(<U2CD4>,<U2CD5>);(<U2CD6>,<U2CD7>);/ + (<U2CD8>,<U2CD9>);(<U2CDA>,<U2CDB>);(<U2CDC>,<U2CDD>);(<U2CDE>,<U2CDF>);/ + (<U2CE0>,<U2CE1>);(<U2CE2>,<U2CE3>);(<U2CEB>,<U2CEC>);(<U2CED>,<U2CEE>);/ + (<U2CF2>,<U2CF3>);(<UA640>,<UA641>);(<UA642>,<UA643>);(<UA644>,<UA645>);/ + (<UA646>,<UA647>);(<UA648>,<UA649>);(<UA64A>,<UA64B>);(<UA64C>,<UA64D>);/ + (<UA64E>,<UA64F>);(<UA650>,<UA651>);(<UA652>,<UA653>);(<UA654>,<UA655>);/ + (<UA656>,<UA657>);(<UA658>,<UA659>);(<UA65A>,<UA65B>);(<UA65C>,<UA65D>);/ + (<UA65E>,<UA65F>);(<UA660>,<UA661>);(<UA662>,<UA663>);(<UA664>,<UA665>);/ + (<UA666>,<UA667>);(<UA668>,<UA669>);(<UA66A>,<UA66B>);(<UA66C>,<UA66D>);/ + (<UA680>,<UA681>);(<UA682>,<UA683>);(<UA684>,<UA685>);(<UA686>,<UA687>);/ + (<UA688>,<UA689>);(<UA68A>,<UA68B>);(<UA68C>,<UA68D>);(<UA68E>,<UA68F>);/ + (<UA690>,<UA691>);(<UA692>,<UA693>);(<UA694>,<UA695>);(<UA696>,<UA697>);/ + (<UA698>,<UA699>);(<UA69A>,<UA69B>);(<UA722>,<UA723>);(<UA724>,<UA725>);/ + (<UA726>,<UA727>);(<UA728>,<UA729>);(<UA72A>,<UA72B>);(<UA72C>,<UA72D>);/ + (<UA72E>,<UA72F>);(<UA732>,<UA733>);(<UA734>,<UA735>);(<UA736>,<UA737>);/ + (<UA738>,<UA739>);(<UA73A>,<UA73B>);(<UA73C>,<UA73D>);(<UA73E>,<UA73F>);/ + (<UA740>,<UA741>);(<UA742>,<UA743>);(<UA744>,<UA745>);(<UA746>,<UA747>);/ + (<UA748>,<UA749>);(<UA74A>,<UA74B>);(<UA74C>,<UA74D>);(<UA74E>,<UA74F>);/ + (<UA750>,<UA751>);(<UA752>,<UA753>);(<UA754>,<UA755>);(<UA756>,<UA757>);/ + (<UA758>,<UA759>);(<UA75A>,<UA75B>);(<UA75C>,<UA75D>);(<UA75E>,<UA75F>);/ + (<UA760>,<UA761>);(<UA762>,<UA763>);(<UA764>,<UA765>);(<UA766>,<UA767>);/ + (<UA768>,<UA769>);(<UA76A>,<UA76B>);(<UA76C>,<UA76D>);(<UA76E>,<UA76F>);/ + (<UA779>,<UA77A>);(<UA77B>,<UA77C>);(<UA77D>,<U1D79>);(<UA77E>,<UA77F>);/ + (<UA780>,<UA781>);(<UA782>,<UA783>);(<UA784>,<UA785>);(<UA786>,<UA787>);/ + (<UA78B>,<UA78C>);(<UA78D>,<U0265>);(<UA790>,<UA791>);(<UA792>,<UA793>);/ + (<UA796>,<UA797>);(<UA798>,<UA799>);(<UA79A>,<UA79B>);(<UA79C>,<UA79D>);/ + (<UA79E>,<UA79F>);(<UA7A0>,<UA7A1>);(<UA7A2>,<UA7A3>);(<UA7A4>,<UA7A5>);/ + (<UA7A6>,<UA7A7>);(<UA7A8>,<UA7A9>);(<UA7AA>,<U0266>);(<UA7AB>,<U025C>);/ + (<UA7AC>,<U0261>);(<UA7AD>,<U026C>);(<UA7AE>,<U026A>);(<UA7B0>,<U029E>);/ + (<UA7B1>,<U0287>);(<UA7B2>,<U029D>);(<UA7B3>,<UAB53>);(<UA7B4>,<UA7B5>);/ + (<UA7B6>,<UA7B7>);(<UA7B8>,<UA7B9>);(<UA7BA>,<UA7BB>);(<UA7BC>,<UA7BD>);/ + (<UA7BE>,<UA7BF>);(<UA7C0>,<UA7C1>);(<UA7C2>,<UA7C3>);(<UA7C4>,<UA794>);/ + (<UA7C5>,<U0282>);(<UA7C6>,<U1D8E>);(<UA7C7>,<UA7C8>);(<UA7C9>,<UA7CA>);/ + (<UA7CB>,<U0264>);(<UA7CC>,<UA7CD>);(<UA7D0>,<UA7D1>);(<UA7D6>,<UA7D7>);/ + (<UA7D8>,<UA7D9>);(<UA7DA>,<UA7DB>);(<UA7DC>,<U019B>);(<UA7F5>,<UA7F6>);/ + (<UFF21>,<UFF41>);(<UFF22>,<UFF42>);(<UFF23>,<UFF43>);(<UFF24>,<UFF44>);/ + (<UFF25>,<UFF45>);(<UFF26>,<UFF46>);(<UFF27>,<UFF47>);(<UFF28>,<UFF48>);/ + (<UFF29>,<UFF49>);(<UFF2A>,<UFF4A>);(<UFF2B>,<UFF4B>);(<UFF2C>,<UFF4C>);/ + (<UFF2D>,<UFF4D>);(<UFF2E>,<UFF4E>);(<UFF2F>,<UFF4F>);(<UFF30>,<UFF50>);/ + (<UFF31>,<UFF51>);(<UFF32>,<UFF52>);(<UFF33>,<UFF53>);(<UFF34>,<UFF54>);/ + (<UFF35>,<UFF55>);(<UFF36>,<UFF56>);(<UFF37>,<UFF57>);(<UFF38>,<UFF58>);/ + (<UFF39>,<UFF59>);(<UFF3A>,<UFF5A>);(<U00010400>,<U00010428>);/ + (<U00010401>,<U00010429>);(<U00010402>,<U0001042A>);/ + (<U00010403>,<U0001042B>);(<U00010404>,<U0001042C>);/ + (<U00010405>,<U0001042D>);(<U00010406>,<U0001042E>);/ + (<U00010407>,<U0001042F>);(<U00010408>,<U00010430>);/ + (<U00010409>,<U00010431>);(<U0001040A>,<U00010432>);/ + (<U0001040B>,<U00010433>);(<U0001040C>,<U00010434>);/ + (<U0001040D>,<U00010435>);(<U0001040E>,<U00010436>);/ + (<U0001040F>,<U00010437>);(<U00010410>,<U00010438>);/ + (<U00010411>,<U00010439>);(<U00010412>,<U0001043A>);/ + (<U00010413>,<U0001043B>);(<U00010414>,<U0001043C>);/ + (<U00010415>,<U0001043D>);(<U00010416>,<U0001043E>);/ + (<U00010417>,<U0001043F>);(<U00010418>,<U00010440>);/ + (<U00010419>,<U00010441>);(<U0001041A>,<U00010442>);/ + (<U0001041B>,<U00010443>);(<U0001041C>,<U00010444>);/ + (<U0001041D>,<U00010445>);(<U0001041E>,<U00010446>);/ + (<U0001041F>,<U00010447>);(<U00010420>,<U00010448>);/ + (<U00010421>,<U00010449>);(<U00010422>,<U0001044A>);/ + (<U00010423>,<U0001044B>);(<U00010424>,<U0001044C>);/ + (<U00010425>,<U0001044D>);(<U00010426>,<U0001044E>);/ + (<U00010427>,<U0001044F>);(<U000104B0>,<U000104D8>);/ + (<U000104B1>,<U000104D9>);(<U000104B2>,<U000104DA>);/ + (<U000104B3>,<U000104DB>);(<U000104B4>,<U000104DC>);/ + (<U000104B5>,<U000104DD>);(<U000104B6>,<U000104DE>);/ + (<U000104B7>,<U000104DF>);(<U000104B8>,<U000104E0>);/ + (<U000104B9>,<U000104E1>);(<U000104BA>,<U000104E2>);/ + (<U000104BB>,<U000104E3>);(<U000104BC>,<U000104E4>);/ + (<U000104BD>,<U000104E5>);(<U000104BE>,<U000104E6>);/ + (<U000104BF>,<U000104E7>);(<U000104C0>,<U000104E8>);/ + (<U000104C1>,<U000104E9>);(<U000104C2>,<U000104EA>);/ + (<U000104C3>,<U000104EB>);(<U000104C4>,<U000104EC>);/ + (<U000104C5>,<U000104ED>);(<U000104C6>,<U000104EE>);/ + (<U000104C7>,<U000104EF>);(<U000104C8>,<U000104F0>);/ + (<U000104C9>,<U000104F1>);(<U000104CA>,<U000104F2>);/ + (<U000104CB>,<U000104F3>);(<U000104CC>,<U000104F4>);/ + (<U000104CD>,<U000104F5>);(<U000104CE>,<U000104F6>);/ + (<U000104CF>,<U000104F7>);(<U000104D0>,<U000104F8>);/ + (<U000104D1>,<U000104F9>);(<U000104D2>,<U000104FA>);/ + (<U000104D3>,<U000104FB>);(<U00010570>,<U00010597>);/ + (<U00010571>,<U00010598>);(<U00010572>,<U00010599>);/ + (<U00010573>,<U0001059A>);(<U00010574>,<U0001059B>);/ + (<U00010575>,<U0001059C>);(<U00010576>,<U0001059D>);/ + (<U00010577>,<U0001059E>);(<U00010578>,<U0001059F>);/ + (<U00010579>,<U000105A0>);(<U0001057A>,<U000105A1>);/ + (<U0001057C>,<U000105A3>);(<U0001057D>,<U000105A4>);/ + (<U0001057E>,<U000105A5>);(<U0001057F>,<U000105A6>);/ + (<U00010580>,<U000105A7>);(<U00010581>,<U000105A8>);/ + (<U00010582>,<U000105A9>);(<U00010583>,<U000105AA>);/ + (<U00010584>,<U000105AB>);(<U00010585>,<U000105AC>);/ + (<U00010586>,<U000105AD>);(<U00010587>,<U000105AE>);/ + (<U00010588>,<U000105AF>);(<U00010589>,<U000105B0>);/ + (<U0001058A>,<U000105B1>);(<U0001058C>,<U000105B3>);/ + (<U0001058D>,<U000105B4>);(<U0001058E>,<U000105B5>);/ + (<U0001058F>,<U000105B6>);(<U00010590>,<U000105B7>);/ + (<U00010591>,<U000105B8>);(<U00010592>,<U000105B9>);/ + (<U00010594>,<U000105BB>);(<U00010595>,<U000105BC>);/ + (<U00010C80>,<U00010CC0>);(<U00010C81>,<U00010CC1>);/ + (<U00010C82>,<U00010CC2>);(<U00010C83>,<U00010CC3>);/ + (<U00010C84>,<U00010CC4>);(<U00010C85>,<U00010CC5>);/ + (<U00010C86>,<U00010CC6>);(<U00010C87>,<U00010CC7>);/ + (<U00010C88>,<U00010CC8>);(<U00010C89>,<U00010CC9>);/ + (<U00010C8A>,<U00010CCA>);(<U00010C8B>,<U00010CCB>);/ + (<U00010C8C>,<U00010CCC>);(<U00010C8D>,<U00010CCD>);/ + (<U00010C8E>,<U00010CCE>);(<U00010C8F>,<U00010CCF>);/ + (<U00010C90>,<U00010CD0>);(<U00010C91>,<U00010CD1>);/ + (<U00010C92>,<U00010CD2>);(<U00010C93>,<U00010CD3>);/ + (<U00010C94>,<U00010CD4>);(<U00010C95>,<U00010CD5>);/ + (<U00010C96>,<U00010CD6>);(<U00010C97>,<U00010CD7>);/ + (<U00010C98>,<U00010CD8>);(<U00010C99>,<U00010CD9>);/ + (<U00010C9A>,<U00010CDA>);(<U00010C9B>,<U00010CDB>);/ + (<U00010C9C>,<U00010CDC>);(<U00010C9D>,<U00010CDD>);/ + (<U00010C9E>,<U00010CDE>);(<U00010C9F>,<U00010CDF>);/ + (<U00010CA0>,<U00010CE0>);(<U00010CA1>,<U00010CE1>);/ + (<U00010CA2>,<U00010CE2>);(<U00010CA3>,<U00010CE3>);/ + (<U00010CA4>,<U00010CE4>);(<U00010CA5>,<U00010CE5>);/ + (<U00010CA6>,<U00010CE6>);(<U00010CA7>,<U00010CE7>);/ + (<U00010CA8>,<U00010CE8>);(<U00010CA9>,<U00010CE9>);/ + (<U00010CAA>,<U00010CEA>);(<U00010CAB>,<U00010CEB>);/ + (<U00010CAC>,<U00010CEC>);(<U00010CAD>,<U00010CED>);/ + (<U00010CAE>,<U00010CEE>);(<U00010CAF>,<U00010CEF>);/ + (<U00010CB0>,<U00010CF0>);(<U00010CB1>,<U00010CF1>);/ + (<U00010CB2>,<U00010CF2>);(<U00010D50>,<U00010D70>);/ + (<U00010D51>,<U00010D71>);(<U00010D52>,<U00010D72>);/ + (<U00010D53>,<U00010D73>);(<U00010D54>,<U00010D74>);/ + (<U00010D55>,<U00010D75>);(<U00010D56>,<U00010D76>);/ + (<U00010D57>,<U00010D77>);(<U00010D58>,<U00010D78>);/ + (<U00010D59>,<U00010D79>);(<U00010D5A>,<U00010D7A>);/ + (<U00010D5B>,<U00010D7B>);(<U00010D5C>,<U00010D7C>);/ + (<U00010D5D>,<U00010D7D>);(<U00010D5E>,<U00010D7E>);/ + (<U00010D5F>,<U00010D7F>);(<U00010D60>,<U00010D80>);/ + (<U00010D61>,<U00010D81>);(<U00010D62>,<U00010D82>);/ + (<U00010D63>,<U00010D83>);(<U00010D64>,<U00010D84>);/ + (<U00010D65>,<U00010D85>);(<U000118A0>,<U000118C0>);/ + (<U000118A1>,<U000118C1>);(<U000118A2>,<U000118C2>);/ + (<U000118A3>,<U000118C3>);(<U000118A4>,<U000118C4>);/ + (<U000118A5>,<U000118C5>);(<U000118A6>,<U000118C6>);/ + (<U000118A7>,<U000118C7>);(<U000118A8>,<U000118C8>);/ + (<U000118A9>,<U000118C9>);(<U000118AA>,<U000118CA>);/ + (<U000118AB>,<U000118CB>);(<U000118AC>,<U000118CC>);/ + (<U000118AD>,<U000118CD>);(<U000118AE>,<U000118CE>);/ + (<U000118AF>,<U000118CF>);(<U000118B0>,<U000118D0>);/ + (<U000118B1>,<U000118D1>);(<U000118B2>,<U000118D2>);/ + (<U000118B3>,<U000118D3>);(<U000118B4>,<U000118D4>);/ + (<U000118B5>,<U000118D5>);(<U000118B6>,<U000118D6>);/ + (<U000118B7>,<U000118D7>);(<U000118B8>,<U000118D8>);/ + (<U000118B9>,<U000118D9>);(<U000118BA>,<U000118DA>);/ + (<U000118BB>,<U000118DB>);(<U000118BC>,<U000118DC>);/ + (<U000118BD>,<U000118DD>);(<U000118BE>,<U000118DE>);/ + (<U000118BF>,<U000118DF>);(<U00016E40>,<U00016E60>);/ + (<U00016E41>,<U00016E61>);(<U00016E42>,<U00016E62>);/ + (<U00016E43>,<U00016E63>);(<U00016E44>,<U00016E64>);/ + (<U00016E45>,<U00016E65>);(<U00016E46>,<U00016E66>);/ + (<U00016E47>,<U00016E67>);(<U00016E48>,<U00016E68>);/ + (<U00016E49>,<U00016E69>);(<U00016E4A>,<U00016E6A>);/ + (<U00016E4B>,<U00016E6B>);(<U00016E4C>,<U00016E6C>);/ + (<U00016E4D>,<U00016E6D>);(<U00016E4E>,<U00016E6E>);/ + (<U00016E4F>,<U00016E6F>);(<U00016E50>,<U00016E70>);/ + (<U00016E51>,<U00016E71>);(<U00016E52>,<U00016E72>);/ + (<U00016E53>,<U00016E73>);(<U00016E54>,<U00016E74>);/ + (<U00016E55>,<U00016E75>);(<U00016E56>,<U00016E76>);/ + (<U00016E57>,<U00016E77>);(<U00016E58>,<U00016E78>);/ + (<U00016E59>,<U00016E79>);(<U00016E5A>,<U00016E7A>);/ + (<U00016E5B>,<U00016E7B>);(<U00016E5C>,<U00016E7C>);/ + (<U00016E5D>,<U00016E7D>);(<U00016E5E>,<U00016E7E>);/ + (<U00016E5F>,<U00016E7F>);(<U0001E900>,<U0001E922>);/ + (<U0001E901>,<U0001E923>);(<U0001E902>,<U0001E924>);/ + (<U0001E903>,<U0001E925>);(<U0001E904>,<U0001E926>);/ + (<U0001E905>,<U0001E927>);(<U0001E906>,<U0001E928>);/ + (<U0001E907>,<U0001E929>);(<U0001E908>,<U0001E92A>);/ + (<U0001E909>,<U0001E92B>);(<U0001E90A>,<U0001E92C>);/ + (<U0001E90B>,<U0001E92D>);(<U0001E90C>,<U0001E92E>);/ + (<U0001E90D>,<U0001E92F>);(<U0001E90E>,<U0001E930>);/ + (<U0001E90F>,<U0001E931>);(<U0001E910>,<U0001E932>);/ + (<U0001E911>,<U0001E933>);(<U0001E912>,<U0001E934>);/ + (<U0001E913>,<U0001E935>);(<U0001E914>,<U0001E936>);/ + (<U0001E915>,<U0001E937>);(<U0001E916>,<U0001E938>);/ + (<U0001E917>,<U0001E939>);(<U0001E918>,<U0001E93A>);/ + (<U0001E919>,<U0001E93B>);(<U0001E91A>,<U0001E93C>);/ + (<U0001E91B>,<U0001E93D>);(<U0001E91C>,<U0001E93E>);/ + (<U0001E91D>,<U0001E93F>);(<U0001E91E>,<U0001E940>);/ + (<U0001E91F>,<U0001E941>);(<U0001E920>,<U0001E942>);/ + (<U0001E921>,<U0001E943>) map "totitle"; / (<U0061>,<U0041>);(<U0062>,<U0042>);(<U0063>,<U0043>);(<U0064>,<U0044>);/ @@ -2161,261 +2229,262 @@ map "totitle"; / (<U0177>,<U0176>);(<U017A>,<U0179>);(<U017C>,<U017B>);(<U017E>,<U017D>);/ (<U017F>,<U0053>);(<U0180>,<U0243>);(<U0183>,<U0182>);(<U0185>,<U0184>);/ (<U0188>,<U0187>);(<U018C>,<U018B>);(<U0192>,<U0191>);(<U0195>,<U01F6>);/ - (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019E>,<U0220>);(<U01A1>,<U01A0>);/ - (<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);(<U01AD>,<U01AC>);/ - (<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);(<U01B9>,<U01B8>);/ - (<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C4>,<U01C5>);(<U01C6>,<U01C5>);/ - (<U01C7>,<U01C8>);(<U01C9>,<U01C8>);(<U01CA>,<U01CB>);(<U01CC>,<U01CB>);/ - (<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);(<U01D4>,<U01D3>);/ - (<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);(<U01DC>,<U01DB>);/ - (<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);(<U01E3>,<U01E2>);/ - (<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);(<U01EB>,<U01EA>);/ - (<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F1>,<U01F2>);(<U01F3>,<U01F2>);/ - (<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);(<U01FD>,<U01FC>);/ - (<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);(<U0205>,<U0204>);/ - (<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);(<U020D>,<U020C>);/ - (<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);(<U0215>,<U0214>);/ - (<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);(<U021D>,<U021C>);/ - (<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);(<U0227>,<U0226>);/ - (<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);(<U022F>,<U022E>);/ - (<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);(<U023F>,<U2C7E>);/ - (<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);(<U0249>,<U0248>);/ - (<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);(<U0250>,<U2C6F>);/ - (<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);(<U0254>,<U0186>);/ - (<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);(<U025B>,<U0190>);/ - (<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);(<U0263>,<U0194>);/ - (<U0265>,<UA78D>);(<U0266>,<UA7AA>);(<U0268>,<U0197>);(<U0269>,<U0196>);/ - (<U026A>,<UA7AE>);(<U026B>,<U2C62>);(<U026C>,<UA7AD>);(<U026F>,<U019C>);/ - (<U0271>,<U2C6E>);(<U0272>,<U019D>);(<U0275>,<U019F>);(<U027D>,<U2C64>);/ - (<U0280>,<U01A6>);(<U0282>,<UA7C5>);(<U0283>,<U01A9>);(<U0287>,<UA7B1>);/ - (<U0288>,<U01AE>);(<U0289>,<U0244>);(<U028A>,<U01B1>);(<U028B>,<U01B2>);/ - (<U028C>,<U0245>);(<U0292>,<U01B7>);(<U029D>,<UA7B2>);(<U029E>,<UA7B0>);/ - (<U0345>,<U0399>);(<U0371>,<U0370>);(<U0373>,<U0372>);(<U0377>,<U0376>);/ - (<U037B>,<U03FD>);(<U037C>,<U03FE>);(<U037D>,<U03FF>);(<U03AC>,<U0386>);/ - (<U03AD>,<U0388>);(<U03AE>,<U0389>);(<U03AF>,<U038A>);(<U03B1>,<U0391>);/ - (<U03B2>,<U0392>);(<U03B3>,<U0393>);(<U03B4>,<U0394>);(<U03B5>,<U0395>);/ - (<U03B6>,<U0396>);(<U03B7>,<U0397>);(<U03B8>,<U0398>);(<U03B9>,<U0399>);/ - (<U03BA>,<U039A>);(<U03BB>,<U039B>);(<U03BC>,<U039C>);(<U03BD>,<U039D>);/ - (<U03BE>,<U039E>);(<U03BF>,<U039F>);(<U03C0>,<U03A0>);(<U03C1>,<U03A1>);/ - (<U03C2>,<U03A3>);(<U03C3>,<U03A3>);(<U03C4>,<U03A4>);(<U03C5>,<U03A5>);/ - (<U03C6>,<U03A6>);(<U03C7>,<U03A7>);(<U03C8>,<U03A8>);(<U03C9>,<U03A9>);/ - (<U03CA>,<U03AA>);(<U03CB>,<U03AB>);(<U03CC>,<U038C>);(<U03CD>,<U038E>);/ - (<U03CE>,<U038F>);(<U03D0>,<U0392>);(<U03D1>,<U0398>);(<U03D5>,<U03A6>);/ - (<U03D6>,<U03A0>);(<U03D7>,<U03CF>);(<U03D9>,<U03D8>);(<U03DB>,<U03DA>);/ - (<U03DD>,<U03DC>);(<U03DF>,<U03DE>);(<U03E1>,<U03E0>);(<U03E3>,<U03E2>);/ - (<U03E5>,<U03E4>);(<U03E7>,<U03E6>);(<U03E9>,<U03E8>);(<U03EB>,<U03EA>);/ - (<U03ED>,<U03EC>);(<U03EF>,<U03EE>);(<U03F0>,<U039A>);(<U03F1>,<U03A1>);/ - (<U03F2>,<U03F9>);(<U03F3>,<U037F>);(<U03F5>,<U0395>);(<U03F8>,<U03F7>);/ - (<U03FB>,<U03FA>);(<U0430>,<U0410>);(<U0431>,<U0411>);(<U0432>,<U0412>);/ - (<U0433>,<U0413>);(<U0434>,<U0414>);(<U0435>,<U0415>);(<U0436>,<U0416>);/ - (<U0437>,<U0417>);(<U0438>,<U0418>);(<U0439>,<U0419>);(<U043A>,<U041A>);/ - (<U043B>,<U041B>);(<U043C>,<U041C>);(<U043D>,<U041D>);(<U043E>,<U041E>);/ - (<U043F>,<U041F>);(<U0440>,<U0420>);(<U0441>,<U0421>);(<U0442>,<U0422>);/ - (<U0443>,<U0423>);(<U0444>,<U0424>);(<U0445>,<U0425>);(<U0446>,<U0426>);/ - (<U0447>,<U0427>);(<U0448>,<U0428>);(<U0449>,<U0429>);(<U044A>,<U042A>);/ - (<U044B>,<U042B>);(<U044C>,<U042C>);(<U044D>,<U042D>);(<U044E>,<U042E>);/ - (<U044F>,<U042F>);(<U0450>,<U0400>);(<U0451>,<U0401>);(<U0452>,<U0402>);/ - (<U0453>,<U0403>);(<U0454>,<U0404>);(<U0455>,<U0405>);(<U0456>,<U0406>);/ - (<U0457>,<U0407>);(<U0458>,<U0408>);(<U0459>,<U0409>);(<U045A>,<U040A>);/ - (<U045B>,<U040B>);(<U045C>,<U040C>);(<U045D>,<U040D>);(<U045E>,<U040E>);/ - (<U045F>,<U040F>);(<U0461>,<U0460>);(<U0463>,<U0462>);(<U0465>,<U0464>);/ - (<U0467>,<U0466>);(<U0469>,<U0468>);(<U046B>,<U046A>);(<U046D>,<U046C>);/ - (<U046F>,<U046E>);(<U0471>,<U0470>);(<U0473>,<U0472>);(<U0475>,<U0474>);/ - (<U0477>,<U0476>);(<U0479>,<U0478>);(<U047B>,<U047A>);(<U047D>,<U047C>);/ - (<U047F>,<U047E>);(<U0481>,<U0480>);(<U048B>,<U048A>);(<U048D>,<U048C>);/ - (<U048F>,<U048E>);(<U0491>,<U0490>);(<U0493>,<U0492>);(<U0495>,<U0494>);/ - (<U0497>,<U0496>);(<U0499>,<U0498>);(<U049B>,<U049A>);(<U049D>,<U049C>);/ - (<U049F>,<U049E>);(<U04A1>,<U04A0>);(<U04A3>,<U04A2>);(<U04A5>,<U04A4>);/ - (<U04A7>,<U04A6>);(<U04A9>,<U04A8>);(<U04AB>,<U04AA>);(<U04AD>,<U04AC>);/ - (<U04AF>,<U04AE>);(<U04B1>,<U04B0>);(<U04B3>,<U04B2>);(<U04B5>,<U04B4>);/ - (<U04B7>,<U04B6>);(<U04B9>,<U04B8>);(<U04BB>,<U04BA>);(<U04BD>,<U04BC>);/ - (<U04BF>,<U04BE>);(<U04C2>,<U04C1>);(<U04C4>,<U04C3>);(<U04C6>,<U04C5>);/ - (<U04C8>,<U04C7>);(<U04CA>,<U04C9>);(<U04CC>,<U04CB>);(<U04CE>,<U04CD>);/ - (<U04CF>,<U04C0>);(<U04D1>,<U04D0>);(<U04D3>,<U04D2>);(<U04D5>,<U04D4>);/ - (<U04D7>,<U04D6>);(<U04D9>,<U04D8>);(<U04DB>,<U04DA>);(<U04DD>,<U04DC>);/ - (<U04DF>,<U04DE>);(<U04E1>,<U04E0>);(<U04E3>,<U04E2>);(<U04E5>,<U04E4>);/ - (<U04E7>,<U04E6>);(<U04E9>,<U04E8>);(<U04EB>,<U04EA>);(<U04ED>,<U04EC>);/ - (<U04EF>,<U04EE>);(<U04F1>,<U04F0>);(<U04F3>,<U04F2>);(<U04F5>,<U04F4>);/ - (<U04F7>,<U04F6>);(<U04F9>,<U04F8>);(<U04FB>,<U04FA>);(<U04FD>,<U04FC>);/ - (<U04FF>,<U04FE>);(<U0501>,<U0500>);(<U0503>,<U0502>);(<U0505>,<U0504>);/ - (<U0507>,<U0506>);(<U0509>,<U0508>);(<U050B>,<U050A>);(<U050D>,<U050C>);/ - (<U050F>,<U050E>);(<U0511>,<U0510>);(<U0513>,<U0512>);(<U0515>,<U0514>);/ - (<U0517>,<U0516>);(<U0519>,<U0518>);(<U051B>,<U051A>);(<U051D>,<U051C>);/ - (<U051F>,<U051E>);(<U0521>,<U0520>);(<U0523>,<U0522>);(<U0525>,<U0524>);/ - (<U0527>,<U0526>);(<U0529>,<U0528>);(<U052B>,<U052A>);(<U052D>,<U052C>);/ - (<U052F>,<U052E>);(<U0561>,<U0531>);(<U0562>,<U0532>);(<U0563>,<U0533>);/ - (<U0564>,<U0534>);(<U0565>,<U0535>);(<U0566>,<U0536>);(<U0567>,<U0537>);/ - (<U0568>,<U0538>);(<U0569>,<U0539>);(<U056A>,<U053A>);(<U056B>,<U053B>);/ - (<U056C>,<U053C>);(<U056D>,<U053D>);(<U056E>,<U053E>);(<U056F>,<U053F>);/ - (<U0570>,<U0540>);(<U0571>,<U0541>);(<U0572>,<U0542>);(<U0573>,<U0543>);/ - (<U0574>,<U0544>);(<U0575>,<U0545>);(<U0576>,<U0546>);(<U0577>,<U0547>);/ - (<U0578>,<U0548>);(<U0579>,<U0549>);(<U057A>,<U054A>);(<U057B>,<U054B>);/ - (<U057C>,<U054C>);(<U057D>,<U054D>);(<U057E>,<U054E>);(<U057F>,<U054F>);/ - (<U0580>,<U0550>);(<U0581>,<U0551>);(<U0582>,<U0552>);(<U0583>,<U0553>);/ - (<U0584>,<U0554>);(<U0585>,<U0555>);(<U0586>,<U0556>);(<U13F8>,<U13F0>);/ - (<U13F9>,<U13F1>);(<U13FA>,<U13F2>);(<U13FB>,<U13F3>);(<U13FC>,<U13F4>);/ - (<U13FD>,<U13F5>);(<U1C80>,<U0412>);(<U1C81>,<U0414>);(<U1C82>,<U041E>);/ - (<U1C83>,<U0421>);(<U1C84>,<U0422>);(<U1C85>,<U0422>);(<U1C86>,<U042A>);/ - (<U1C87>,<U0462>);(<U1C88>,<UA64A>);(<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);/ - (<U1D8E>,<UA7C6>);(<U1E01>,<U1E00>);(<U1E03>,<U1E02>);(<U1E05>,<U1E04>);/ - (<U1E07>,<U1E06>);(<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);/ - (<U1E0F>,<U1E0E>);(<U1E11>,<U1E10>);(<U1E13>,<U1E12>);(<U1E15>,<U1E14>);/ - (<U1E17>,<U1E16>);(<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);/ - (<U1E1F>,<U1E1E>);(<U1E21>,<U1E20>);(<U1E23>,<U1E22>);(<U1E25>,<U1E24>);/ - (<U1E27>,<U1E26>);(<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);/ - (<U1E2F>,<U1E2E>);(<U1E31>,<U1E30>);(<U1E33>,<U1E32>);(<U1E35>,<U1E34>);/ - (<U1E37>,<U1E36>);(<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);/ - (<U1E3F>,<U1E3E>);(<U1E41>,<U1E40>);(<U1E43>,<U1E42>);(<U1E45>,<U1E44>);/ - (<U1E47>,<U1E46>);(<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);/ - (<U1E4F>,<U1E4E>);(<U1E51>,<U1E50>);(<U1E53>,<U1E52>);(<U1E55>,<U1E54>);/ - (<U1E57>,<U1E56>);(<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);/ - (<U1E5F>,<U1E5E>);(<U1E61>,<U1E60>);(<U1E63>,<U1E62>);(<U1E65>,<U1E64>);/ - (<U1E67>,<U1E66>);(<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);/ - (<U1E6F>,<U1E6E>);(<U1E71>,<U1E70>);(<U1E73>,<U1E72>);(<U1E75>,<U1E74>);/ - (<U1E77>,<U1E76>);(<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);/ - (<U1E7F>,<U1E7E>);(<U1E81>,<U1E80>);(<U1E83>,<U1E82>);(<U1E85>,<U1E84>);/ - (<U1E87>,<U1E86>);(<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);/ - (<U1E8F>,<U1E8E>);(<U1E91>,<U1E90>);(<U1E93>,<U1E92>);(<U1E95>,<U1E94>);/ - (<U1E9B>,<U1E60>);(<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);/ - (<U1EA7>,<U1EA6>);(<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);/ - (<U1EAF>,<U1EAE>);(<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);/ - (<U1EB7>,<U1EB6>);(<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);/ - (<U1EBF>,<U1EBE>);(<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);/ - (<U1EC7>,<U1EC6>);(<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);/ - (<U1ECF>,<U1ECE>);(<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);/ - (<U1ED7>,<U1ED6>);(<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);/ - (<U1EDF>,<U1EDE>);(<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);/ - (<U1EE7>,<U1EE6>);(<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);/ - (<U1EEF>,<U1EEE>);(<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);/ - (<U1EF7>,<U1EF6>);(<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);/ - (<U1EFF>,<U1EFE>);(<U1F00>,<U1F08>);(<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);/ - (<U1F03>,<U1F0B>);(<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);/ - (<U1F07>,<U1F0F>);(<U1F10>,<U1F18>);(<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);/ - (<U1F13>,<U1F1B>);(<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);/ - (<U1F21>,<U1F29>);(<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);/ - (<U1F25>,<U1F2D>);(<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);/ - (<U1F31>,<U1F39>);(<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);/ - (<U1F35>,<U1F3D>);(<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);/ - (<U1F41>,<U1F49>);(<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);/ - (<U1F45>,<U1F4D>);(<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);/ - (<U1F57>,<U1F5F>);(<U1F60>,<U1F68>);(<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);/ - (<U1F63>,<U1F6B>);(<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);/ - (<U1F67>,<U1F6F>);(<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);/ - (<U1F73>,<U1FC9>);(<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);/ - (<U1F77>,<U1FDB>);(<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);/ - (<U1F7B>,<U1FEB>);(<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);/ - (<U1F81>,<U1F89>);(<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);/ - (<U1F85>,<U1F8D>);(<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);/ - (<U1F91>,<U1F99>);(<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);/ - (<U1F95>,<U1F9D>);(<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);/ - (<U1FA1>,<U1FA9>);(<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);/ - (<U1FA5>,<U1FAD>);(<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);/ - (<U1FB1>,<U1FB9>);(<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);/ - (<U1FD0>,<U1FD8>);(<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);/ - (<U1FE5>,<U1FEC>);(<U1FF3>,<U1FFC>);(<U214E>,<U2132>);(<U2170>,<U2160>);/ - (<U2171>,<U2161>);(<U2172>,<U2162>);(<U2173>,<U2163>);(<U2174>,<U2164>);/ - (<U2175>,<U2165>);(<U2176>,<U2166>);(<U2177>,<U2167>);(<U2178>,<U2168>);/ - (<U2179>,<U2169>);(<U217A>,<U216A>);(<U217B>,<U216B>);(<U217C>,<U216C>);/ - (<U217D>,<U216D>);(<U217E>,<U216E>);(<U217F>,<U216F>);(<U2184>,<U2183>);/ - (<U24D0>,<U24B6>);(<U24D1>,<U24B7>);(<U24D2>,<U24B8>);(<U24D3>,<U24B9>);/ - (<U24D4>,<U24BA>);(<U24D5>,<U24BB>);(<U24D6>,<U24BC>);(<U24D7>,<U24BD>);/ - (<U24D8>,<U24BE>);(<U24D9>,<U24BF>);(<U24DA>,<U24C0>);(<U24DB>,<U24C1>);/ - (<U24DC>,<U24C2>);(<U24DD>,<U24C3>);(<U24DE>,<U24C4>);(<U24DF>,<U24C5>);/ - (<U24E0>,<U24C6>);(<U24E1>,<U24C7>);(<U24E2>,<U24C8>);(<U24E3>,<U24C9>);/ - (<U24E4>,<U24CA>);(<U24E5>,<U24CB>);(<U24E6>,<U24CC>);(<U24E7>,<U24CD>);/ - (<U24E8>,<U24CE>);(<U24E9>,<U24CF>);(<U2C30>,<U2C00>);(<U2C31>,<U2C01>);/ - (<U2C32>,<U2C02>);(<U2C33>,<U2C03>);(<U2C34>,<U2C04>);(<U2C35>,<U2C05>);/ - (<U2C36>,<U2C06>);(<U2C37>,<U2C07>);(<U2C38>,<U2C08>);(<U2C39>,<U2C09>);/ - (<U2C3A>,<U2C0A>);(<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);/ - (<U2C3E>,<U2C0E>);(<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);(<U2C41>,<U2C11>);/ - (<U2C42>,<U2C12>);(<U2C43>,<U2C13>);(<U2C44>,<U2C14>);(<U2C45>,<U2C15>);/ - (<U2C46>,<U2C16>);(<U2C47>,<U2C17>);(<U2C48>,<U2C18>);(<U2C49>,<U2C19>);/ - (<U2C4A>,<U2C1A>);(<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);/ - (<U2C4E>,<U2C1E>);(<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);(<U2C51>,<U2C21>);/ - (<U2C52>,<U2C22>);(<U2C53>,<U2C23>);(<U2C54>,<U2C24>);(<U2C55>,<U2C25>);/ - (<U2C56>,<U2C26>);(<U2C57>,<U2C27>);(<U2C58>,<U2C28>);(<U2C59>,<U2C29>);/ - (<U2C5A>,<U2C2A>);(<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);/ - (<U2C5E>,<U2C2E>);(<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);(<U2C65>,<U023A>);/ - (<U2C66>,<U023E>);(<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);/ - (<U2C73>,<U2C72>);(<U2C76>,<U2C75>);(<U2C81>,<U2C80>);(<U2C83>,<U2C82>);/ - (<U2C85>,<U2C84>);(<U2C87>,<U2C86>);(<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);/ - (<U2C8D>,<U2C8C>);(<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);(<U2C93>,<U2C92>);/ - (<U2C95>,<U2C94>);(<U2C97>,<U2C96>);(<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);/ - (<U2C9D>,<U2C9C>);(<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);/ - (<U2CA5>,<U2CA4>);(<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);/ - (<U2CAD>,<U2CAC>);(<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);/ - (<U2CB5>,<U2CB4>);(<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);/ - (<U2CBD>,<U2CBC>);(<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);/ - (<U2CC5>,<U2CC4>);(<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);/ - (<U2CCD>,<U2CCC>);(<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);/ - (<U2CD5>,<U2CD4>);(<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);/ - (<U2CDD>,<U2CDC>);(<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);/ - (<U2CEC>,<U2CEB>);(<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);/ - (<U2D01>,<U10A1>);(<U2D02>,<U10A2>);(<U2D03>,<U10A3>);(<U2D04>,<U10A4>);/ - (<U2D05>,<U10A5>);(<U2D06>,<U10A6>);(<U2D07>,<U10A7>);(<U2D08>,<U10A8>);/ - (<U2D09>,<U10A9>);(<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);/ - (<U2D0D>,<U10AD>);(<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);/ - (<U2D11>,<U10B1>);(<U2D12>,<U10B2>);(<U2D13>,<U10B3>);(<U2D14>,<U10B4>);/ - (<U2D15>,<U10B5>);(<U2D16>,<U10B6>);(<U2D17>,<U10B7>);(<U2D18>,<U10B8>);/ - (<U2D19>,<U10B9>);(<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);/ - (<U2D1D>,<U10BD>);(<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);/ - (<U2D21>,<U10C1>);(<U2D22>,<U10C2>);(<U2D23>,<U10C3>);(<U2D24>,<U10C4>);/ - (<U2D25>,<U10C5>);(<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);(<UA641>,<UA640>);/ - (<UA643>,<UA642>);(<UA645>,<UA644>);(<UA647>,<UA646>);(<UA649>,<UA648>);/ - (<UA64B>,<UA64A>);(<UA64D>,<UA64C>);(<UA64F>,<UA64E>);(<UA651>,<UA650>);/ - (<UA653>,<UA652>);(<UA655>,<UA654>);(<UA657>,<UA656>);(<UA659>,<UA658>);/ - (<UA65B>,<UA65A>);(<UA65D>,<UA65C>);(<UA65F>,<UA65E>);(<UA661>,<UA660>);/ - (<UA663>,<UA662>);(<UA665>,<UA664>);(<UA667>,<UA666>);(<UA669>,<UA668>);/ - (<UA66B>,<UA66A>);(<UA66D>,<UA66C>);(<UA681>,<UA680>);(<UA683>,<UA682>);/ - (<UA685>,<UA684>);(<UA687>,<UA686>);(<UA689>,<UA688>);(<UA68B>,<UA68A>);/ - (<UA68D>,<UA68C>);(<UA68F>,<UA68E>);(<UA691>,<UA690>);(<UA693>,<UA692>);/ - (<UA695>,<UA694>);(<UA697>,<UA696>);(<UA699>,<UA698>);(<UA69B>,<UA69A>);/ - (<UA723>,<UA722>);(<UA725>,<UA724>);(<UA727>,<UA726>);(<UA729>,<UA728>);/ - (<UA72B>,<UA72A>);(<UA72D>,<UA72C>);(<UA72F>,<UA72E>);(<UA733>,<UA732>);/ - (<UA735>,<UA734>);(<UA737>,<UA736>);(<UA739>,<UA738>);(<UA73B>,<UA73A>);/ - (<UA73D>,<UA73C>);(<UA73F>,<UA73E>);(<UA741>,<UA740>);(<UA743>,<UA742>);/ - (<UA745>,<UA744>);(<UA747>,<UA746>);(<UA749>,<UA748>);(<UA74B>,<UA74A>);/ - (<UA74D>,<UA74C>);(<UA74F>,<UA74E>);(<UA751>,<UA750>);(<UA753>,<UA752>);/ - (<UA755>,<UA754>);(<UA757>,<UA756>);(<UA759>,<UA758>);(<UA75B>,<UA75A>);/ - (<UA75D>,<UA75C>);(<UA75F>,<UA75E>);(<UA761>,<UA760>);(<UA763>,<UA762>);/ - (<UA765>,<UA764>);(<UA767>,<UA766>);(<UA769>,<UA768>);(<UA76B>,<UA76A>);/ - (<UA76D>,<UA76C>);(<UA76F>,<UA76E>);(<UA77A>,<UA779>);(<UA77C>,<UA77B>);/ - (<UA77F>,<UA77E>);(<UA781>,<UA780>);(<UA783>,<UA782>);(<UA785>,<UA784>);/ - (<UA787>,<UA786>);(<UA78C>,<UA78B>);(<UA791>,<UA790>);(<UA793>,<UA792>);/ - (<UA794>,<UA7C4>);(<UA797>,<UA796>);(<UA799>,<UA798>);(<UA79B>,<UA79A>);/ - (<UA79D>,<UA79C>);(<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);/ - (<UA7A5>,<UA7A4>);(<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);/ - (<UA7B7>,<UA7B6>);(<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);/ - (<UA7BF>,<UA7BE>);(<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);/ - (<UA7CA>,<UA7C9>);(<UA7D1>,<UA7D0>);(<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);/ - (<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);(<UAB71>,<U13A1>);/ - (<UAB72>,<U13A2>);(<UAB73>,<U13A3>);(<UAB74>,<U13A4>);(<UAB75>,<U13A5>);/ - (<UAB76>,<U13A6>);(<UAB77>,<U13A7>);(<UAB78>,<U13A8>);(<UAB79>,<U13A9>);/ - (<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);(<UAB7D>,<U13AD>);/ - (<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);(<UAB81>,<U13B1>);/ - (<UAB82>,<U13B2>);(<UAB83>,<U13B3>);(<UAB84>,<U13B4>);(<UAB85>,<U13B5>);/ - (<UAB86>,<U13B6>);(<UAB87>,<U13B7>);(<UAB88>,<U13B8>);(<UAB89>,<U13B9>);/ - (<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);(<UAB8D>,<U13BD>);/ - (<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);(<UAB91>,<U13C1>);/ - (<UAB92>,<U13C2>);(<UAB93>,<U13C3>);(<UAB94>,<U13C4>);(<UAB95>,<U13C5>);/ - (<UAB96>,<U13C6>);(<UAB97>,<U13C7>);(<UAB98>,<U13C8>);(<UAB99>,<U13C9>);/ - (<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);(<UAB9D>,<U13CD>);/ - (<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);(<UABA1>,<U13D1>);/ - (<UABA2>,<U13D2>);(<UABA3>,<U13D3>);(<UABA4>,<U13D4>);(<UABA5>,<U13D5>);/ - (<UABA6>,<U13D6>);(<UABA7>,<U13D7>);(<UABA8>,<U13D8>);(<UABA9>,<U13D9>);/ - (<UABAA>,<U13DA>);(<UABAB>,<U13DB>);(<UABAC>,<U13DC>);(<UABAD>,<U13DD>);/ - (<UABAE>,<U13DE>);(<UABAF>,<U13DF>);(<UABB0>,<U13E0>);(<UABB1>,<U13E1>);/ - (<UABB2>,<U13E2>);(<UABB3>,<U13E3>);(<UABB4>,<U13E4>);(<UABB5>,<U13E5>);/ - (<UABB6>,<U13E6>);(<UABB7>,<U13E7>);(<UABB8>,<U13E8>);(<UABB9>,<U13E9>);/ - (<UABBA>,<U13EA>);(<UABBB>,<U13EB>);(<UABBC>,<U13EC>);(<UABBD>,<U13ED>);/ - (<UABBE>,<U13EE>);(<UABBF>,<U13EF>);(<UFF41>,<UFF21>);(<UFF42>,<UFF22>);/ - (<UFF43>,<UFF23>);(<UFF44>,<UFF24>);(<UFF45>,<UFF25>);(<UFF46>,<UFF26>);/ - (<UFF47>,<UFF27>);(<UFF48>,<UFF28>);(<UFF49>,<UFF29>);(<UFF4A>,<UFF2A>);/ - (<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);(<UFF4E>,<UFF2E>);/ - (<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);(<UFF51>,<UFF31>);(<UFF52>,<UFF32>);/ - (<UFF53>,<UFF33>);(<UFF54>,<UFF34>);(<UFF55>,<UFF35>);(<UFF56>,<UFF36>);/ - (<UFF57>,<UFF37>);(<UFF58>,<UFF38>);(<UFF59>,<UFF39>);(<UFF5A>,<UFF3A>);/ - (<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ + (<U0199>,<U0198>);(<U019A>,<U023D>);(<U019B>,<UA7DC>);(<U019E>,<U0220>);/ + (<U01A1>,<U01A0>);(<U01A3>,<U01A2>);(<U01A5>,<U01A4>);(<U01A8>,<U01A7>);/ + (<U01AD>,<U01AC>);(<U01B0>,<U01AF>);(<U01B4>,<U01B3>);(<U01B6>,<U01B5>);/ + (<U01B9>,<U01B8>);(<U01BD>,<U01BC>);(<U01BF>,<U01F7>);(<U01C4>,<U01C5>);/ + (<U01C6>,<U01C5>);(<U01C7>,<U01C8>);(<U01C9>,<U01C8>);(<U01CA>,<U01CB>);/ + (<U01CC>,<U01CB>);(<U01CE>,<U01CD>);(<U01D0>,<U01CF>);(<U01D2>,<U01D1>);/ + (<U01D4>,<U01D3>);(<U01D6>,<U01D5>);(<U01D8>,<U01D7>);(<U01DA>,<U01D9>);/ + (<U01DC>,<U01DB>);(<U01DD>,<U018E>);(<U01DF>,<U01DE>);(<U01E1>,<U01E0>);/ + (<U01E3>,<U01E2>);(<U01E5>,<U01E4>);(<U01E7>,<U01E6>);(<U01E9>,<U01E8>);/ + (<U01EB>,<U01EA>);(<U01ED>,<U01EC>);(<U01EF>,<U01EE>);(<U01F1>,<U01F2>);/ + (<U01F3>,<U01F2>);(<U01F5>,<U01F4>);(<U01F9>,<U01F8>);(<U01FB>,<U01FA>);/ + (<U01FD>,<U01FC>);(<U01FF>,<U01FE>);(<U0201>,<U0200>);(<U0203>,<U0202>);/ + (<U0205>,<U0204>);(<U0207>,<U0206>);(<U0209>,<U0208>);(<U020B>,<U020A>);/ + (<U020D>,<U020C>);(<U020F>,<U020E>);(<U0211>,<U0210>);(<U0213>,<U0212>);/ + (<U0215>,<U0214>);(<U0217>,<U0216>);(<U0219>,<U0218>);(<U021B>,<U021A>);/ + (<U021D>,<U021C>);(<U021F>,<U021E>);(<U0223>,<U0222>);(<U0225>,<U0224>);/ + (<U0227>,<U0226>);(<U0229>,<U0228>);(<U022B>,<U022A>);(<U022D>,<U022C>);/ + (<U022F>,<U022E>);(<U0231>,<U0230>);(<U0233>,<U0232>);(<U023C>,<U023B>);/ + (<U023F>,<U2C7E>);(<U0240>,<U2C7F>);(<U0242>,<U0241>);(<U0247>,<U0246>);/ + (<U0249>,<U0248>);(<U024B>,<U024A>);(<U024D>,<U024C>);(<U024F>,<U024E>);/ + (<U0250>,<U2C6F>);(<U0251>,<U2C6D>);(<U0252>,<U2C70>);(<U0253>,<U0181>);/ + (<U0254>,<U0186>);(<U0256>,<U0189>);(<U0257>,<U018A>);(<U0259>,<U018F>);/ + (<U025B>,<U0190>);(<U025C>,<UA7AB>);(<U0260>,<U0193>);(<U0261>,<UA7AC>);/ + (<U0263>,<U0194>);(<U0264>,<UA7CB>);(<U0265>,<UA78D>);(<U0266>,<UA7AA>);/ + (<U0268>,<U0197>);(<U0269>,<U0196>);(<U026A>,<UA7AE>);(<U026B>,<U2C62>);/ + (<U026C>,<UA7AD>);(<U026F>,<U019C>);(<U0271>,<U2C6E>);(<U0272>,<U019D>);/ + (<U0275>,<U019F>);(<U027D>,<U2C64>);(<U0280>,<U01A6>);(<U0282>,<UA7C5>);/ + (<U0283>,<U01A9>);(<U0287>,<UA7B1>);(<U0288>,<U01AE>);(<U0289>,<U0244>);/ + (<U028A>,<U01B1>);(<U028B>,<U01B2>);(<U028C>,<U0245>);(<U0292>,<U01B7>);/ + (<U029D>,<UA7B2>);(<U029E>,<UA7B0>);(<U0345>,<U0399>);(<U0371>,<U0370>);/ + (<U0373>,<U0372>);(<U0377>,<U0376>);(<U037B>,<U03FD>);(<U037C>,<U03FE>);/ + (<U037D>,<U03FF>);(<U03AC>,<U0386>);(<U03AD>,<U0388>);(<U03AE>,<U0389>);/ + (<U03AF>,<U038A>);(<U03B1>,<U0391>);(<U03B2>,<U0392>);(<U03B3>,<U0393>);/ + (<U03B4>,<U0394>);(<U03B5>,<U0395>);(<U03B6>,<U0396>);(<U03B7>,<U0397>);/ + (<U03B8>,<U0398>);(<U03B9>,<U0399>);(<U03BA>,<U039A>);(<U03BB>,<U039B>);/ + (<U03BC>,<U039C>);(<U03BD>,<U039D>);(<U03BE>,<U039E>);(<U03BF>,<U039F>);/ + (<U03C0>,<U03A0>);(<U03C1>,<U03A1>);(<U03C2>,<U03A3>);(<U03C3>,<U03A3>);/ + (<U03C4>,<U03A4>);(<U03C5>,<U03A5>);(<U03C6>,<U03A6>);(<U03C7>,<U03A7>);/ + (<U03C8>,<U03A8>);(<U03C9>,<U03A9>);(<U03CA>,<U03AA>);(<U03CB>,<U03AB>);/ + (<U03CC>,<U038C>);(<U03CD>,<U038E>);(<U03CE>,<U038F>);(<U03D0>,<U0392>);/ + (<U03D1>,<U0398>);(<U03D5>,<U03A6>);(<U03D6>,<U03A0>);(<U03D7>,<U03CF>);/ + (<U03D9>,<U03D8>);(<U03DB>,<U03DA>);(<U03DD>,<U03DC>);(<U03DF>,<U03DE>);/ + (<U03E1>,<U03E0>);(<U03E3>,<U03E2>);(<U03E5>,<U03E4>);(<U03E7>,<U03E6>);/ + (<U03E9>,<U03E8>);(<U03EB>,<U03EA>);(<U03ED>,<U03EC>);(<U03EF>,<U03EE>);/ + (<U03F0>,<U039A>);(<U03F1>,<U03A1>);(<U03F2>,<U03F9>);(<U03F3>,<U037F>);/ + (<U03F5>,<U0395>);(<U03F8>,<U03F7>);(<U03FB>,<U03FA>);(<U0430>,<U0410>);/ + (<U0431>,<U0411>);(<U0432>,<U0412>);(<U0433>,<U0413>);(<U0434>,<U0414>);/ + (<U0435>,<U0415>);(<U0436>,<U0416>);(<U0437>,<U0417>);(<U0438>,<U0418>);/ + (<U0439>,<U0419>);(<U043A>,<U041A>);(<U043B>,<U041B>);(<U043C>,<U041C>);/ + (<U043D>,<U041D>);(<U043E>,<U041E>);(<U043F>,<U041F>);(<U0440>,<U0420>);/ + (<U0441>,<U0421>);(<U0442>,<U0422>);(<U0443>,<U0423>);(<U0444>,<U0424>);/ + (<U0445>,<U0425>);(<U0446>,<U0426>);(<U0447>,<U0427>);(<U0448>,<U0428>);/ + (<U0449>,<U0429>);(<U044A>,<U042A>);(<U044B>,<U042B>);(<U044C>,<U042C>);/ + (<U044D>,<U042D>);(<U044E>,<U042E>);(<U044F>,<U042F>);(<U0450>,<U0400>);/ + (<U0451>,<U0401>);(<U0452>,<U0402>);(<U0453>,<U0403>);(<U0454>,<U0404>);/ + (<U0455>,<U0405>);(<U0456>,<U0406>);(<U0457>,<U0407>);(<U0458>,<U0408>);/ + (<U0459>,<U0409>);(<U045A>,<U040A>);(<U045B>,<U040B>);(<U045C>,<U040C>);/ + (<U045D>,<U040D>);(<U045E>,<U040E>);(<U045F>,<U040F>);(<U0461>,<U0460>);/ + (<U0463>,<U0462>);(<U0465>,<U0464>);(<U0467>,<U0466>);(<U0469>,<U0468>);/ + (<U046B>,<U046A>);(<U046D>,<U046C>);(<U046F>,<U046E>);(<U0471>,<U0470>);/ + (<U0473>,<U0472>);(<U0475>,<U0474>);(<U0477>,<U0476>);(<U0479>,<U0478>);/ + (<U047B>,<U047A>);(<U047D>,<U047C>);(<U047F>,<U047E>);(<U0481>,<U0480>);/ + (<U048B>,<U048A>);(<U048D>,<U048C>);(<U048F>,<U048E>);(<U0491>,<U0490>);/ + (<U0493>,<U0492>);(<U0495>,<U0494>);(<U0497>,<U0496>);(<U0499>,<U0498>);/ + (<U049B>,<U049A>);(<U049D>,<U049C>);(<U049F>,<U049E>);(<U04A1>,<U04A0>);/ + (<U04A3>,<U04A2>);(<U04A5>,<U04A4>);(<U04A7>,<U04A6>);(<U04A9>,<U04A8>);/ + (<U04AB>,<U04AA>);(<U04AD>,<U04AC>);(<U04AF>,<U04AE>);(<U04B1>,<U04B0>);/ + (<U04B3>,<U04B2>);(<U04B5>,<U04B4>);(<U04B7>,<U04B6>);(<U04B9>,<U04B8>);/ + (<U04BB>,<U04BA>);(<U04BD>,<U04BC>);(<U04BF>,<U04BE>);(<U04C2>,<U04C1>);/ + (<U04C4>,<U04C3>);(<U04C6>,<U04C5>);(<U04C8>,<U04C7>);(<U04CA>,<U04C9>);/ + (<U04CC>,<U04CB>);(<U04CE>,<U04CD>);(<U04CF>,<U04C0>);(<U04D1>,<U04D0>);/ + (<U04D3>,<U04D2>);(<U04D5>,<U04D4>);(<U04D7>,<U04D6>);(<U04D9>,<U04D8>);/ + (<U04DB>,<U04DA>);(<U04DD>,<U04DC>);(<U04DF>,<U04DE>);(<U04E1>,<U04E0>);/ + (<U04E3>,<U04E2>);(<U04E5>,<U04E4>);(<U04E7>,<U04E6>);(<U04E9>,<U04E8>);/ + (<U04EB>,<U04EA>);(<U04ED>,<U04EC>);(<U04EF>,<U04EE>);(<U04F1>,<U04F0>);/ + (<U04F3>,<U04F2>);(<U04F5>,<U04F4>);(<U04F7>,<U04F6>);(<U04F9>,<U04F8>);/ + (<U04FB>,<U04FA>);(<U04FD>,<U04FC>);(<U04FF>,<U04FE>);(<U0501>,<U0500>);/ + (<U0503>,<U0502>);(<U0505>,<U0504>);(<U0507>,<U0506>);(<U0509>,<U0508>);/ + (<U050B>,<U050A>);(<U050D>,<U050C>);(<U050F>,<U050E>);(<U0511>,<U0510>);/ + (<U0513>,<U0512>);(<U0515>,<U0514>);(<U0517>,<U0516>);(<U0519>,<U0518>);/ + (<U051B>,<U051A>);(<U051D>,<U051C>);(<U051F>,<U051E>);(<U0521>,<U0520>);/ + (<U0523>,<U0522>);(<U0525>,<U0524>);(<U0527>,<U0526>);(<U0529>,<U0528>);/ + (<U052B>,<U052A>);(<U052D>,<U052C>);(<U052F>,<U052E>);(<U0561>,<U0531>);/ + (<U0562>,<U0532>);(<U0563>,<U0533>);(<U0564>,<U0534>);(<U0565>,<U0535>);/ + (<U0566>,<U0536>);(<U0567>,<U0537>);(<U0568>,<U0538>);(<U0569>,<U0539>);/ + (<U056A>,<U053A>);(<U056B>,<U053B>);(<U056C>,<U053C>);(<U056D>,<U053D>);/ + (<U056E>,<U053E>);(<U056F>,<U053F>);(<U0570>,<U0540>);(<U0571>,<U0541>);/ + (<U0572>,<U0542>);(<U0573>,<U0543>);(<U0574>,<U0544>);(<U0575>,<U0545>);/ + (<U0576>,<U0546>);(<U0577>,<U0547>);(<U0578>,<U0548>);(<U0579>,<U0549>);/ + (<U057A>,<U054A>);(<U057B>,<U054B>);(<U057C>,<U054C>);(<U057D>,<U054D>);/ + (<U057E>,<U054E>);(<U057F>,<U054F>);(<U0580>,<U0550>);(<U0581>,<U0551>);/ + (<U0582>,<U0552>);(<U0583>,<U0553>);(<U0584>,<U0554>);(<U0585>,<U0555>);/ + (<U0586>,<U0556>);(<U13F8>,<U13F0>);(<U13F9>,<U13F1>);(<U13FA>,<U13F2>);/ + (<U13FB>,<U13F3>);(<U13FC>,<U13F4>);(<U13FD>,<U13F5>);(<U1C80>,<U0412>);/ + (<U1C81>,<U0414>);(<U1C82>,<U041E>);(<U1C83>,<U0421>);(<U1C84>,<U0422>);/ + (<U1C85>,<U0422>);(<U1C86>,<U042A>);(<U1C87>,<U0462>);(<U1C88>,<UA64A>);/ + (<U1C8A>,<U1C89>);(<U1D79>,<UA77D>);(<U1D7D>,<U2C63>);(<U1D8E>,<UA7C6>);/ + (<U1E01>,<U1E00>);(<U1E03>,<U1E02>);(<U1E05>,<U1E04>);(<U1E07>,<U1E06>);/ + (<U1E09>,<U1E08>);(<U1E0B>,<U1E0A>);(<U1E0D>,<U1E0C>);(<U1E0F>,<U1E0E>);/ + (<U1E11>,<U1E10>);(<U1E13>,<U1E12>);(<U1E15>,<U1E14>);(<U1E17>,<U1E16>);/ + (<U1E19>,<U1E18>);(<U1E1B>,<U1E1A>);(<U1E1D>,<U1E1C>);(<U1E1F>,<U1E1E>);/ + (<U1E21>,<U1E20>);(<U1E23>,<U1E22>);(<U1E25>,<U1E24>);(<U1E27>,<U1E26>);/ + (<U1E29>,<U1E28>);(<U1E2B>,<U1E2A>);(<U1E2D>,<U1E2C>);(<U1E2F>,<U1E2E>);/ + (<U1E31>,<U1E30>);(<U1E33>,<U1E32>);(<U1E35>,<U1E34>);(<U1E37>,<U1E36>);/ + (<U1E39>,<U1E38>);(<U1E3B>,<U1E3A>);(<U1E3D>,<U1E3C>);(<U1E3F>,<U1E3E>);/ + (<U1E41>,<U1E40>);(<U1E43>,<U1E42>);(<U1E45>,<U1E44>);(<U1E47>,<U1E46>);/ + (<U1E49>,<U1E48>);(<U1E4B>,<U1E4A>);(<U1E4D>,<U1E4C>);(<U1E4F>,<U1E4E>);/ + (<U1E51>,<U1E50>);(<U1E53>,<U1E52>);(<U1E55>,<U1E54>);(<U1E57>,<U1E56>);/ + (<U1E59>,<U1E58>);(<U1E5B>,<U1E5A>);(<U1E5D>,<U1E5C>);(<U1E5F>,<U1E5E>);/ + (<U1E61>,<U1E60>);(<U1E63>,<U1E62>);(<U1E65>,<U1E64>);(<U1E67>,<U1E66>);/ + (<U1E69>,<U1E68>);(<U1E6B>,<U1E6A>);(<U1E6D>,<U1E6C>);(<U1E6F>,<U1E6E>);/ + (<U1E71>,<U1E70>);(<U1E73>,<U1E72>);(<U1E75>,<U1E74>);(<U1E77>,<U1E76>);/ + (<U1E79>,<U1E78>);(<U1E7B>,<U1E7A>);(<U1E7D>,<U1E7C>);(<U1E7F>,<U1E7E>);/ + (<U1E81>,<U1E80>);(<U1E83>,<U1E82>);(<U1E85>,<U1E84>);(<U1E87>,<U1E86>);/ + (<U1E89>,<U1E88>);(<U1E8B>,<U1E8A>);(<U1E8D>,<U1E8C>);(<U1E8F>,<U1E8E>);/ + (<U1E91>,<U1E90>);(<U1E93>,<U1E92>);(<U1E95>,<U1E94>);(<U1E9B>,<U1E60>);/ + (<U1EA1>,<U1EA0>);(<U1EA3>,<U1EA2>);(<U1EA5>,<U1EA4>);(<U1EA7>,<U1EA6>);/ + (<U1EA9>,<U1EA8>);(<U1EAB>,<U1EAA>);(<U1EAD>,<U1EAC>);(<U1EAF>,<U1EAE>);/ + (<U1EB1>,<U1EB0>);(<U1EB3>,<U1EB2>);(<U1EB5>,<U1EB4>);(<U1EB7>,<U1EB6>);/ + (<U1EB9>,<U1EB8>);(<U1EBB>,<U1EBA>);(<U1EBD>,<U1EBC>);(<U1EBF>,<U1EBE>);/ + (<U1EC1>,<U1EC0>);(<U1EC3>,<U1EC2>);(<U1EC5>,<U1EC4>);(<U1EC7>,<U1EC6>);/ + (<U1EC9>,<U1EC8>);(<U1ECB>,<U1ECA>);(<U1ECD>,<U1ECC>);(<U1ECF>,<U1ECE>);/ + (<U1ED1>,<U1ED0>);(<U1ED3>,<U1ED2>);(<U1ED5>,<U1ED4>);(<U1ED7>,<U1ED6>);/ + (<U1ED9>,<U1ED8>);(<U1EDB>,<U1EDA>);(<U1EDD>,<U1EDC>);(<U1EDF>,<U1EDE>);/ + (<U1EE1>,<U1EE0>);(<U1EE3>,<U1EE2>);(<U1EE5>,<U1EE4>);(<U1EE7>,<U1EE6>);/ + (<U1EE9>,<U1EE8>);(<U1EEB>,<U1EEA>);(<U1EED>,<U1EEC>);(<U1EEF>,<U1EEE>);/ + (<U1EF1>,<U1EF0>);(<U1EF3>,<U1EF2>);(<U1EF5>,<U1EF4>);(<U1EF7>,<U1EF6>);/ + (<U1EF9>,<U1EF8>);(<U1EFB>,<U1EFA>);(<U1EFD>,<U1EFC>);(<U1EFF>,<U1EFE>);/ + (<U1F00>,<U1F08>);(<U1F01>,<U1F09>);(<U1F02>,<U1F0A>);(<U1F03>,<U1F0B>);/ + (<U1F04>,<U1F0C>);(<U1F05>,<U1F0D>);(<U1F06>,<U1F0E>);(<U1F07>,<U1F0F>);/ + (<U1F10>,<U1F18>);(<U1F11>,<U1F19>);(<U1F12>,<U1F1A>);(<U1F13>,<U1F1B>);/ + (<U1F14>,<U1F1C>);(<U1F15>,<U1F1D>);(<U1F20>,<U1F28>);(<U1F21>,<U1F29>);/ + (<U1F22>,<U1F2A>);(<U1F23>,<U1F2B>);(<U1F24>,<U1F2C>);(<U1F25>,<U1F2D>);/ + (<U1F26>,<U1F2E>);(<U1F27>,<U1F2F>);(<U1F30>,<U1F38>);(<U1F31>,<U1F39>);/ + (<U1F32>,<U1F3A>);(<U1F33>,<U1F3B>);(<U1F34>,<U1F3C>);(<U1F35>,<U1F3D>);/ + (<U1F36>,<U1F3E>);(<U1F37>,<U1F3F>);(<U1F40>,<U1F48>);(<U1F41>,<U1F49>);/ + (<U1F42>,<U1F4A>);(<U1F43>,<U1F4B>);(<U1F44>,<U1F4C>);(<U1F45>,<U1F4D>);/ + (<U1F51>,<U1F59>);(<U1F53>,<U1F5B>);(<U1F55>,<U1F5D>);(<U1F57>,<U1F5F>);/ + (<U1F60>,<U1F68>);(<U1F61>,<U1F69>);(<U1F62>,<U1F6A>);(<U1F63>,<U1F6B>);/ + (<U1F64>,<U1F6C>);(<U1F65>,<U1F6D>);(<U1F66>,<U1F6E>);(<U1F67>,<U1F6F>);/ + (<U1F70>,<U1FBA>);(<U1F71>,<U1FBB>);(<U1F72>,<U1FC8>);(<U1F73>,<U1FC9>);/ + (<U1F74>,<U1FCA>);(<U1F75>,<U1FCB>);(<U1F76>,<U1FDA>);(<U1F77>,<U1FDB>);/ + (<U1F78>,<U1FF8>);(<U1F79>,<U1FF9>);(<U1F7A>,<U1FEA>);(<U1F7B>,<U1FEB>);/ + (<U1F7C>,<U1FFA>);(<U1F7D>,<U1FFB>);(<U1F80>,<U1F88>);(<U1F81>,<U1F89>);/ + (<U1F82>,<U1F8A>);(<U1F83>,<U1F8B>);(<U1F84>,<U1F8C>);(<U1F85>,<U1F8D>);/ + (<U1F86>,<U1F8E>);(<U1F87>,<U1F8F>);(<U1F90>,<U1F98>);(<U1F91>,<U1F99>);/ + (<U1F92>,<U1F9A>);(<U1F93>,<U1F9B>);(<U1F94>,<U1F9C>);(<U1F95>,<U1F9D>);/ + (<U1F96>,<U1F9E>);(<U1F97>,<U1F9F>);(<U1FA0>,<U1FA8>);(<U1FA1>,<U1FA9>);/ + (<U1FA2>,<U1FAA>);(<U1FA3>,<U1FAB>);(<U1FA4>,<U1FAC>);(<U1FA5>,<U1FAD>);/ + (<U1FA6>,<U1FAE>);(<U1FA7>,<U1FAF>);(<U1FB0>,<U1FB8>);(<U1FB1>,<U1FB9>);/ + (<U1FB3>,<U1FBC>);(<U1FBE>,<U0399>);(<U1FC3>,<U1FCC>);(<U1FD0>,<U1FD8>);/ + (<U1FD1>,<U1FD9>);(<U1FE0>,<U1FE8>);(<U1FE1>,<U1FE9>);(<U1FE5>,<U1FEC>);/ + (<U1FF3>,<U1FFC>);(<U214E>,<U2132>);(<U2170>,<U2160>);(<U2171>,<U2161>);/ + (<U2172>,<U2162>);(<U2173>,<U2163>);(<U2174>,<U2164>);(<U2175>,<U2165>);/ + (<U2176>,<U2166>);(<U2177>,<U2167>);(<U2178>,<U2168>);(<U2179>,<U2169>);/ + (<U217A>,<U216A>);(<U217B>,<U216B>);(<U217C>,<U216C>);(<U217D>,<U216D>);/ + (<U217E>,<U216E>);(<U217F>,<U216F>);(<U2184>,<U2183>);(<U24D0>,<U24B6>);/ + (<U24D1>,<U24B7>);(<U24D2>,<U24B8>);(<U24D3>,<U24B9>);(<U24D4>,<U24BA>);/ + (<U24D5>,<U24BB>);(<U24D6>,<U24BC>);(<U24D7>,<U24BD>);(<U24D8>,<U24BE>);/ + (<U24D9>,<U24BF>);(<U24DA>,<U24C0>);(<U24DB>,<U24C1>);(<U24DC>,<U24C2>);/ + (<U24DD>,<U24C3>);(<U24DE>,<U24C4>);(<U24DF>,<U24C5>);(<U24E0>,<U24C6>);/ + (<U24E1>,<U24C7>);(<U24E2>,<U24C8>);(<U24E3>,<U24C9>);(<U24E4>,<U24CA>);/ + (<U24E5>,<U24CB>);(<U24E6>,<U24CC>);(<U24E7>,<U24CD>);(<U24E8>,<U24CE>);/ + (<U24E9>,<U24CF>);(<U2C30>,<U2C00>);(<U2C31>,<U2C01>);(<U2C32>,<U2C02>);/ + (<U2C33>,<U2C03>);(<U2C34>,<U2C04>);(<U2C35>,<U2C05>);(<U2C36>,<U2C06>);/ + (<U2C37>,<U2C07>);(<U2C38>,<U2C08>);(<U2C39>,<U2C09>);(<U2C3A>,<U2C0A>);/ + (<U2C3B>,<U2C0B>);(<U2C3C>,<U2C0C>);(<U2C3D>,<U2C0D>);(<U2C3E>,<U2C0E>);/ + (<U2C3F>,<U2C0F>);(<U2C40>,<U2C10>);(<U2C41>,<U2C11>);(<U2C42>,<U2C12>);/ + (<U2C43>,<U2C13>);(<U2C44>,<U2C14>);(<U2C45>,<U2C15>);(<U2C46>,<U2C16>);/ + (<U2C47>,<U2C17>);(<U2C48>,<U2C18>);(<U2C49>,<U2C19>);(<U2C4A>,<U2C1A>);/ + (<U2C4B>,<U2C1B>);(<U2C4C>,<U2C1C>);(<U2C4D>,<U2C1D>);(<U2C4E>,<U2C1E>);/ + (<U2C4F>,<U2C1F>);(<U2C50>,<U2C20>);(<U2C51>,<U2C21>);(<U2C52>,<U2C22>);/ + (<U2C53>,<U2C23>);(<U2C54>,<U2C24>);(<U2C55>,<U2C25>);(<U2C56>,<U2C26>);/ + (<U2C57>,<U2C27>);(<U2C58>,<U2C28>);(<U2C59>,<U2C29>);(<U2C5A>,<U2C2A>);/ + (<U2C5B>,<U2C2B>);(<U2C5C>,<U2C2C>);(<U2C5D>,<U2C2D>);(<U2C5E>,<U2C2E>);/ + (<U2C5F>,<U2C2F>);(<U2C61>,<U2C60>);(<U2C65>,<U023A>);(<U2C66>,<U023E>);/ + (<U2C68>,<U2C67>);(<U2C6A>,<U2C69>);(<U2C6C>,<U2C6B>);(<U2C73>,<U2C72>);/ + (<U2C76>,<U2C75>);(<U2C81>,<U2C80>);(<U2C83>,<U2C82>);(<U2C85>,<U2C84>);/ + (<U2C87>,<U2C86>);(<U2C89>,<U2C88>);(<U2C8B>,<U2C8A>);(<U2C8D>,<U2C8C>);/ + (<U2C8F>,<U2C8E>);(<U2C91>,<U2C90>);(<U2C93>,<U2C92>);(<U2C95>,<U2C94>);/ + (<U2C97>,<U2C96>);(<U2C99>,<U2C98>);(<U2C9B>,<U2C9A>);(<U2C9D>,<U2C9C>);/ + (<U2C9F>,<U2C9E>);(<U2CA1>,<U2CA0>);(<U2CA3>,<U2CA2>);(<U2CA5>,<U2CA4>);/ + (<U2CA7>,<U2CA6>);(<U2CA9>,<U2CA8>);(<U2CAB>,<U2CAA>);(<U2CAD>,<U2CAC>);/ + (<U2CAF>,<U2CAE>);(<U2CB1>,<U2CB0>);(<U2CB3>,<U2CB2>);(<U2CB5>,<U2CB4>);/ + (<U2CB7>,<U2CB6>);(<U2CB9>,<U2CB8>);(<U2CBB>,<U2CBA>);(<U2CBD>,<U2CBC>);/ + (<U2CBF>,<U2CBE>);(<U2CC1>,<U2CC0>);(<U2CC3>,<U2CC2>);(<U2CC5>,<U2CC4>);/ + (<U2CC7>,<U2CC6>);(<U2CC9>,<U2CC8>);(<U2CCB>,<U2CCA>);(<U2CCD>,<U2CCC>);/ + (<U2CCF>,<U2CCE>);(<U2CD1>,<U2CD0>);(<U2CD3>,<U2CD2>);(<U2CD5>,<U2CD4>);/ + (<U2CD7>,<U2CD6>);(<U2CD9>,<U2CD8>);(<U2CDB>,<U2CDA>);(<U2CDD>,<U2CDC>);/ + (<U2CDF>,<U2CDE>);(<U2CE1>,<U2CE0>);(<U2CE3>,<U2CE2>);(<U2CEC>,<U2CEB>);/ + (<U2CEE>,<U2CED>);(<U2CF3>,<U2CF2>);(<U2D00>,<U10A0>);(<U2D01>,<U10A1>);/ + (<U2D02>,<U10A2>);(<U2D03>,<U10A3>);(<U2D04>,<U10A4>);(<U2D05>,<U10A5>);/ + (<U2D06>,<U10A6>);(<U2D07>,<U10A7>);(<U2D08>,<U10A8>);(<U2D09>,<U10A9>);/ + (<U2D0A>,<U10AA>);(<U2D0B>,<U10AB>);(<U2D0C>,<U10AC>);(<U2D0D>,<U10AD>);/ + (<U2D0E>,<U10AE>);(<U2D0F>,<U10AF>);(<U2D10>,<U10B0>);(<U2D11>,<U10B1>);/ + (<U2D12>,<U10B2>);(<U2D13>,<U10B3>);(<U2D14>,<U10B4>);(<U2D15>,<U10B5>);/ + (<U2D16>,<U10B6>);(<U2D17>,<U10B7>);(<U2D18>,<U10B8>);(<U2D19>,<U10B9>);/ + (<U2D1A>,<U10BA>);(<U2D1B>,<U10BB>);(<U2D1C>,<U10BC>);(<U2D1D>,<U10BD>);/ + (<U2D1E>,<U10BE>);(<U2D1F>,<U10BF>);(<U2D20>,<U10C0>);(<U2D21>,<U10C1>);/ + (<U2D22>,<U10C2>);(<U2D23>,<U10C3>);(<U2D24>,<U10C4>);(<U2D25>,<U10C5>);/ + (<U2D27>,<U10C7>);(<U2D2D>,<U10CD>);(<UA641>,<UA640>);(<UA643>,<UA642>);/ + (<UA645>,<UA644>);(<UA647>,<UA646>);(<UA649>,<UA648>);(<UA64B>,<UA64A>);/ + (<UA64D>,<UA64C>);(<UA64F>,<UA64E>);(<UA651>,<UA650>);(<UA653>,<UA652>);/ + (<UA655>,<UA654>);(<UA657>,<UA656>);(<UA659>,<UA658>);(<UA65B>,<UA65A>);/ + (<UA65D>,<UA65C>);(<UA65F>,<UA65E>);(<UA661>,<UA660>);(<UA663>,<UA662>);/ + (<UA665>,<UA664>);(<UA667>,<UA666>);(<UA669>,<UA668>);(<UA66B>,<UA66A>);/ + (<UA66D>,<UA66C>);(<UA681>,<UA680>);(<UA683>,<UA682>);(<UA685>,<UA684>);/ + (<UA687>,<UA686>);(<UA689>,<UA688>);(<UA68B>,<UA68A>);(<UA68D>,<UA68C>);/ + (<UA68F>,<UA68E>);(<UA691>,<UA690>);(<UA693>,<UA692>);(<UA695>,<UA694>);/ + (<UA697>,<UA696>);(<UA699>,<UA698>);(<UA69B>,<UA69A>);(<UA723>,<UA722>);/ + (<UA725>,<UA724>);(<UA727>,<UA726>);(<UA729>,<UA728>);(<UA72B>,<UA72A>);/ + (<UA72D>,<UA72C>);(<UA72F>,<UA72E>);(<UA733>,<UA732>);(<UA735>,<UA734>);/ + (<UA737>,<UA736>);(<UA739>,<UA738>);(<UA73B>,<UA73A>);(<UA73D>,<UA73C>);/ + (<UA73F>,<UA73E>);(<UA741>,<UA740>);(<UA743>,<UA742>);(<UA745>,<UA744>);/ + (<UA747>,<UA746>);(<UA749>,<UA748>);(<UA74B>,<UA74A>);(<UA74D>,<UA74C>);/ + (<UA74F>,<UA74E>);(<UA751>,<UA750>);(<UA753>,<UA752>);(<UA755>,<UA754>);/ + (<UA757>,<UA756>);(<UA759>,<UA758>);(<UA75B>,<UA75A>);(<UA75D>,<UA75C>);/ + (<UA75F>,<UA75E>);(<UA761>,<UA760>);(<UA763>,<UA762>);(<UA765>,<UA764>);/ + (<UA767>,<UA766>);(<UA769>,<UA768>);(<UA76B>,<UA76A>);(<UA76D>,<UA76C>);/ + (<UA76F>,<UA76E>);(<UA77A>,<UA779>);(<UA77C>,<UA77B>);(<UA77F>,<UA77E>);/ + (<UA781>,<UA780>);(<UA783>,<UA782>);(<UA785>,<UA784>);(<UA787>,<UA786>);/ + (<UA78C>,<UA78B>);(<UA791>,<UA790>);(<UA793>,<UA792>);(<UA794>,<UA7C4>);/ + (<UA797>,<UA796>);(<UA799>,<UA798>);(<UA79B>,<UA79A>);(<UA79D>,<UA79C>);/ + (<UA79F>,<UA79E>);(<UA7A1>,<UA7A0>);(<UA7A3>,<UA7A2>);(<UA7A5>,<UA7A4>);/ + (<UA7A7>,<UA7A6>);(<UA7A9>,<UA7A8>);(<UA7B5>,<UA7B4>);(<UA7B7>,<UA7B6>);/ + (<UA7B9>,<UA7B8>);(<UA7BB>,<UA7BA>);(<UA7BD>,<UA7BC>);(<UA7BF>,<UA7BE>);/ + (<UA7C1>,<UA7C0>);(<UA7C3>,<UA7C2>);(<UA7C8>,<UA7C7>);(<UA7CA>,<UA7C9>);/ + (<UA7CD>,<UA7CC>);(<UA7D1>,<UA7D0>);(<UA7D7>,<UA7D6>);(<UA7D9>,<UA7D8>);/ + (<UA7DB>,<UA7DA>);(<UA7F6>,<UA7F5>);(<UAB53>,<UA7B3>);(<UAB70>,<U13A0>);/ + (<UAB71>,<U13A1>);(<UAB72>,<U13A2>);(<UAB73>,<U13A3>);(<UAB74>,<U13A4>);/ + (<UAB75>,<U13A5>);(<UAB76>,<U13A6>);(<UAB77>,<U13A7>);(<UAB78>,<U13A8>);/ + (<UAB79>,<U13A9>);(<UAB7A>,<U13AA>);(<UAB7B>,<U13AB>);(<UAB7C>,<U13AC>);/ + (<UAB7D>,<U13AD>);(<UAB7E>,<U13AE>);(<UAB7F>,<U13AF>);(<UAB80>,<U13B0>);/ + (<UAB81>,<U13B1>);(<UAB82>,<U13B2>);(<UAB83>,<U13B3>);(<UAB84>,<U13B4>);/ + (<UAB85>,<U13B5>);(<UAB86>,<U13B6>);(<UAB87>,<U13B7>);(<UAB88>,<U13B8>);/ + (<UAB89>,<U13B9>);(<UAB8A>,<U13BA>);(<UAB8B>,<U13BB>);(<UAB8C>,<U13BC>);/ + (<UAB8D>,<U13BD>);(<UAB8E>,<U13BE>);(<UAB8F>,<U13BF>);(<UAB90>,<U13C0>);/ + (<UAB91>,<U13C1>);(<UAB92>,<U13C2>);(<UAB93>,<U13C3>);(<UAB94>,<U13C4>);/ + (<UAB95>,<U13C5>);(<UAB96>,<U13C6>);(<UAB97>,<U13C7>);(<UAB98>,<U13C8>);/ + (<UAB99>,<U13C9>);(<UAB9A>,<U13CA>);(<UAB9B>,<U13CB>);(<UAB9C>,<U13CC>);/ + (<UAB9D>,<U13CD>);(<UAB9E>,<U13CE>);(<UAB9F>,<U13CF>);(<UABA0>,<U13D0>);/ + (<UABA1>,<U13D1>);(<UABA2>,<U13D2>);(<UABA3>,<U13D3>);(<UABA4>,<U13D4>);/ + (<UABA5>,<U13D5>);(<UABA6>,<U13D6>);(<UABA7>,<U13D7>);(<UABA8>,<U13D8>);/ + (<UABA9>,<U13D9>);(<UABAA>,<U13DA>);(<UABAB>,<U13DB>);(<UABAC>,<U13DC>);/ + (<UABAD>,<U13DD>);(<UABAE>,<U13DE>);(<UABAF>,<U13DF>);(<UABB0>,<U13E0>);/ + (<UABB1>,<U13E1>);(<UABB2>,<U13E2>);(<UABB3>,<U13E3>);(<UABB4>,<U13E4>);/ + (<UABB5>,<U13E5>);(<UABB6>,<U13E6>);(<UABB7>,<U13E7>);(<UABB8>,<U13E8>);/ + (<UABB9>,<U13E9>);(<UABBA>,<U13EA>);(<UABBB>,<U13EB>);(<UABBC>,<U13EC>);/ + (<UABBD>,<U13ED>);(<UABBE>,<U13EE>);(<UABBF>,<U13EF>);(<UFF41>,<UFF21>);/ + (<UFF42>,<UFF22>);(<UFF43>,<UFF23>);(<UFF44>,<UFF24>);(<UFF45>,<UFF25>);/ + (<UFF46>,<UFF26>);(<UFF47>,<UFF27>);(<UFF48>,<UFF28>);(<UFF49>,<UFF29>);/ + (<UFF4A>,<UFF2A>);(<UFF4B>,<UFF2B>);(<UFF4C>,<UFF2C>);(<UFF4D>,<UFF2D>);/ + (<UFF4E>,<UFF2E>);(<UFF4F>,<UFF2F>);(<UFF50>,<UFF30>);(<UFF51>,<UFF31>);/ + (<UFF52>,<UFF32>);(<UFF53>,<UFF33>);(<UFF54>,<UFF34>);(<UFF55>,<UFF35>);/ + (<UFF56>,<UFF36>);(<UFF57>,<UFF37>);(<UFF58>,<UFF38>);(<UFF59>,<UFF39>);/ + (<UFF5A>,<UFF3A>);(<U00010428>,<U00010400>);(<U00010429>,<U00010401>);/ (<U0001042A>,<U00010402>);(<U0001042B>,<U00010403>);/ (<U0001042C>,<U00010404>);(<U0001042D>,<U00010405>);/ (<U0001042E>,<U00010406>);(<U0001042F>,<U00010407>);/ @@ -2496,6 +2565,17 @@ map "totitle"; / (<U00010CED>,<U00010CAD>);(<U00010CEE>,<U00010CAE>);/ (<U00010CEF>,<U00010CAF>);(<U00010CF0>,<U00010CB0>);/ (<U00010CF1>,<U00010CB1>);(<U00010CF2>,<U00010CB2>);/ + (<U00010D70>,<U00010D50>);(<U00010D71>,<U00010D51>);/ + (<U00010D72>,<U00010D52>);(<U00010D73>,<U00010D53>);/ + (<U00010D74>,<U00010D54>);(<U00010D75>,<U00010D55>);/ + (<U00010D76>,<U00010D56>);(<U00010D77>,<U00010D57>);/ + (<U00010D78>,<U00010D58>);(<U00010D79>,<U00010D59>);/ + (<U00010D7A>,<U00010D5A>);(<U00010D7B>,<U00010D5B>);/ + (<U00010D7C>,<U00010D5C>);(<U00010D7D>,<U00010D5D>);/ + (<U00010D7E>,<U00010D5E>);(<U00010D7F>,<U00010D5F>);/ + (<U00010D80>,<U00010D60>);(<U00010D81>,<U00010D61>);/ + (<U00010D82>,<U00010D62>);(<U00010D83>,<U00010D63>);/ + (<U00010D84>,<U00010D64>);(<U00010D85>,<U00010D65>);/ (<U000118C0>,<U000118A0>);(<U000118C1>,<U000118A1>);/ (<U000118C2>,<U000118A2>);(<U000118C3>,<U000118A3>);/ (<U000118C4>,<U000118A4>);(<U000118C5>,<U000118A5>);/ @@ -2555,7 +2635,7 @@ class "combining"; / <U06E7>..<U06E8>;<U06EA>..<U06ED>;<U0711>;<U0730>..<U074A>;/ <U07A6>..<U07B0>;<U07EB>..<U07F3>;<U07FD>;<U0816>..<U0819>;/ <U081B>..<U0823>;<U0825>..<U0827>;<U0829>..<U082D>;<U0859>..<U085B>;/ - <U0898>..<U089F>;<U08CA>..<U08E1>;<U08E3>..<U0903>;<U093A>..<U093C>;/ + <U0897>..<U089F>;<U08CA>..<U08E1>;<U08E3>..<U0903>;<U093A>..<U093C>;/ <U093E>..<U094F>;<U0951>..<U0957>;<U0962>..<U0963>;<U0981>..<U0983>;/ <U09BC>;<U09BE>..<U09C4>;<U09C7>..<U09C8>;<U09CB>..<U09CD>;<U09D7>;/ <U09E2>..<U09E3>;<U09FE>;<U0A01>..<U0A03>;<U0A3C>;<U0A3E>..<U0A42>;/ @@ -2597,21 +2677,24 @@ class "combining"; / <U00010376>..<U0001037A>;<U00010A01>..<U00010A03>;/ <U00010A05>..<U00010A06>;<U00010A0C>..<U00010A0F>;/ <U00010A38>..<U00010A3A>;<U00010A3F>;<U00010AE5>..<U00010AE6>;/ - <U00010D24>..<U00010D27>;<U00010EAB>..<U00010EAC>;/ - <U00010EFD>..<U00010EFF>;<U00010F46>..<U00010F50>;/ - <U00010F82>..<U00010F85>;<U00011000>..<U00011002>;/ - <U00011038>..<U00011046>;<U00011070>;<U00011073>..<U00011074>;/ - <U0001107F>..<U00011082>;<U000110B0>..<U000110BA>;<U000110C2>;/ - <U00011100>..<U00011102>;<U00011127>..<U00011134>;/ - <U00011145>..<U00011146>;<U00011173>;<U00011180>..<U00011182>;/ - <U000111B3>..<U000111C0>;<U000111C9>..<U000111CC>;/ - <U000111CE>..<U000111CF>;<U0001122C>..<U00011237>;<U0001123E>;/ - <U00011241>;<U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ + <U00010D24>..<U00010D27>;<U00010D69>..<U00010D6D>;/ + <U00010EAB>..<U00010EAC>;<U00010EFC>..<U00010EFF>;/ + <U00010F46>..<U00010F50>;<U00010F82>..<U00010F85>;/ + <U00011000>..<U00011002>;<U00011038>..<U00011046>;<U00011070>;/ + <U00011073>..<U00011074>;<U0001107F>..<U00011082>;/ + <U000110B0>..<U000110BA>;<U000110C2>;<U00011100>..<U00011102>;/ + <U00011127>..<U00011134>;<U00011145>..<U00011146>;<U00011173>;/ + <U00011180>..<U00011182>;<U000111B3>..<U000111C0>;/ + <U000111C9>..<U000111CC>;<U000111CE>..<U000111CF>;/ + <U0001122C>..<U00011237>;<U0001123E>;<U00011241>;/ + <U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ <U0001133B>..<U0001133C>;<U0001133E>..<U00011344>;/ <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011357>;/ <U00011362>..<U00011363>;<U00011366>..<U0001136C>;/ - <U00011370>..<U00011374>;<U00011435>..<U00011446>;<U0001145E>;/ - <U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ + <U00011370>..<U00011374>;<U000113B8>..<U000113C0>;<U000113C2>;/ + <U000113C5>;<U000113C7>..<U000113CA>;<U000113CC>..<U000113D0>;/ + <U000113D2>;<U000113E1>..<U000113E2>;<U00011435>..<U00011446>;/ + <U0001145E>;<U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ <U000115B8>..<U000115C0>;<U000115DC>..<U000115DD>;/ <U00011630>..<U00011640>;<U000116AB>..<U000116B7>;/ <U0001171D>..<U0001172B>;<U0001182C>..<U0001183A>;/ @@ -2627,7 +2710,8 @@ class "combining"; / <U00011D8A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ <U00011D93>..<U00011D97>;<U00011EF3>..<U00011EF6>;/ <U00011F00>..<U00011F01>;<U00011F03>;<U00011F34>..<U00011F3A>;/ - <U00011F3E>..<U00011F42>;<U00013440>;<U00013447>..<U00013455>;/ + <U00011F3E>..<U00011F42>;<U00011F5A>;<U00013440>;/ + <U00013447>..<U00013455>;<U0001611E>..<U0001612F>;/ <U00016AF0>..<U00016AF4>;<U00016B30>..<U00016B36>;<U00016F4F>;/ <U00016F51>..<U00016F87>;<U00016F8F>..<U00016F92>;<U00016FE4>;/ <U00016FF0>..<U00016FF1>;<U0001BC9D>..<U0001BC9E>;/ @@ -2641,8 +2725,8 @@ class "combining"; / <U0001E01B>..<U0001E021>;<U0001E023>..<U0001E024>;/ <U0001E026>..<U0001E02A>;<U0001E08F>;<U0001E130>..<U0001E136>;/ <U0001E2AE>;<U0001E2EC>..<U0001E2EF>;<U0001E4EC>..<U0001E4EF>;/ - <U0001E8D0>..<U0001E8D6>;<U0001E944>..<U0001E94A>;/ - <U000E0100>..<U000E01EF> + <U0001E5EE>..<U0001E5EF>;<U0001E8D0>..<U0001E8D6>;/ + <U0001E944>..<U0001E94A>;<U000E0100>..<U000E01EF> % The "combining_level3" class reflects ISO/IEC 10646-1 annex B.2 % That is, combining characters of level 3. @@ -2684,7 +2768,7 @@ class "combining_level3"; / <UAA4C>..<UAA4D>;<UAA7B>..<UAA7D>;<UAAEB>..<UAAEF>;<UAAF5>..<UAAF6>;/ <UABE3>..<UABEA>;<UABEC>..<UABED>;<UFB1E>;<UFE00>..<UFE0F>;/ <U00010A01>..<U00010A03>;<U00010A05>..<U00010A06>;<U00010A0C>;/ - <U00010A0E>;<U00010A39>;<U00010A3F>;<U00011000>..<U00011002>;/ + <U00010A0E>;<U00010A39>;<U00010A3F>;<U00010EFC>;<U00011000>..<U00011002>;/ <U00011038>..<U00011046>;<U00011070>;<U00011073>..<U00011074>;/ <U0001107F>..<U00011082>;<U000110B0>..<U000110BA>;<U000110C2>;/ <U00011127>..<U00011134>;<U00011145>..<U00011146>;<U00011173>;/ @@ -2694,7 +2778,9 @@ class "combining_level3"; / <U000112DF>..<U000112EA>;<U00011300>..<U00011303>;/ <U0001133B>..<U0001133C>;<U0001133E>..<U00011344>;/ <U00011347>..<U00011348>;<U0001134B>..<U0001134D>;<U00011357>;/ - <U00011362>..<U00011363>;<U00011435>..<U00011446>;/ + <U00011362>..<U00011363>;<U000113B8>..<U000113C0>;<U000113C2>;/ + <U000113C5>;<U000113C7>..<U000113CA>;<U000113CC>..<U000113D0>;/ + <U000113D2>;<U000113E1>..<U000113E2>;<U00011435>..<U00011446>;/ <U000114B0>..<U000114C3>;<U000115AF>..<U000115B5>;/ <U000115B8>..<U000115C0>;<U000115DC>..<U000115DD>;/ <U00011630>..<U00011640>;<U000116AB>..<U000116B7>;/ @@ -2711,7 +2797,8 @@ class "combining_level3"; / <U00011D8A>..<U00011D8E>;<U00011D90>..<U00011D91>;/ <U00011D93>..<U00011D97>;<U00011EF3>..<U00011EF6>;/ <U00011F00>..<U00011F01>;<U00011F03>;<U00011F34>..<U00011F3A>;/ - <U00011F3E>..<U00011F42>;<U00013440>;<U00013447>..<U00013455>;/ + <U00011F3E>..<U00011F42>;<U00011F5A>;<U00013440>;/ + <U00013447>..<U00013455>;<U0001611E>..<U0001612F>;/ <U00016AF0>..<U00016AF4>;<U00016F4F>;<U00016F51>..<U00016F87>;/ <U00016F8F>..<U00016F92>;<U00016FE4>;<U00016FF0>..<U00016FF1>;/ <U0001BC9D>..<U0001BC9E>;<U0001CF00>..<U0001CF2D>;/ diff --git a/localedata/locales/translit_circle b/localedata/locales/translit_circle index 20fd57168f..308cf627fe 100644 --- a/localedata/locales/translit_circle +++ b/localedata/locales/translit_circle @@ -9,7 +9,7 @@ comment_char % % otherwise be governed by that license. % Transliterations of encircled characters. -% Generated automatically from UnicodeData.txt by gen_translit_circle.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_circle.py on 2024-09-12 for Unicode 16.0.0. LC_CTYPE diff --git a/localedata/locales/translit_cjk_compat b/localedata/locales/translit_cjk_compat index 7951e0cd64..de1d39d2ff 100644 --- a/localedata/locales/translit_cjk_compat +++ b/localedata/locales/translit_cjk_compat @@ -9,7 +9,7 @@ comment_char % % otherwise be governed by that license. % Transliterations of CJK compatibility characters. -% Generated automatically from UnicodeData.txt by gen_translit_cjk_compat.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_cjk_compat.py on 2024-09-12 for Unicode 16.0.0. LC_CTYPE diff --git a/localedata/locales/translit_combining b/localedata/locales/translit_combining index ce2f19eee1..c0de4bfd74 100644 --- a/localedata/locales/translit_combining +++ b/localedata/locales/translit_combining @@ -10,7 +10,7 @@ comment_char % % Transliterations that remove all combining characters (accents, % pronounciation marks, etc.). -% Generated automatically from UnicodeData.txt by gen_translit_combining.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_combining.py on 2024-09-12 for Unicode 16.0.0. LC_CTYPE @@ -446,6 +446,8 @@ translit_start <U06EC> "" % ARABIC SMALL LOW MEEM <U06ED> "" +% ARABIC PEPET +<U0897> "" % ARABIC SMALL HIGH WORD AL-JUZ <U0898> "" % ARABIC SMALL LOW WORD ISHMAAM @@ -878,10 +880,22 @@ translit_start <U00010D26> "" % HANIFI ROHINGYA SIGN TASSI <U00010D27> "" +% GARAY VOWEL SIGN E +<U00010D69> "" +% GARAY CONSONANT GEMINATION MARK +<U00010D6A> "" +% GARAY COMBINING DOT ABOVE +<U00010D6B> "" +% GARAY COMBINING DOUBLE DOT ABOVE +<U00010D6C> "" +% GARAY CONSONANT NASALIZATION MARK +<U00010D6D> "" % YEZIDI COMBINING HAMZA MARK <U00010EAB> "" % YEZIDI COMBINING MADDA MARK <U00010EAC> "" +% ARABIC COMBINING ALEF OVERLAY +<U00010EFC> "" % ARABIC SMALL LOW WORD SAKTA <U00010EFD> "" % ARABIC SMALL LOW WORD QASR @@ -920,6 +934,48 @@ translit_start <U00010F85> "" % COMBINING BINDU BELOW <U0001133B> "" +% TULU-TIGALARI VOWEL SIGN AA +<U000113B8> "" +% TULU-TIGALARI VOWEL SIGN I +<U000113B9> "" +% TULU-TIGALARI VOWEL SIGN II +<U000113BA> "" +% TULU-TIGALARI VOWEL SIGN U +<U000113BB> "" +% TULU-TIGALARI VOWEL SIGN UU +<U000113BC> "" +% TULU-TIGALARI VOWEL SIGN VOCALIC R +<U000113BD> "" +% TULU-TIGALARI VOWEL SIGN VOCALIC RR +<U000113BE> "" +% TULU-TIGALARI VOWEL SIGN VOCALIC L +<U000113BF> "" +% TULU-TIGALARI VOWEL SIGN VOCALIC LL +<U000113C0> "" +% TULU-TIGALARI VOWEL SIGN EE +<U000113C2> "" +% TULU-TIGALARI VOWEL SIGN AI +<U000113C5> "" +% TULU-TIGALARI VOWEL SIGN OO +<U000113C7> "" +% TULU-TIGALARI VOWEL SIGN AU +<U000113C8> "" +% TULU-TIGALARI AU LENGTH MARK +<U000113C9> "" +% TULU-TIGALARI SIGN CANDRA ANUNASIKA +<U000113CA> "" +% TULU-TIGALARI SIGN ANUSVARA +<U000113CC> "" +% TULU-TIGALARI SIGN VISARGA +<U000113CD> "" +% TULU-TIGALARI SIGN VIRAMA +<U000113CE> "" +% TULU-TIGALARI SIGN LOOPED VIRAMA +<U000113CF> "" +% TULU-TIGALARI CONJOINER +<U000113D0> "" +% TULU-TIGALARI GEMINATION MARK +<U000113D2> "" % NEWA VOWEL SIGN AA <U00011435> "" % NEWA VOWEL SIGN I @@ -1346,6 +1402,8 @@ translit_start <U00011F41> "" % KAWI CONJOINER <U00011F42> "" +% KAWI SIGN NUKTA +<U00011F5A> "" % EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY <U00013440> "" % EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START @@ -1378,6 +1436,42 @@ translit_start <U00013454> "" % EGYPTIAN HIEROGLYPH MODIFIER DAMAGED <U00013455> "" +% GURUNG KHEMA VOWEL SIGN AA +<U0001611E> "" +% GURUNG KHEMA VOWEL SIGN I +<U0001611F> "" +% GURUNG KHEMA VOWEL SIGN II +<U00016120> "" +% GURUNG KHEMA VOWEL SIGN U +<U00016121> "" +% GURUNG KHEMA VOWEL SIGN UU +<U00016122> "" +% GURUNG KHEMA VOWEL SIGN E +<U00016123> "" +% GURUNG KHEMA VOWEL SIGN EE +<U00016124> "" +% GURUNG KHEMA VOWEL SIGN AI +<U00016125> "" +% GURUNG KHEMA VOWEL SIGN O +<U00016126> "" +% GURUNG KHEMA VOWEL SIGN OO +<U00016127> "" +% GURUNG KHEMA VOWEL SIGN AU +<U00016128> "" +% GURUNG KHEMA VOWEL LENGTH MARK +<U00016129> "" +% GURUNG KHEMA CONSONANT SIGN MEDIAL YA +<U0001612A> "" +% GURUNG KHEMA CONSONANT SIGN MEDIAL VA +<U0001612B> "" +% GURUNG KHEMA CONSONANT SIGN MEDIAL HA +<U0001612C> "" +% GURUNG KHEMA SIGN ANUSVARA +<U0001612D> "" +% GURUNG KHEMA CONSONANT SIGN MEDIAL RA +<U0001612E> "" +% GURUNG KHEMA SIGN THOLHOMA +<U0001612F> "" % KHITAN SMALL SCRIPT FILLER <U00016FE4> "" % VIETNAMESE ALTERNATE READING MARK CA @@ -1636,6 +1730,10 @@ translit_start <U0001E4EE> "" % NAG MUNDARI SIGN SUTUH <U0001E4EF> "" +% OL ONAL SIGN MU +<U0001E5EE> "" +% OL ONAL SIGN IKIR +<U0001E5EF> "" % ADLAM ALIF LENGTHENER <U0001E944> "" % ADLAM VOWEL LENGTHENER @@ -3705,6 +3803,24 @@ translit_start <UFB4D> <U05DB> % HEBREW LETTER PE WITH RAFE <UFB4E> <U05E4> +% TODHRI LETTER EI +<U000105C9> <U000105D2> +% TODHRI LETTER U +<U000105E4> <U000105DA> +% TULU-TIGALARI LETTER II +<U00011383> <U00011382> +% TULU-TIGALARI LETTER UU +<U00011385> <U00011384> +% TULU-TIGALARI LETTER AI +<U0001138E> <U0001138B> +% TULU-TIGALARI LETTER AU +<U00011391> <U00011390> +% KIRAT RAI VOWEL SIGN AI +<U00016D68> "<U00016D67><U00016D67>" +% KIRAT RAI VOWEL SIGN O +<U00016D69> "<U00016D63><U00016D67>" +% KIRAT RAI VOWEL SIGN AU +<U00016D6A> "<U00016D63><U00016D67><U00016D67>" translit_end diff --git a/localedata/locales/translit_compat b/localedata/locales/translit_compat index 7a214b2723..dd36388010 100644 --- a/localedata/locales/translit_compat +++ b/localedata/locales/translit_compat @@ -9,7 +9,7 @@ comment_char % % otherwise be governed by that license. % Transliterations of compatibility characters and ligatures. -% Generated automatically from UnicodeData.txt by gen_translit_compat.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_compat.py on 2024-09-12 for Unicode 16.0.0. LC_CTYPE diff --git a/localedata/locales/translit_font b/localedata/locales/translit_font index a977ae1f29..dc45eb7795 100644 --- a/localedata/locales/translit_font +++ b/localedata/locales/translit_font @@ -9,7 +9,7 @@ comment_char % % otherwise be governed by that license. % Transliterations of font equivalents. -% Generated automatically from UnicodeData.txt by gen_translit_font.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_font.py on 2024-09-12 for Unicode 16.0.0. LC_CTYPE @@ -62,6 +62,42 @@ translit_start <UFB27> <U05E8> % HEBREW LETTER WIDE RESH <UFB28> <U05EA> % HEBREW LETTER WIDE TAV <UFB29> <U002B> % HEBREW LETTER ALTERNATIVE PLUS SIGN +<U0001CCD6> <U0041> % OUTLINED LATIN CAPITAL LETTER A +<U0001CCD7> <U0042> % OUTLINED LATIN CAPITAL LETTER B +<U0001CCD8> <U0043> % OUTLINED LATIN CAPITAL LETTER C +<U0001CCD9> <U0044> % OUTLINED LATIN CAPITAL LETTER D +<U0001CCDA> <U0045> % OUTLINED LATIN CAPITAL LETTER E +<U0001CCDB> <U0046> % OUTLINED LATIN CAPITAL LETTER F +<U0001CCDC> <U0047> % OUTLINED LATIN CAPITAL LETTER G +<U0001CCDD> <U0048> % OUTLINED LATIN CAPITAL LETTER H +<U0001CCDE> <U0049> % OUTLINED LATIN CAPITAL LETTER I +<U0001CCDF> <U004A> % OUTLINED LATIN CAPITAL LETTER J +<U0001CCE0> <U004B> % OUTLINED LATIN CAPITAL LETTER K +<U0001CCE1> <U004C> % OUTLINED LATIN CAPITAL LETTER L +<U0001CCE2> <U004D> % OUTLINED LATIN CAPITAL LETTER M +<U0001CCE3> <U004E> % OUTLINED LATIN CAPITAL LETTER N +<U0001CCE4> <U004F> % OUTLINED LATIN CAPITAL LETTER O +<U0001CCE5> <U0050> % OUTLINED LATIN CAPITAL LETTER P +<U0001CCE6> <U0051> % OUTLINED LATIN CAPITAL LETTER Q +<U0001CCE7> <U0052> % OUTLINED LATIN CAPITAL LETTER R +<U0001CCE8> <U0053> % OUTLINED LATIN CAPITAL LETTER S +<U0001CCE9> <U0054> % OUTLINED LATIN CAPITAL LETTER T +<U0001CCEA> <U0055> % OUTLINED LATIN CAPITAL LETTER U +<U0001CCEB> <U0056> % OUTLINED LATIN CAPITAL LETTER V +<U0001CCEC> <U0057> % OUTLINED LATIN CAPITAL LETTER W +<U0001CCED> <U0058> % OUTLINED LATIN CAPITAL LETTER X +<U0001CCEE> <U0059> % OUTLINED LATIN CAPITAL LETTER Y +<U0001CCEF> <U005A> % OUTLINED LATIN CAPITAL LETTER Z +<U0001CCF0> <U0030> % OUTLINED DIGIT ZERO +<U0001CCF1> <U0031> % OUTLINED DIGIT ONE +<U0001CCF2> <U0032> % OUTLINED DIGIT TWO +<U0001CCF3> <U0033> % OUTLINED DIGIT THREE +<U0001CCF4> <U0034> % OUTLINED DIGIT FOUR +<U0001CCF5> <U0035> % OUTLINED DIGIT FIVE +<U0001CCF6> <U0036> % OUTLINED DIGIT SIX +<U0001CCF7> <U0037> % OUTLINED DIGIT SEVEN +<U0001CCF8> <U0038> % OUTLINED DIGIT EIGHT +<U0001CCF9> <U0039> % OUTLINED DIGIT NINE <U0001D400> <U0041> % MATHEMATICAL BOLD CAPITAL A <U0001D401> <U0042> % MATHEMATICAL BOLD CAPITAL B <U0001D402> <U0043> % MATHEMATICAL BOLD CAPITAL C diff --git a/localedata/locales/translit_fraction b/localedata/locales/translit_fraction index 115273ce05..06651c198b 100644 --- a/localedata/locales/translit_fraction +++ b/localedata/locales/translit_fraction @@ -9,7 +9,7 @@ comment_char % % otherwise be governed by that license. % Transliterations of fractions. -% Generated automatically from UnicodeData.txt by gen_translit_fraction.py on 2023-09-15 for Unicode 15.1.0. +% Generated automatically from UnicodeData.txt by gen_translit_fraction.py on 2024-09-12 for Unicode 16.0.0. % The replacements have been surrounded with spaces, because fractions are % often preceded by a decimal number and followed by a unit or a math symbol. diff --git a/localedata/unicode-gen/DerivedCoreProperties.txt b/localedata/unicode-gen/DerivedCoreProperties.txt index 220c55685d..1075638f1a 100644 --- a/localedata/unicode-gen/DerivedCoreProperties.txt +++ b/localedata/unicode-gen/DerivedCoreProperties.txt @@ -1,8 +1,8 @@ -# DerivedCoreProperties-15.1.0.txt -# Date: 2023-08-07, 15:21:24 GMT -# © 2023 Unicode®, Inc. +# DerivedCoreProperties-16.0.0.txt +# Date: 2024-05-31, 18:09:32 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see https://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see https://www.unicode.org/reports/tr44/ @@ -177,6 +177,7 @@ FF5C ; Math # Sm FULLWIDTH VERTICAL LINE FF5E ; Math # Sm FULLWIDTH TILDE FFE2 ; Math # Sm FULLWIDTH NOT SIGN FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +10D8E..10D8F ; Math # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN 1D400..1D454 ; Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -253,7 +254,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1EEAB..1EEBB ; Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1EEF0..1EEF1 ; Math # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL -# Total code points: 2310 +# Total code points: 2312 # ================================================ @@ -280,6 +281,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 02EC ; Alphabetic # Lm MODIFIER LETTER VOICING 02EE ; Alphabetic # Lm MODIFIER LETTER DOUBLE APOSTROPHE 0345 ; Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI +0363..036F ; Alphabetic # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X 0370..0373 ; Alphabetic # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI 0374 ; Alphabetic # Lm GREEK NUMERAL SIGN 0376..0377 ; Alphabetic # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA @@ -343,6 +345,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0897 ; Alphabetic # Mn ARABIC PEPET 08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH 08D4..08DF ; Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA @@ -710,7 +713,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1C4D..1C4F ; Alphabetic # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA 1C5A..1C77 ; Alphabetic # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; Alphabetic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C80..1C88 ; Alphabetic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; Alphabetic # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; Alphabetic # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Alphabetic # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CE9..1CEC ; Alphabetic # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL @@ -723,7 +726,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1D78 ; Alphabetic # Lm MODIFIER LETTER CYRILLIC EN 1D79..1D9A ; Alphabetic # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF ; Alphabetic # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DE7..1DF4 ; Alphabetic # Mn [14] COMBINING LATIN SMALL LETTER ALPHA..COMBINING LATIN SMALL LETTER U WITH DIAERESIS +1DD3..1DF4 ; Alphabetic # Mn [34] COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE..COMBINING LATIN SMALL LETTER U WITH DIAERESIS 1E00..1F15 ; Alphabetic # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D ; Alphabetic # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F20..1F45 ; Alphabetic # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA @@ -830,10 +833,10 @@ A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; Alphabetic # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; Alphabetic # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; Alphabetic # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; Alphabetic # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -998,6 +1001,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 105A3..105B1 ; Alphabetic # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; Alphabetic # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; Alphabetic # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; Alphabetic # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; Alphabetic # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; Alphabetic # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; Alphabetic # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -1038,9 +1042,18 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 10CC0..10CF2 ; Alphabetic # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 10D00..10D23 ; Alphabetic # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA 10D24..10D27 ; Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D4A..10D4D ; Alphabetic # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; Alphabetic # Lm GARAY VOWEL LENGTH MARK +10D4F ; Alphabetic # Lo GARAY SUKUN +10D50..10D65 ; Alphabetic # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69 ; Alphabetic # Mn GARAY VOWEL SIGN E +10D6F ; Alphabetic # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; Alphabetic # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 10E80..10EA9 ; Alphabetic # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; Alphabetic # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EFC ; Alphabetic # Mn ARABIC COMBINING ALEF OVERLAY 10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -1121,6 +1134,19 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11357 ; Alphabetic # Mc GRANTHA AU LENGTH MARK 1135D..11361 ; Alphabetic # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL 11362..11363 ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11380..11389 ; Alphabetic # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; Alphabetic # Lo TULU-TIGALARI LETTER EE +1138E ; Alphabetic # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; Alphabetic # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; Alphabetic # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; Alphabetic # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; Alphabetic # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; Alphabetic # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; Alphabetic # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; Alphabetic # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; Alphabetic # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113D1 ; Alphabetic # Lo TULU-TIGALARI REPHA +113D3 ; Alphabetic # Lo TULU-TIGALARI SIGN PLUTA 11400..11434 ; Alphabetic # Lo [53] NEWA LETTER A..NEWA LETTER HA 11435..11437 ; Alphabetic # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II 11438..1143F ; Alphabetic # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI @@ -1163,7 +1189,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 116B0..116B5 ; Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU 116B8 ; Alphabetic # Lo TAKRI LETTER ARCHAIC KHA 11700..1171A ; Alphabetic # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA -1171D..1171F ; Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; Alphabetic # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; Alphabetic # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; Alphabetic # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11720..11721 ; Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11722..11725 ; Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11726 ; Alphabetic # Mc AHOM VOWEL SIGN E @@ -1211,6 +1239,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA 11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; Alphabetic # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA @@ -1264,7 +1293,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 12F90..12FF0 ; Alphabetic # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342F ; Alphabetic # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D 13441..13446 ; Alphabetic # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; Alphabetic # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; Alphabetic # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; Alphabetic # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; Alphabetic # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; Alphabetic # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612E ; Alphabetic # Mn [2] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA CONSONANT SIGN MEDIAL RA 16800..16A38 ; Alphabetic # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; Alphabetic # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A70..16ABE ; Alphabetic # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA @@ -1273,6 +1307,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16B40..16B43 ; Alphabetic # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16B63..16B77 ; Alphabetic # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; Alphabetic # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; Alphabetic # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; Alphabetic # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; Alphabetic # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; Alphabetic # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -1285,7 +1322,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; Alphabetic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; Alphabetic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -1348,6 +1385,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1E2C0..1E2EB ; Alphabetic # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E4D0..1E4EA ; Alphabetic # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E4EB ; Alphabetic # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; Alphabetic # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; Alphabetic # Lo OL ONAL SIGN HODDOND 1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -1402,7 +1441,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Alphabetic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 138387 +# Total code points: 142759 # ================================================ @@ -1691,6 +1730,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 10FD..10FF ; Lowercase # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN 13F8..13FD ; Lowercase # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV 1C80..1C88 ; Lowercase # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Lowercase # L& CYRILLIC SMALL LETTER TJE 1D00..1D2B ; Lowercase # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL 1D2C..1D6A ; Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI 1D6B..1D77 ; Lowercase # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G @@ -2032,11 +2072,13 @@ A7C1 ; Lowercase # L& LATIN SMALL LETTER OLD POLISH O A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Lowercase # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Lowercase # L& LATIN SMALL LETTER LAMBDA A7F2..A7F4 ; Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -2060,6 +2102,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 10787..107B0 ; Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK 107B2..107BA ; Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10CC0..10CF2 ; Lowercase # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Lowercase # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z @@ -2096,7 +2139,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 1E030..1E06D ; Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2544 +# Total code points: 2569 # ================================================ @@ -2379,6 +2422,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 10C7 ; Uppercase # L& GEORGIAN CAPITAL LETTER YN 10CD ; Uppercase # L& GEORGIAN CAPITAL LETTER AEN 13A0..13F5 ; Uppercase # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +1C89 ; Uppercase # L& CYRILLIC CAPITAL LETTER TJE 1C90..1CBA ; Uppercase # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Uppercase # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1E00 ; Uppercase # L& LATIN CAPITAL LETTER A WITH RING BELOW @@ -2705,9 +2749,12 @@ A7C0 ; Uppercase # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Uppercase # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5 ; Uppercase # L& LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Uppercase # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW @@ -2717,6 +2764,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 1058C..10592 ; Uppercase # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE 10594..10595 ; Uppercase # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Uppercase # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Uppercase # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y 1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z @@ -2755,7 +2803,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1951 +# Total code points: 1978 # ================================================ @@ -2800,7 +2848,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 10FD..10FF ; Cased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN 13A0..13F5 ; Cased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV 13F8..13FD ; Cased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV -1C80..1C88 ; Cased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; Cased # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; Cased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Cased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1D00..1D2B ; Cased # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL @@ -2863,10 +2911,10 @@ A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN A770 ; Cased # Lm MODIFIER LETTER US A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -A790..A7CA ; Cased # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; Cased # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; Cased # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; Cased # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; Cased # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -2897,6 +2945,8 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 107B2..107BA ; Cased # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10C80..10CB2 ; Cased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; Cased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D50..10D65 ; Cased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D70..10D85 ; Cased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Cased # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G @@ -2938,7 +2988,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 4526 +# Total code points: 4578 # ================================================ @@ -3015,7 +3065,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 0859..085B ; Case_Ignorable # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0888 ; Case_Ignorable # Sk ARABIC RAISED ROUND DOT 0890..0891 ; Case_Ignorable # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE -0898..089F ; Case_Ignorable # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; Case_Ignorable # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08C9 ; Case_Ignorable # Lm ARABIC SMALL FARSI YEH 08CA..08E1 ; Case_Ignorable # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E2 ; Case_Ignorable # Cf ARABIC DISPUTED END OF AYAH @@ -3296,8 +3346,11 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 10A3F ; Case_Ignorable # Mn KHAROSHTHI VIRAMA 10AE5..10AE6 ; Case_Ignorable # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW 10D24..10D27 ; Case_Ignorable # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D4E ; Case_Ignorable # Lm GARAY VOWEL LENGTH MARK +10D69..10D6D ; Case_Ignorable # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; Case_Ignorable # Lm GARAY REDUPLICATION MARK 10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFD..10EFF ; Case_Ignorable # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EFC..10EFF ; Case_Ignorable # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA @@ -3330,6 +3383,11 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11340 ; Case_Ignorable # Mn GRANTHA VOWEL SIGN II 11366..1136C ; Case_Ignorable # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; Case_Ignorable # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113BB..113C0 ; Case_Ignorable # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113CE ; Case_Ignorable # Mn TULU-TIGALARI SIGN VIRAMA +113D0 ; Case_Ignorable # Mn TULU-TIGALARI CONJOINER +113D2 ; Case_Ignorable # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; Case_Ignorable # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA 11438..1143F ; Case_Ignorable # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI 11442..11444 ; Case_Ignorable # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA 11446 ; Case_Ignorable # Mn NEWA SIGN NUKTA @@ -3349,7 +3407,8 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 116AD ; Case_Ignorable # Mn TAKRI VOWEL SIGN AA 116B0..116B5 ; Case_Ignorable # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU 116B7 ; Case_Ignorable # Mn TAKRI SIGN NUKTA -1171D..1171F ; Case_Ignorable # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; Case_Ignorable # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; Case_Ignorable # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11722..11725 ; Case_Ignorable # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11727..1172B ; Case_Ignorable # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER 1182F..11837 ; Case_Ignorable # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -3388,12 +3447,17 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11F36..11F3A ; Case_Ignorable # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R 11F40 ; Case_Ignorable # Mn KAWI VOWEL SIGN EU 11F42 ; Case_Ignorable # Mn KAWI CONJOINER +11F5A ; Case_Ignorable # Mn KAWI SIGN NUKTA 13430..1343F ; Case_Ignorable # Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE 13440 ; Case_Ignorable # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY 13447..13455 ; Case_Ignorable # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; Case_Ignorable # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; Case_Ignorable # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA 16AF0..16AF4 ; Case_Ignorable # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16B30..16B36 ; Case_Ignorable # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM 16B40..16B43 ; Case_Ignorable # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16D40..16D42 ; Case_Ignorable # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D6B..16D6C ; Case_Ignorable # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16F4F ; Case_Ignorable # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F8F..16F92 ; Case_Ignorable # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW 16F93..16F9F ; Case_Ignorable # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 @@ -3432,6 +3496,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 1E2EC..1E2EF ; Case_Ignorable # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EB ; Case_Ignorable # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; Case_Ignorable # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; Case_Ignorable # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA 1E94B ; Case_Ignorable # Lm ADLAM NASALIZATION MARK @@ -3440,7 +3505,7 @@ E0001 ; Case_Ignorable # Cf LANGUAGE TAG E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2707 +# Total code points: 2749 # ================================================ @@ -3724,6 +3789,7 @@ E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELEC 10C7 ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER YN 10CD ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER AEN 13A0..13F5 ; Changes_When_Lowercased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +1C89 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TJE 1C90..1CBA ; Changes_When_Lowercased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Changes_When_Lowercased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1E00 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH RING BELOW @@ -4043,9 +4109,12 @@ A7C0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OLD POLI A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Changes_When_Lowercased # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW @@ -4055,11 +4124,12 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 1058C..10592 ; Changes_When_Lowercased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE 10594..10595 ; Changes_When_Lowercased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Changes_When_Lowercased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Changes_When_Lowercased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y 1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1433 +# Total code points: 1460 # ================================================ @@ -4140,7 +4210,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 018C ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH TOPBAR 0192 ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH HOOK 0195 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HV -0199..019A ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR +0199..019B ; Changes_When_Uppercased # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE 019E ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG 01A1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN 01A3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OI @@ -4216,8 +4286,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 0259 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SCHWA 025B..025C ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E 0260..0261 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G -0263 ; Changes_When_Uppercased # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +0263..0266 ; Changes_When_Uppercased # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK 0268..026C ; Changes_When_Uppercased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT 026F ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED M 0271..0272 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK @@ -4357,6 +4426,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10FD..10FF ; Changes_When_Uppercased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN 13F8..13FD ; Changes_When_Uppercased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV 1C80..1C88 ; Changes_When_Uppercased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TJE 1D79 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR G 1D7D ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH STROKE 1D8E ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK @@ -4676,9 +4746,11 @@ A7C1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OLD POLISH A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Changes_When_Uppercased # L& LATIN SMALL LETTER LAMBDA A7F6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Uppercased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -4692,11 +4764,12 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 105B3..105B9 ; Changes_When_Uppercased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; Changes_When_Uppercased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10CC0..10CF2 ; Changes_When_Uppercased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Changes_When_Uppercased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1525 +# Total code points: 1552 # ================================================ @@ -4777,7 +4850,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 018C ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH TOPBAR 0192 ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH HOOK 0195 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HV -0199..019A ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR +0199..019B ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE 019E ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG 01A1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN 01A3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OI @@ -4854,8 +4927,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 0259 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SCHWA 025B..025C ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E 0260..0261 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G -0263 ; Changes_When_Titlecased # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +0263..0266 ; Changes_When_Titlecased # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK 0268..026C ; Changes_When_Titlecased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT 026F ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED M 0271..0272 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK @@ -4993,6 +5065,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 0561..0587 ; Changes_When_Titlecased # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN 13F8..13FD ; Changes_When_Titlecased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV 1C80..1C88 ; Changes_When_Titlecased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TJE 1D79 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR G 1D7D ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH STROKE 1D8E ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK @@ -5312,9 +5385,11 @@ A7C1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OLD POLISH A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Changes_When_Titlecased # L& LATIN SMALL LETTER LAMBDA A7F6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Titlecased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -5328,11 +5403,12 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 105B3..105B9 ; Changes_When_Titlecased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; Changes_When_Titlecased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10CC0..10CF2 ; Changes_When_Titlecased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Changes_When_Titlecased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1452 +# Total code points: 1479 # ================================================ @@ -5623,7 +5699,7 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 10C7 ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER YN 10CD ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER AEN 13F8..13FD ; Changes_When_Casefolded # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV -1C80..1C88 ; Changes_When_Casefolded # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C89 ; Changes_When_Casefolded # L& [10] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC CAPITAL LETTER TJE 1C90..1CBA ; Changes_When_Casefolded # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Changes_When_Casefolded # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1E00 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH RING BELOW @@ -5945,9 +6021,12 @@ A7C0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OLD POLI A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H AB70..ABBF ; Changes_When_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA FB00..FB06 ; Changes_When_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST @@ -5960,11 +6039,12 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 1058C..10592 ; Changes_When_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE 10594..10595 ; Changes_When_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Changes_When_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Changes_When_Casefolded # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y 1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1506 +# Total code points: 1533 # ================================================ @@ -5980,8 +6060,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 00D8..00F6 ; Changes_When_Casemapped # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS 00F8..0137 ; Changes_When_Casemapped # L& [64] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER K WITH CEDILLA 0139..018C ; Changes_When_Casemapped # L& [84] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER D WITH TOPBAR -018E..019A ; Changes_When_Casemapped # L& [13] LATIN CAPITAL LETTER REVERSED E..LATIN SMALL LETTER L WITH BAR -019C..01A9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER ESH +018E..01A9 ; Changes_When_Casemapped # L& [28] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER ESH 01AC..01B9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER T WITH HOOK..LATIN SMALL LETTER EZH REVERSED 01BC..01BD ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE 01BF ; Changes_When_Casemapped # L& LATIN LETTER WYNN @@ -5992,8 +6071,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 0259 ; Changes_When_Casemapped # L& LATIN SMALL LETTER SCHWA 025B..025C ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E 0260..0261 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G -0263 ; Changes_When_Casemapped # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +0263..0266 ; Changes_When_Casemapped # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK 0268..026C ; Changes_When_Casemapped # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT 026F ; Changes_When_Casemapped # L& LATIN SMALL LETTER TURNED M 0271..0272 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK @@ -6027,7 +6105,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10FD..10FF ; Changes_When_Casemapped # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN 13A0..13F5 ; Changes_When_Casemapped # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV 13F8..13FD ; Changes_When_Casemapped # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV -1C80..1C88 ; Changes_When_Casemapped # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; Changes_When_Casemapped # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; Changes_When_Casemapped # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Changes_When_Casemapped # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1D79 ; Changes_When_Casemapped # L& LATIN SMALL LETTER INSULAR G @@ -6078,9 +6156,9 @@ A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I -A7B0..A7CA ; Changes_When_Casemapped # L& [27] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7B0..A7CD ; Changes_When_Casemapped # L& [30] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D6..A7D9 ; Changes_When_Casemapped # L& [4] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN SMALL LETTER SIGMOID S +A7D6..A7DC ; Changes_When_Casemapped # L& [7] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -6101,11 +6179,13 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 105BB..105BC ; Changes_When_Casemapped # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10C80..10CB2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D50..10D65 ; Changes_When_Casemapped # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D70..10D85 ; Changes_When_Casemapped # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2927 +# Total code points: 2981 # ================================================ @@ -6364,7 +6444,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 1C4D..1C4F ; ID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA 1C5A..1C77 ; ID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; ID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C80..1C88 ; ID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; ID_Start # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; ID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; ID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CE9..1CEC ; ID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL @@ -6481,10 +6561,10 @@ A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER I A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; ID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; ID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; ID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; ID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -6603,6 +6683,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 105A3..105B1 ; ID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; ID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; ID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; ID_Start # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; ID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; ID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; ID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -6639,8 +6720,15 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10C80..10CB2 ; ID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; ID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 10D00..10D23 ; ID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D4A..10D4D ; ID_Start # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; ID_Start # Lm GARAY VOWEL LENGTH MARK +10D4F ; ID_Start # Lo GARAY SUKUN +10D50..10D65 ; ID_Start # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6F ; ID_Start # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; ID_Start # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; ID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW 10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -6679,6 +6767,13 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1133D ; ID_Start # Lo GRANTHA SIGN AVAGRAHA 11350 ; ID_Start # Lo GRANTHA OM 1135D..11361 ; ID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11380..11389 ; ID_Start # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; ID_Start # Lo TULU-TIGALARI LETTER EE +1138E ; ID_Start # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; ID_Start # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; ID_Start # Lo TULU-TIGALARI SIGN AVAGRAHA +113D1 ; ID_Start # Lo TULU-TIGALARI REPHA +113D3 ; ID_Start # Lo TULU-TIGALARI SIGN PLUTA 11400..11434 ; ID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA 11447..1144A ; ID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI 1145F..11461 ; ID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA @@ -6713,6 +6808,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11A5C..11A89 ; ID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; ID_Start # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; ID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; ID_Start # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11C00..11C08 ; ID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; ID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; ID_Start # Lo BHAIKSUKI SIGN AVAGRAHA @@ -6736,7 +6832,9 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 12F90..12FF0 ; ID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342F ; ID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D 13441..13446 ; ID_Start # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; ID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; ID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; ID_Start # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA 16800..16A38 ; ID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; ID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A70..16ABE ; ID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA @@ -6745,6 +6843,9 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16B40..16B43 ; ID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16B63..16B77 ; ID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; ID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; ID_Start # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; ID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; ID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; ID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION @@ -6753,7 +6854,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK 17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; ID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; ID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -6809,6 +6910,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1E2C0..1E2EB ; ID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E4D0..1E4EA ; ID_Start # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E4EB ; ID_Start # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; ID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; ID_Start # Lo OL ONAL SIGN HODDOND 1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -6859,7 +6962,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; ID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 136967 +# Total code points: 141269 # ================================================ @@ -6966,7 +7069,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL -0898..089F ; ID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; ID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH 08CA..08E1 ; ID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA @@ -7399,7 +7502,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1C50..1C59 ; ID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE 1C5A..1C77 ; ID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; ID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C80..1C88 ; ID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; ID_Continue # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; ID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; ID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CD0..1CD2 ; ID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA @@ -7543,10 +7646,10 @@ A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTE A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; ID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; ID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; ID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; ID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -7735,6 +7838,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 105A3..105B1 ; ID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; ID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; ID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; ID_Continue # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; ID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; ID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; ID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -7779,10 +7883,19 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 10D00..10D23 ; ID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA 10D24..10D27 ; ID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D30..10D39 ; ID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; ID_Continue # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; ID_Continue # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; ID_Continue # Lm GARAY VOWEL LENGTH MARK +10D4F ; ID_Continue # Lo GARAY SUKUN +10D50..10D65 ; ID_Continue # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69..10D6D ; ID_Continue # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; ID_Continue # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; ID_Continue # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 10E80..10EA9 ; ID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE -10EFD..10EFF ; ID_Continue # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EC2..10EC4 ; ID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EFC..10EFF ; ID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -7878,6 +7991,24 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11362..11363 ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL 11366..1136C ; ID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; ID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11380..11389 ; ID_Continue # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; ID_Continue # Lo TULU-TIGALARI LETTER EE +1138E ; ID_Continue # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; ID_Continue # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; ID_Continue # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; ID_Continue # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; ID_Continue # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; ID_Continue # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; ID_Continue # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; ID_Continue # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; ID_Continue # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CE ; ID_Continue # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; ID_Continue # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; ID_Continue # Mn TULU-TIGALARI CONJOINER +113D1 ; ID_Continue # Lo TULU-TIGALARI REPHA +113D2 ; ID_Continue # Mn TULU-TIGALARI GEMINATION MARK +113D3 ; ID_Continue # Lo TULU-TIGALARI SIGN PLUTA +113E1..113E2 ; ID_Continue # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA 11400..11434 ; ID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA 11435..11437 ; ID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II 11438..1143F ; ID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI @@ -7929,8 +8060,11 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 116B7 ; ID_Continue # Mn TAKRI SIGN NUKTA 116B8 ; ID_Continue # Lo TAKRI LETTER ARCHAIC KHA 116C0..116C9 ; ID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; ID_Continue # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE 11700..1171A ; ID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA -1171D..1171F ; ID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; ID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; ID_Continue # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; ID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11720..11721 ; ID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11722..11725 ; ID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11726 ; ID_Continue # Mc AHOM VOWEL SIGN E @@ -7988,6 +8122,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; ID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BF0..11BF9 ; ID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; ID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; ID_Continue # Mc BHAIKSUKI VOWEL SIGN AA @@ -8041,6 +8177,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11F41 ; ID_Continue # Mc KAWI SIGN KILLER 11F42 ; ID_Continue # Mn KAWI CONJOINER 11F50..11F59 ; ID_Continue # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11F5A ; ID_Continue # Mn KAWI SIGN NUKTA 11FB0 ; ID_Continue # Lo LISU LETTER YHA 12000..12399 ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM @@ -8050,7 +8187,13 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 13440 ; ID_Continue # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY 13441..13446 ; ID_Continue # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN 13447..13455 ; ID_Continue # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +13460..143FA ; ID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; ID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; ID_Continue # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; ID_Continue # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; ID_Continue # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612F ; ID_Continue # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16130..16139 ; ID_Continue # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16800..16A38 ; ID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; ID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; ID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -8064,6 +8207,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16B50..16B59 ; ID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 16B63..16B77 ; ID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; ID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; ID_Continue # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; ID_Continue # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; ID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D70..16D79 ; ID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; ID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -8077,7 +8224,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; ID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; ID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -8092,6 +8239,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1BC80..1BC88 ; ID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; ID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9D..1BC9E ; ID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CCF0..1CCF9 ; ID_Continue # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE 1CF00..1CF2D ; ID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; ID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; ID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM @@ -8163,6 +8311,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1E4EB ; ID_Continue # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; ID_Continue # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E4F0..1E4F9 ; ID_Continue # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; ID_Continue # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5EE..1E5EF ; ID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E5F0 ; ID_Continue # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; ID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE 1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -8218,7 +8370,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 31350..323AF ; ID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 140108 +# Total code points: 144541 # ================================================ @@ -8474,7 +8626,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 1C4D..1C4F ; XID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA 1C5A..1C77 ; XID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; XID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C80..1C88 ; XID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; XID_Start # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; XID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; XID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CE9..1CEC ; XID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL @@ -8590,10 +8742,10 @@ A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; XID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; XID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; XID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; XID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -8717,6 +8869,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 105A3..105B1 ; XID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; XID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; XID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; XID_Start # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; XID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; XID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; XID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -8753,8 +8906,15 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 10C80..10CB2 ; XID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; XID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 10D00..10D23 ; XID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D4A..10D4D ; XID_Start # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; XID_Start # Lm GARAY VOWEL LENGTH MARK +10D4F ; XID_Start # Lo GARAY SUKUN +10D50..10D65 ; XID_Start # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6F ; XID_Start # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; XID_Start # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; XID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW 10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -8793,6 +8953,13 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1133D ; XID_Start # Lo GRANTHA SIGN AVAGRAHA 11350 ; XID_Start # Lo GRANTHA OM 1135D..11361 ; XID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11380..11389 ; XID_Start # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; XID_Start # Lo TULU-TIGALARI LETTER EE +1138E ; XID_Start # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; XID_Start # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; XID_Start # Lo TULU-TIGALARI SIGN AVAGRAHA +113D1 ; XID_Start # Lo TULU-TIGALARI REPHA +113D3 ; XID_Start # Lo TULU-TIGALARI SIGN PLUTA 11400..11434 ; XID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA 11447..1144A ; XID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI 1145F..11461 ; XID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA @@ -8827,6 +8994,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11A5C..11A89 ; XID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; XID_Start # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; XID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; XID_Start # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11C00..11C08 ; XID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; XID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; XID_Start # Lo BHAIKSUKI SIGN AVAGRAHA @@ -8850,7 +9018,9 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 12F90..12FF0 ; XID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342F ; XID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D 13441..13446 ; XID_Start # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; XID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; XID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; XID_Start # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA 16800..16A38 ; XID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; XID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A70..16ABE ; XID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA @@ -8859,6 +9029,9 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16B40..16B43 ; XID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16B63..16B77 ; XID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; XID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; XID_Start # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; XID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; XID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; XID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION @@ -8867,7 +9040,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK 17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; XID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; XID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -8923,6 +9096,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1E2C0..1E2EB ; XID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E4D0..1E4EA ; XID_Start # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E4EB ; XID_Start # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; XID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; XID_Start # Lo OL ONAL SIGN HODDOND 1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -8973,7 +9148,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; XID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 136944 +# Total code points: 141246 # ================================================ @@ -9076,7 +9251,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL -0898..089F ; XID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; XID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH 08CA..08E1 ; XID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA @@ -9509,7 +9684,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1C50..1C59 ; XID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE 1C5A..1C77 ; XID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; XID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1C80..1C88 ; XID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; XID_Continue # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; XID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; XID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CD0..1CD2 ; XID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA @@ -9652,10 +9827,10 @@ A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETT A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; XID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; XID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; XID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; XID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -9850,6 +10025,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 105A3..105B1 ; XID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; XID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; XID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; XID_Continue # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; XID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; XID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; XID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -9894,10 +10070,19 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 10D00..10D23 ; XID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA 10D24..10D27 ; XID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D30..10D39 ; XID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; XID_Continue # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; XID_Continue # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; XID_Continue # Lm GARAY VOWEL LENGTH MARK +10D4F ; XID_Continue # Lo GARAY SUKUN +10D50..10D65 ; XID_Continue # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69..10D6D ; XID_Continue # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; XID_Continue # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; XID_Continue # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 10E80..10EA9 ; XID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE -10EFD..10EFF ; XID_Continue # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EC2..10EC4 ; XID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EFC..10EFF ; XID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -9993,6 +10178,24 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11362..11363 ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL 11366..1136C ; XID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; XID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11380..11389 ; XID_Continue # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; XID_Continue # Lo TULU-TIGALARI LETTER EE +1138E ; XID_Continue # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; XID_Continue # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; XID_Continue # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; XID_Continue # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; XID_Continue # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; XID_Continue # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; XID_Continue # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; XID_Continue # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; XID_Continue # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CE ; XID_Continue # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; XID_Continue # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; XID_Continue # Mn TULU-TIGALARI CONJOINER +113D1 ; XID_Continue # Lo TULU-TIGALARI REPHA +113D2 ; XID_Continue # Mn TULU-TIGALARI GEMINATION MARK +113D3 ; XID_Continue # Lo TULU-TIGALARI SIGN PLUTA +113E1..113E2 ; XID_Continue # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA 11400..11434 ; XID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA 11435..11437 ; XID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II 11438..1143F ; XID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI @@ -10044,8 +10247,11 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 116B7 ; XID_Continue # Mn TAKRI SIGN NUKTA 116B8 ; XID_Continue # Lo TAKRI LETTER ARCHAIC KHA 116C0..116C9 ; XID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; XID_Continue # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE 11700..1171A ; XID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA -1171D..1171F ; XID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; XID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; XID_Continue # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; XID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11720..11721 ; XID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11722..11725 ; XID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11726 ; XID_Continue # Mc AHOM VOWEL SIGN E @@ -10103,6 +10309,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; XID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BF0..11BF9 ; XID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; XID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; XID_Continue # Mc BHAIKSUKI VOWEL SIGN AA @@ -10156,6 +10364,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11F41 ; XID_Continue # Mc KAWI SIGN KILLER 11F42 ; XID_Continue # Mn KAWI CONJOINER 11F50..11F59 ; XID_Continue # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11F5A ; XID_Continue # Mn KAWI SIGN NUKTA 11FB0 ; XID_Continue # Lo LISU LETTER YHA 12000..12399 ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM @@ -10165,7 +10374,13 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 13440 ; XID_Continue # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY 13441..13446 ; XID_Continue # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN 13447..13455 ; XID_Continue # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +13460..143FA ; XID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; XID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; XID_Continue # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; XID_Continue # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; XID_Continue # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612F ; XID_Continue # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16130..16139 ; XID_Continue # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16800..16A38 ; XID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; XID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; XID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -10179,6 +10394,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16B50..16B59 ; XID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 16B63..16B77 ; XID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; XID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; XID_Continue # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; XID_Continue # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; XID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D70..16D79 ; XID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; XID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -10192,7 +10411,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; XID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; XID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -10207,6 +10426,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1BC80..1BC88 ; XID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; XID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9D..1BC9E ; XID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CCF0..1CCF9 ; XID_Continue # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE 1CF00..1CF2D ; XID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; XID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; XID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM @@ -10278,6 +10498,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1E4EB ; XID_Continue # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; XID_Continue # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E4F0..1E4F9 ; XID_Continue # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; XID_Continue # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5EE..1E5EF ; XID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E5F0 ; XID_Continue # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; XID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE 1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -10333,7 +10557,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 31350..323AF ; XID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 140089 +# Total code points: 144522 # ================================================ @@ -10418,7 +10642,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese 0825..0827 ; Grapheme_Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; Grapheme_Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Grapheme_Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -0898..089F ; Grapheme_Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; Grapheme_Extend # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08CA..08E1 ; Grapheme_Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; Grapheme_Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN OE @@ -10475,8 +10699,11 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese 0C81 ; Grapheme_Extend # Mn KANNADA SIGN CANDRABINDU 0CBC ; Grapheme_Extend # Mn KANNADA SIGN NUKTA 0CBF ; Grapheme_Extend # Mn KANNADA VOWEL SIGN I +0CC0 ; Grapheme_Extend # Mc KANNADA VOWEL SIGN II 0CC2 ; Grapheme_Extend # Mc KANNADA VOWEL SIGN UU 0CC6 ; Grapheme_Extend # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; Grapheme_Extend # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Grapheme_Extend # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK 0CE2..0CE3 ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL @@ -10522,7 +10749,9 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese 109D ; Grapheme_Extend # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; Grapheme_Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Grapheme_Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; Grapheme_Extend # Mc TAGALOG SIGN PAMUDPOD 1732..1733 ; Grapheme_Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; Grapheme_Extend # Mc HANUNOO SIGN PAMUDPOD 1752..1753 ; Grapheme_Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Grapheme_Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Grapheme_Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -10554,17 +10783,22 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese 1B34 ; Grapheme_Extend # Mn BALINESE SIGN REREKAN 1B35 ; Grapheme_Extend # Mc BALINESE VOWEL SIGN TEDUNG 1B36..1B3A ; Grapheme_Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; Grapheme_Extend # Mc BALINESE VOWEL SIGN RA REPA TEDUNG 1B3C ; Grapheme_Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B3D ; Grapheme_Extend # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG 1B42 ; Grapheme_Extend # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; Grapheme_Extend # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG 1B6B..1B73 ; Grapheme_Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B80..1B81 ; Grapheme_Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1BA2..1BA5 ; Grapheme_Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU 1BA8..1BA9 ; Grapheme_Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; Grapheme_Extend # Mc SUNDANESE SIGN PAMAAEH 1BAB..1BAD ; Grapheme_Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA 1BE6 ; Grapheme_Extend # Mn BATAK SIGN TOMPI 1BE8..1BE9 ; Grapheme_Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE 1BED ; Grapheme_Extend # Mn BATAK VOWEL SIGN KARO O 1BEF..1BF1 ; Grapheme_Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; Grapheme_Extend # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN 1C2C..1C33 ; Grapheme_Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T 1C36..1C37 ; Grapheme_Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA 1CD0..1CD2 ; Grapheme_Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA @@ -10601,10 +10835,12 @@ A8E0..A8F1 ; Grapheme_Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMB A8FF ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN AY A926..A92D ; Grapheme_Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU A947..A951 ; Grapheme_Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A953 ; Grapheme_Extend # Mc REJANG VIRAMA A980..A982 ; Grapheme_Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR A9B3 ; Grapheme_Extend # Mn JAVANESE SIGN CECAK TELU A9B6..A9B9 ; Grapheme_Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT A9BC..A9BD ; Grapheme_Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9C0 ; Grapheme_Extend # Mc JAVANESE PANGKON A9E5 ; Grapheme_Extend # Mn MYANMAR SIGN SHAN SAW AA29..AA2E ; Grapheme_Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE AA31..AA32 ; Grapheme_Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE @@ -10636,8 +10872,9 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 10A3F ; Grapheme_Extend # Mn KHAROSHTHI VIRAMA 10AE5..10AE6 ; Grapheme_Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW 10D24..10D27 ; Grapheme_Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D69..10D6D ; Grapheme_Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; Grapheme_Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFD..10EFF ; Grapheme_Extend # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EFC..10EFF ; Grapheme_Extend # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Grapheme_Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Grapheme_Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Grapheme_Extend # Mn BRAHMI SIGN ANUSVARA @@ -10654,10 +10891,12 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 11173 ; Grapheme_Extend # Mn MAHAJANI SIGN NUKTA 11180..11181 ; Grapheme_Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA 111B6..111BE ; Grapheme_Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C0 ; Grapheme_Extend # Mc SHARADA SIGN VIRAMA 111C9..111CC ; Grapheme_Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK 111CF ; Grapheme_Extend # Mn SHARADA SIGN INVERTED CANDRABINDU 1122F..11231 ; Grapheme_Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI 11234 ; Grapheme_Extend # Mn KHOJKI SIGN ANUSVARA +11235 ; Grapheme_Extend # Mc KHOJKI SIGN VIRAMA 11236..11237 ; Grapheme_Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA 1123E ; Grapheme_Extend # Mn KHOJKI SIGN SUKUN 11241 ; Grapheme_Extend # Mn KHOJKI VOWEL SIGN VOCALIC R @@ -10667,9 +10906,20 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 1133B..1133C ; Grapheme_Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA 1133E ; Grapheme_Extend # Mc GRANTHA VOWEL SIGN AA 11340 ; Grapheme_Extend # Mn GRANTHA VOWEL SIGN II +1134D ; Grapheme_Extend # Mc GRANTHA SIGN VIRAMA 11357 ; Grapheme_Extend # Mc GRANTHA AU LENGTH MARK 11366..1136C ; Grapheme_Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; Grapheme_Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113B8 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN AA +113BB..113C0 ; Grapheme_Extend # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; Grapheme_Extend # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK +113CE ; Grapheme_Extend # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; Grapheme_Extend # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; Grapheme_Extend # Mn TULU-TIGALARI CONJOINER +113D2 ; Grapheme_Extend # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; Grapheme_Extend # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA 11438..1143F ; Grapheme_Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI 11442..11444 ; Grapheme_Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA 11446 ; Grapheme_Extend # Mn NEWA SIGN NUKTA @@ -10691,14 +10941,17 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 116AB ; Grapheme_Extend # Mn TAKRI SIGN ANUSVARA 116AD ; Grapheme_Extend # Mn TAKRI VOWEL SIGN AA 116B0..116B5 ; Grapheme_Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; Grapheme_Extend # Mc TAKRI SIGN VIRAMA 116B7 ; Grapheme_Extend # Mn TAKRI SIGN NUKTA -1171D..1171F ; Grapheme_Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; Grapheme_Extend # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; Grapheme_Extend # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11722..11725 ; Grapheme_Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11727..1172B ; Grapheme_Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER 1182F..11837 ; Grapheme_Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA 11839..1183A ; Grapheme_Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA 11930 ; Grapheme_Extend # Mc DIVES AKURU VOWEL SIGN AA 1193B..1193C ; Grapheme_Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; Grapheme_Extend # Mc DIVES AKURU SIGN HALANTA 1193E ; Grapheme_Extend # Mn DIVES AKURU VIRAMA 11943 ; Grapheme_Extend # Mn DIVES AKURU SIGN NUKTA 119D4..119D7 ; Grapheme_Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR @@ -10731,20 +10984,25 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 11F00..11F01 ; Grapheme_Extend # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA 11F36..11F3A ; Grapheme_Extend # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R 11F40 ; Grapheme_Extend # Mn KAWI VOWEL SIGN EU +11F41 ; Grapheme_Extend # Mc KAWI SIGN KILLER 11F42 ; Grapheme_Extend # Mn KAWI CONJOINER +11F5A ; Grapheme_Extend # Mn KAWI SIGN NUKTA 13440 ; Grapheme_Extend # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY 13447..13455 ; Grapheme_Extend # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; Grapheme_Extend # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; Grapheme_Extend # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA 16AF0..16AF4 ; Grapheme_Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16B30..16B36 ; Grapheme_Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM 16F4F ; Grapheme_Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F8F..16F92 ; Grapheme_Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW 16FE4 ; Grapheme_Extend # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; Grapheme_Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 1BC9D..1BC9E ; Grapheme_Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1CF00..1CF2D ; Grapheme_Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; Grapheme_Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG -1D165 ; Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM +1D165..1D166 ; Grapheme_Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; Grapheme_Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16E..1D172 ; Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 +1D16D..1D172 ; Grapheme_Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 1D17B..1D182 ; Grapheme_Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; Grapheme_Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; Grapheme_Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO @@ -10765,12 +11023,13 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK. 1E2AE ; Grapheme_Extend # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Grapheme_Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; Grapheme_Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; Grapheme_Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E8D0..1E8D6 ; Grapheme_Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Grapheme_Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0020..E007F ; Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2125 +# Total code points: 2193 # ================================================ @@ -11062,10 +11321,8 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 0CB5..0CB9 ; Grapheme_Base # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; Grapheme_Base # Lo KANNADA SIGN AVAGRAHA 0CBE ; Grapheme_Base # Mc KANNADA VOWEL SIGN AA -0CC0..0CC1 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U +0CC1 ; Grapheme_Base # Mc KANNADA VOWEL SIGN U 0CC3..0CC4 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR -0CC7..0CC8 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CDD..0CDE ; Grapheme_Base # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; Grapheme_Base # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE6..0CEF ; Grapheme_Base # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -11214,9 +11471,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 16EE..16F0 ; Grapheme_Base # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; Grapheme_Base # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC 1700..1711 ; Grapheme_Base # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA -1715 ; Grapheme_Base # Mc TAGALOG SIGN PAMUDPOD 171F..1731 ; Grapheme_Base # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA -1734 ; Grapheme_Base # Mc HANUNOO SIGN PAMUDPOD 1735..1736 ; Grapheme_Base # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751 ; Grapheme_Base # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; Grapheme_Base # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA @@ -11274,27 +11529,24 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 1AA8..1AAD ; Grapheme_Base # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1B04 ; Grapheme_Base # Mc BALINESE SIGN BISAH 1B05..1B33 ; Grapheme_Base # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B3B ; Grapheme_Base # Mc BALINESE VOWEL SIGN RA REPA TEDUNG -1B3D..1B41 ; Grapheme_Base # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG -1B43..1B44 ; Grapheme_Base # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B3E..1B41 ; Grapheme_Base # Mc [4] BALINESE VOWEL SIGN TALING..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B45..1B4C ; Grapheme_Base # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B4E..1B4F ; Grapheme_Base # Po [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN 1B50..1B59 ; Grapheme_Base # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; Grapheme_Base # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; Grapheme_Base # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B74..1B7C ; Grapheme_Base # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING -1B7D..1B7E ; Grapheme_Base # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG +1B7D..1B7F ; Grapheme_Base # Po [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK 1B82 ; Grapheme_Base # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; Grapheme_Base # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BA1 ; Grapheme_Base # Mc SUNDANESE CONSONANT SIGN PAMINGKAL 1BA6..1BA7 ; Grapheme_Base # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG -1BAA ; Grapheme_Base # Mc SUNDANESE SIGN PAMAAEH 1BAE..1BAF ; Grapheme_Base # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BB0..1BB9 ; Grapheme_Base # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE 1BBA..1BE5 ; Grapheme_Base # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U 1BE7 ; Grapheme_Base # Mc BATAK VOWEL SIGN E 1BEA..1BEC ; Grapheme_Base # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O 1BEE ; Grapheme_Base # Mc BATAK VOWEL SIGN U -1BF2..1BF3 ; Grapheme_Base # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN 1BFC..1BFF ; Grapheme_Base # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT 1C00..1C23 ; Grapheme_Base # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A 1C24..1C2B ; Grapheme_Base # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU @@ -11306,7 +11558,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 1C5A..1C77 ; Grapheme_Base # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; Grapheme_Base # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD 1C7E..1C7F ; Grapheme_Base # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD -1C80..1C88 ; Grapheme_Base # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; Grapheme_Base # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; Grapheme_Base # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; Grapheme_Base # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CC0..1CC7 ; Grapheme_Base # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA @@ -11461,7 +11713,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 239B..23B3 ; Grapheme_Base # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM 23B4..23DB ; Grapheme_Base # So [40] TOP SQUARE BRACKET..FUSE 23DC..23E1 ; Grapheme_Base # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET -23E2..2426 ; Grapheme_Base # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO +23E2..2429 ; Grapheme_Base # So [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM 2440..244A ; Grapheme_Base # So [11] OCR HOOK..OCR DOUBLE BACKSLASH 2460..249B ; Grapheme_Base # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP 249C..24E9 ; Grapheme_Base # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z @@ -11676,7 +11928,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE 3192..3195 ; Grapheme_Base # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK 3196..319F ; Grapheme_Base # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK 31A0..31BF ; Grapheme_Base # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH -31C0..31E3 ; Grapheme_Base # So [36] CJK STROKE T..CJK STROKE Q +31C0..31E5 ; Grapheme_Base # So [38] CJK STROKE T..CJK STROKE SZP 31EF ; Grapheme_Base # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION 31F0..31FF ; Grapheme_Base # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3200..321E ; Grapheme_Base # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU @@ -11725,10 +11977,10 @@ A788 ; Grapheme_Base # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Grapheme_Base # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Grapheme_Base # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; Grapheme_Base # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; Grapheme_Base # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Grapheme_Base # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; Grapheme_Base # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; Grapheme_Base # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; Grapheme_Base # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Grapheme_Base # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -11761,14 +12013,14 @@ A900..A909 ; Grapheme_Base # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NIN A90A..A925 ; Grapheme_Base # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO A92E..A92F ; Grapheme_Base # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA A930..A946 ; Grapheme_Base # Lo [23] REJANG LETTER KA..REJANG LETTER A -A952..A953 ; Grapheme_Base # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A952 ; Grapheme_Base # Mc REJANG CONSONANT SIGN H A95F ; Grapheme_Base # Po REJANG SECTION MARK A960..A97C ; Grapheme_Base # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH A983 ; Grapheme_Base # Mc JAVANESE SIGN WIGNYAN A984..A9B2 ; Grapheme_Base # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA A9B4..A9B5 ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG A9BA..A9BB ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE -A9BE..A9C0 ; Grapheme_Base # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +A9BE..A9BF ; Grapheme_Base # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA A9C1..A9CD ; Grapheme_Base # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH A9CF ; Grapheme_Base # Lm JAVANESE PANGRANGKEP A9D0..A9D9 ; Grapheme_Base # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE @@ -12000,6 +12252,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 105A3..105B1 ; Grapheme_Base # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; Grapheme_Base # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; Grapheme_Base # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; Grapheme_Base # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; Grapheme_Base # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; Grapheme_Base # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; Grapheme_Base # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -12063,10 +12316,20 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 10CFA..10CFF ; Grapheme_Base # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND 10D00..10D23 ; Grapheme_Base # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA 10D30..10D39 ; Grapheme_Base # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; Grapheme_Base # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; Grapheme_Base # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; Grapheme_Base # Lm GARAY VOWEL LENGTH MARK +10D4F ; Grapheme_Base # Lo GARAY SUKUN +10D50..10D65 ; Grapheme_Base # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6E ; Grapheme_Base # Pd GARAY HYPHEN +10D6F ; Grapheme_Base # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; Grapheme_Base # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10D8E..10D8F ; Grapheme_Base # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN 10E60..10E7E ; Grapheme_Base # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS 10E80..10EA9 ; Grapheme_Base # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EAD ; Grapheme_Base # Pd YEZIDI HYPHENATION MARK 10EB0..10EB1 ; Grapheme_Base # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; Grapheme_Base # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW 10F00..10F1C ; Grapheme_Base # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F1D..10F26 ; Grapheme_Base # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF 10F27 ; Grapheme_Base # Lo OLD SOGDIAN LIGATURE AYIN-DALETH @@ -12107,7 +12370,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11182 ; Grapheme_Base # Mc SHARADA SIGN VISARGA 11183..111B2 ; Grapheme_Base # Lo [48] SHARADA LETTER A..SHARADA LETTER HA 111B3..111B5 ; Grapheme_Base # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II -111BF..111C0 ; Grapheme_Base # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111BF ; Grapheme_Base # Mc SHARADA VOWEL SIGN AU 111C1..111C4 ; Grapheme_Base # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM 111C5..111C8 ; Grapheme_Base # Po [4] SHARADA DANDA..SHARADA SEPARATOR 111CD ; Grapheme_Base # Po SHARADA SUTRA MARK @@ -12122,7 +12385,6 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11213..1122B ; Grapheme_Base # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA 1122C..1122E ; Grapheme_Base # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II 11232..11233 ; Grapheme_Base # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU -11235 ; Grapheme_Base # Mc KHOJKI SIGN VIRAMA 11238..1123D ; Grapheme_Base # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN 1123F..11240 ; Grapheme_Base # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I 11280..11286 ; Grapheme_Base # Lo [7] MULTANI LETTER A..MULTANI LETTER GA @@ -12145,10 +12407,22 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 1133F ; Grapheme_Base # Mc GRANTHA VOWEL SIGN I 11341..11344 ; Grapheme_Base # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR 11347..11348 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI -1134B..1134D ; Grapheme_Base # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +1134B..1134C ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU 11350 ; Grapheme_Base # Lo GRANTHA OM 1135D..11361 ; Grapheme_Base # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL 11362..11363 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11380..11389 ; Grapheme_Base # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; Grapheme_Base # Lo TULU-TIGALARI LETTER EE +1138E ; Grapheme_Base # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; Grapheme_Base # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; Grapheme_Base # Lo TULU-TIGALARI SIGN AVAGRAHA +113B9..113BA ; Grapheme_Base # Mc [2] TULU-TIGALARI VOWEL SIGN I..TULU-TIGALARI VOWEL SIGN II +113CA ; Grapheme_Base # Mc TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; Grapheme_Base # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113D1 ; Grapheme_Base # Lo TULU-TIGALARI REPHA +113D3 ; Grapheme_Base # Lo TULU-TIGALARI SIGN PLUTA +113D4..113D5 ; Grapheme_Base # Po [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA +113D7..113D8 ; Grapheme_Base # Po [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA 11400..11434 ; Grapheme_Base # Lo [53] NEWA LETTER A..NEWA LETTER HA 11435..11437 ; Grapheme_Base # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II 11440..11441 ; Grapheme_Base # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU @@ -12186,11 +12460,12 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11680..116AA ; Grapheme_Base # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA 116AC ; Grapheme_Base # Mc TAKRI SIGN VISARGA 116AE..116AF ; Grapheme_Base # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II -116B6 ; Grapheme_Base # Mc TAKRI SIGN VIRAMA 116B8 ; Grapheme_Base # Lo TAKRI LETTER ARCHAIC KHA 116B9 ; Grapheme_Base # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; Grapheme_Base # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; Grapheme_Base # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE 11700..1171A ; Grapheme_Base # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171E ; Grapheme_Base # Mc AHOM CONSONANT SIGN MEDIAL RA 11720..11721 ; Grapheme_Base # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11726 ; Grapheme_Base # Mc AHOM VOWEL SIGN E 11730..11739 ; Grapheme_Base # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE @@ -12212,7 +12487,6 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11918..1192F ; Grapheme_Base # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA 11931..11935 ; Grapheme_Base # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E 11937..11938 ; Grapheme_Base # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O -1193D ; Grapheme_Base # Mc DIVES AKURU SIGN HALANTA 1193F ; Grapheme_Base # Lo DIVES AKURU PREFIXED NASAL SIGN 11940 ; Grapheme_Base # Mc DIVES AKURU MEDIAL YA 11941 ; Grapheme_Base # Lo DIVES AKURU INITIAL RA @@ -12241,6 +12515,9 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11A9E..11AA2 ; Grapheme_Base # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 11AB0..11AF8 ; Grapheme_Base # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11B00..11B09 ; Grapheme_Base # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11BC0..11BE0 ; Grapheme_Base # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BE1 ; Grapheme_Base # Po SUNUWAR SIGN PVO +11BF0..11BF9 ; Grapheme_Base # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; Grapheme_Base # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Grapheme_Base # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; Grapheme_Base # Mc BHAIKSUKI VOWEL SIGN AA @@ -12276,7 +12553,6 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 11F12..11F33 ; Grapheme_Base # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA 11F34..11F35 ; Grapheme_Base # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA 11F3E..11F3F ; Grapheme_Base # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI -11F41 ; Grapheme_Base # Mc KAWI SIGN KILLER 11F43..11F4F ; Grapheme_Base # Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL 11F50..11F59 ; Grapheme_Base # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE 11FB0 ; Grapheme_Base # Lo LISU LETTER YHA @@ -12293,7 +12569,11 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 12FF1..12FF2 ; Grapheme_Base # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..1342F ; Grapheme_Base # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D 13441..13446 ; Grapheme_Base # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; Grapheme_Base # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; Grapheme_Base # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; Grapheme_Base # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1612A..1612C ; Grapheme_Base # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +16130..16139 ; Grapheme_Base # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16800..16A38 ; Grapheme_Base # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; Grapheme_Base # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; Grapheme_Base # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -12312,6 +12592,11 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 16B5B..16B61 ; Grapheme_Base # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS 16B63..16B77 ; Grapheme_Base # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; Grapheme_Base # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; Grapheme_Base # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; Grapheme_Base # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; Grapheme_Base # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D6D..16D6F ; Grapheme_Base # Po [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA +16D70..16D79 ; Grapheme_Base # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; Grapheme_Base # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16E80..16E96 ; Grapheme_Base # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM 16E97..16E9A ; Grapheme_Base # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH @@ -12322,10 +12607,9 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 16FE0..16FE1 ; Grapheme_Base # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE2 ; Grapheme_Base # Po OLD CHINESE HOOK MARK 16FE3 ; Grapheme_Base # Lm OLD CHINESE ITERATION MARK -16FF0..16FF1 ; Grapheme_Base # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; Grapheme_Base # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; Grapheme_Base # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; Grapheme_Base # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18CFF..18D08 ; Grapheme_Base # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; Grapheme_Base # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Grapheme_Base # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Grapheme_Base # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -12341,13 +12625,14 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 1BC90..1BC99 ; Grapheme_Base # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9C ; Grapheme_Base # So DUPLOYAN SIGN O WITH CROSS 1BC9F ; Grapheme_Base # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1CC00..1CCEF ; Grapheme_Base # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CCF0..1CCF9 ; Grapheme_Base # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CD00..1CEB3 ; Grapheme_Base # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET 1CF50..1CFC3 ; Grapheme_Base # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; Grapheme_Base # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; Grapheme_Base # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; Grapheme_Base # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -1D166 ; Grapheme_Base # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D16A..1D16C ; Grapheme_Base # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 -1D16D ; Grapheme_Base # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT 1D183..1D184 ; Grapheme_Base # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; Grapheme_Base # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH 1D1AE..1D1EA ; Grapheme_Base # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON @@ -12421,6 +12706,10 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 1E4D0..1E4EA ; Grapheme_Base # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E4EB ; Grapheme_Base # Lm NAG MUNDARI SIGN OJOD 1E4F0..1E4F9 ; Grapheme_Base # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; Grapheme_Base # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; Grapheme_Base # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; Grapheme_Base # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E5FF ; Grapheme_Base # Po OL ONAL ABBREVIATION SIGN 1E7E0..1E7E6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Grapheme_Base # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -12500,18 +12789,18 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 1F850..1F859 ; Grapheme_Base # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; Grapheme_Base # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; Grapheme_Base # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS -1F8B0..1F8B1 ; Grapheme_Base # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST +1F8B0..1F8BB ; Grapheme_Base # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR +1F8C0..1F8C1 ; Grapheme_Base # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW 1F900..1FA53 ; Grapheme_Base # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; Grapheme_Base # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; Grapheme_Base # So [13] BALLET SHOES..CRUTCH -1FA80..1FA88 ; Grapheme_Base # So [9] YO-YO..FLUTE -1FA90..1FABD ; Grapheme_Base # So [46] RINGED PLANET..WING -1FABF..1FAC5 ; Grapheme_Base # So [7] GOOSE..PERSON WITH CROWN -1FACE..1FADB ; Grapheme_Base # So [14] MOOSE..PEA POD -1FAE0..1FAE8 ; Grapheme_Base # So [9] MELTING FACE..SHAKING FACE +1FA80..1FA89 ; Grapheme_Base # So [10] YO-YO..HARP +1FA8F..1FAC6 ; Grapheme_Base # So [56] SHOVEL..FINGERPRINT +1FACE..1FADC ; Grapheme_Base # So [15] MOOSE..ROOT VEGETABLE +1FADF..1FAE9 ; Grapheme_Base # So [11] SPLATTER..FACE WITH BAGS UNDER EYES 1FAF0..1FAF8 ; Grapheme_Base # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; Grapheme_Base # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK -1FB94..1FBCA ; Grapheme_Base # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON +1FB94..1FBEF ; Grapheme_Base # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE 1FBF0..1FBF9 ; Grapheme_Base # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; Grapheme_Base # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF 2A700..2B739 ; Grapheme_Base # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 @@ -12523,7 +12812,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME 30000..3134A ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 31350..323AF ; Grapheme_Base # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 147613 +# Total code points: 152730 # ================================================ @@ -12573,6 +12862,9 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 11235 ; Grapheme_Link # Mc KHOJKI SIGN VIRAMA 112EA ; Grapheme_Link # Mn KHUDAWADI SIGN VIRAMA 1134D ; Grapheme_Link # Mc GRANTHA SIGN VIRAMA +113CE ; Grapheme_Link # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; Grapheme_Link # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; Grapheme_Link # Mn TULU-TIGALARI CONJOINER 11442 ; Grapheme_Link # Mn NEWA SIGN VIRAMA 114C2 ; Grapheme_Link # Mn TIRHUTA SIGN VIRAMA 115BF ; Grapheme_Link # Mn SIDDHAM SIGN VIRAMA @@ -12591,8 +12883,9 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 11D97 ; Grapheme_Link # Mn GUNJALA GONDI VIRAMA 11F41 ; Grapheme_Link # Mc KAWI SIGN KILLER 11F42 ; Grapheme_Link # Mn KAWI CONJOINER +1612F ; Grapheme_Link # Mn GURUNG KHEMA SIGN THOLHOMA -# Total code points: 65 +# Total code points: 69 # ================================================ @@ -12656,9 +12949,9 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK # Indic_Conjunct_Break=Extend -0300..034E ; InCB; Extend # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW -0350..036F ; InCB; Extend # Mn [32] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING LATIN SMALL LETTER X +0300..036F ; InCB; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X 0483..0487 ; InCB; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; InCB; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN 0591..05BD ; InCB; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG 05BF ; InCB; Extend # Mn HEBREW POINT RAFE 05C1..05C2 ; InCB; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT @@ -12673,6 +12966,7 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 06EA..06ED ; InCB; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM 0711 ; InCB; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH 0730..074A ; InCB; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; InCB; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN 07EB..07F3 ; InCB; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE 07FD ; InCB; Extend # Mn NKO DANTAYALAN 0816..0819 ; InCB; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH @@ -12680,55 +12974,160 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 0825..0827 ; InCB; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; InCB; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; InCB; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -0898..089F ; InCB; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; InCB; Extend # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08CA..08E1 ; InCB; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA -08E3..08FF ; InCB; Extend # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA +08E3..0902 ; InCB; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; InCB; Extend # Mn DEVANAGARI VOWEL SIGN OE 093C ; InCB; Extend # Mn DEVANAGARI SIGN NUKTA -0951..0954 ; InCB; Extend # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT +0941..0948 ; InCB; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0951..0957 ; InCB; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; InCB; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; InCB; Extend # Mn BENGALI SIGN CANDRABINDU 09BC ; InCB; Extend # Mn BENGALI SIGN NUKTA +09BE ; InCB; Extend # Mc BENGALI VOWEL SIGN AA +09C1..09C4 ; InCB; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09D7 ; InCB; Extend # Mc BENGALI AU LENGTH MARK +09E2..09E3 ; InCB; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL 09FE ; InCB; Extend # Mn BENGALI SANDHI MARK +0A01..0A02 ; InCB; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI 0A3C ; InCB; Extend # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; InCB; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; InCB; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; InCB; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; InCB; Extend # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; InCB; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; InCB; Extend # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; InCB; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA 0ABC ; InCB; Extend # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; InCB; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; InCB; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AE2..0AE3 ; InCB; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; InCB; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; InCB; Extend # Mn ORIYA SIGN CANDRABINDU 0B3C ; InCB; Extend # Mn ORIYA SIGN NUKTA +0B3E ; InCB; Extend # Mc ORIYA VOWEL SIGN AA +0B3F ; InCB; Extend # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; InCB; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B55..0B56 ; InCB; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; InCB; Extend # Mc ORIYA AU LENGTH MARK +0B62..0B63 ; InCB; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; InCB; Extend # Mn TAMIL SIGN ANUSVARA +0BBE ; InCB; Extend # Mc TAMIL VOWEL SIGN AA +0BC0 ; InCB; Extend # Mn TAMIL VOWEL SIGN II +0BCD ; InCB; Extend # Mn TAMIL SIGN VIRAMA +0BD7 ; InCB; Extend # Mc TAMIL AU LENGTH MARK +0C00 ; InCB; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; InCB; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE 0C3C ; InCB; Extend # Mn TELUGU SIGN NUKTA +0C3E..0C40 ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4C ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU 0C55..0C56 ; InCB; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; InCB; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; InCB; Extend # Mn KANNADA SIGN CANDRABINDU 0CBC ; InCB; Extend # Mn KANNADA SIGN NUKTA +0CBF ; InCB; Extend # Mn KANNADA VOWEL SIGN I +0CC0 ; InCB; Extend # Mc KANNADA VOWEL SIGN II +0CC2 ; InCB; Extend # Mc KANNADA VOWEL SIGN UU +0CC6 ; InCB; Extend # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; InCB; Extend # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; InCB; Extend # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; InCB; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; InCB; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CE2..0CE3 ; InCB; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; InCB; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU 0D3B..0D3C ; InCB; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA -0E38..0E3A ; InCB; Extend # Mn [3] THAI CHARACTER SARA U..THAI CHARACTER PHINTHU -0E48..0E4B ; InCB; Extend # Mn [4] THAI CHARACTER MAI EK..THAI CHARACTER MAI CHATTAWA -0EB8..0EBA ; InCB; Extend # Mn [3] LAO VOWEL SIGN U..LAO SIGN PALI VIRAMA -0EC8..0ECB ; InCB; Extend # Mn [4] LAO TONE MAI EK..LAO TONE MAI CATAWA +0D3E ; InCB; Extend # Mc MALAYALAM VOWEL SIGN AA +0D41..0D44 ; InCB; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D57 ; InCB; Extend # Mc MALAYALAM AU LENGTH MARK +0D62..0D63 ; InCB; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; InCB; Extend # Mn SINHALA SIGN CANDRABINDU +0DCA ; InCB; Extend # Mn SINHALA SIGN AL-LAKUNA +0DCF ; InCB; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA +0DD2..0DD4 ; InCB; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; InCB; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DDF ; InCB; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA +0E31 ; InCB; Extend # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; InCB; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; InCB; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; InCB; Extend # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; InCB; Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECE ; InCB; Extend # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN 0F18..0F19 ; InCB; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS 0F35 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA 0F37 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS 0F39 ; InCB; Extend # Mn TIBETAN MARK TSA -PHRU -0F71..0F72 ; InCB; Extend # Mn [2] TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I -0F74 ; InCB; Extend # Mn TIBETAN VOWEL SIGN U -0F7A..0F7D ; InCB; Extend # Mn [4] TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN OO -0F80 ; InCB; Extend # Mn TIBETAN VOWEL SIGN REVERSED I -0F82..0F84 ; InCB; Extend # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA +0F71..0F7E ; InCB; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; InCB; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA 0F86..0F87 ; InCB; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; InCB; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; InCB; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA 0FC6 ; InCB; Extend # Mn TIBETAN SYMBOL PADMA GDAN -1037 ; InCB; Extend # Mn MYANMAR SIGN DOT BELOW +102D..1030 ; InCB; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; InCB; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW 1039..103A ; InCB; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; InCB; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; InCB; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; InCB; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; InCB; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; InCB; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; InCB; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y 108D ; InCB; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; InCB; Extend # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; InCB; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK -1714 ; InCB; Extend # Mn TAGALOG SIGN VIRAMA -17D2 ; InCB; Extend # Mn KHMER SIGN COENG +1712..1714 ; InCB; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; InCB; Extend # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; InCB; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; InCB; Extend # Mc HANUNOO SIGN PAMUDPOD +1752..1753 ; InCB; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; InCB; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; InCB; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; InCB; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; InCB; Extend # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; InCB; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; InCB; Extend # Mn KHMER SIGN ATTHACAN +180B..180D ; InCB; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; InCB; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1885..1886 ; InCB; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; InCB; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; InCB; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; InCB; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; InCB; Extend # Mn LIMBU SMALL LETTER ANUSVARA 1939..193B ; InCB; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I 1A17..1A18 ; InCB; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; InCB; Extend # Mn BUGINESE VOWEL SIGN AE +1A56 ; InCB; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; InCB; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA 1A60 ; InCB; Extend # Mn TAI THAM SIGN SAKOT -1A75..1A7C ; InCB; Extend # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN +1A62 ; InCB; Extend # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; InCB; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; InCB; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN 1A7F ; InCB; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; InCB; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; InCB; Extend # Me COMBINING PARENTHESES OVERLAY 1ABF..1ACE ; InCB; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1B00..1B03 ; InCB; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; InCB; Extend # Mn BALINESE SIGN REREKAN +1B35 ; InCB; Extend # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; InCB; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; InCB; Extend # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; InCB; Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B3D ; InCB; Extend # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B42 ; InCB; Extend # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; InCB; Extend # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG 1B6B..1B73 ; InCB; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG -1BAB ; InCB; Extend # Mn SUNDANESE SIGN VIRAMA +1B80..1B81 ; InCB; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; InCB; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; InCB; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; InCB; Extend # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; InCB; Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA 1BE6 ; InCB; Extend # Mn BATAK SIGN TOMPI -1C37 ; InCB; Extend # Mn LEPCHA SIGN NUKTA +1BE8..1BE9 ; InCB; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; InCB; Extend # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; InCB; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; InCB; Extend # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C2C..1C33 ; InCB; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; InCB; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA 1CD0..1CD2 ; InCB; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA 1CD4..1CE0 ; InCB; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA 1CE2..1CE8 ; InCB; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL @@ -12738,7 +13137,9 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 1DC0..1DFF ; InCB; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200D ; InCB; Extend # Cf ZERO WIDTH JOINER 20D0..20DC ; InCB; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; InCB; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; InCB; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; InCB; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE 20E5..20F0 ; InCB; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE 2CEF..2CF1 ; InCB; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS 2D7F ; InCB; Extend # Mn TIFINAGH CONSONANT JOINER @@ -12747,73 +13148,198 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK 302E..302F ; InCB; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK 3099..309A ; InCB; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK A66F ; InCB; Extend # Mn COMBINING CYRILLIC VZMET +A670..A672 ; InCB; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN A674..A67D ; InCB; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK A69E..A69F ; InCB; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E A6F0..A6F1 ; InCB; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; InCB; Extend # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; InCB; Extend # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; InCB; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; InCB; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E A82C ; InCB; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; InCB; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU A8E0..A8F1 ; InCB; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA -A92B..A92D ; InCB; Extend # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU +A8FF ; InCB; Extend # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; InCB; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; InCB; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A953 ; InCB; Extend # Mc REJANG VIRAMA +A980..A982 ; InCB; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR A9B3 ; InCB; Extend # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; InCB; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; InCB; Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9C0 ; InCB; Extend # Mc JAVANESE PANGKON +A9E5 ; InCB; Extend # Mn MYANMAR SIGN SHAN SAW +AA29..AA2E ; InCB; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; InCB; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; InCB; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; InCB; Extend # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; InCB; Extend # Mn CHAM CONSONANT SIGN FINAL M +AA7C ; InCB; Extend # Mn MYANMAR SIGN TAI LAING TONE-2 AAB0 ; InCB; Extend # Mn TAI VIET MAI KANG AAB2..AAB4 ; InCB; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U AAB7..AAB8 ; InCB; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA AABE..AABF ; InCB; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK AAC1 ; InCB; Extend # Mn TAI VIET TONE MAI THO +AAEC..AAED ; InCB; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI AAF6 ; InCB; Extend # Mn MEETEI MAYEK VIRAMA +ABE5 ; InCB; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; InCB; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP ABED ; InCB; Extend # Mn MEETEI MAYEK APUN IYEK FB1E ; InCB; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; InCB; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE20..FE2F ; InCB; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FF9E..FF9F ; InCB; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK 101FD ; InCB; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE 102E0 ; InCB; Extend # Mn COPTIC EPACT THOUSANDS MARK 10376..1037A ; InCB; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII -10A0D ; InCB; Extend # Mn KHAROSHTHI SIGN DOUBLE RING BELOW -10A0F ; InCB; Extend # Mn KHAROSHTHI SIGN VISARGA +10A01..10A03 ; InCB; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; InCB; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; InCB; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA 10A38..10A3A ; InCB; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW 10A3F ; InCB; Extend # Mn KHAROSHTHI VIRAMA 10AE5..10AE6 ; InCB; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW 10D24..10D27 ; InCB; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D69..10D6D ; InCB; Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; InCB; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFD..10EFF ; InCB; Extend # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EFC..10EFF ; InCB; Extend # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; InCB; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; InCB; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; InCB; Extend # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; InCB; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA 11070 ; InCB; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA -1107F ; InCB; Extend # Mn BRAHMI NUMBER JOINER -110BA ; InCB; Extend # Mn KAITHI SIGN NUKTA +11073..11074 ; InCB; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; InCB; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; InCB; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; InCB; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; InCB; Extend # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; InCB; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA -11133..11134 ; InCB; Extend # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA +11127..1112B ; InCB; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; InCB; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA 11173 ; InCB; Extend # Mn MAHAJANI SIGN NUKTA -111CA ; InCB; Extend # Mn SHARADA SIGN NUKTA -11236 ; InCB; Extend # Mn KHOJKI SIGN NUKTA -112E9..112EA ; InCB; Extend # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA +11180..11181 ; InCB; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; InCB; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C0 ; InCB; Extend # Mc SHARADA SIGN VIRAMA +111C9..111CC ; InCB; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; InCB; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; InCB; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; InCB; Extend # Mn KHOJKI SIGN ANUSVARA +11235 ; InCB; Extend # Mc KHOJKI SIGN VIRAMA +11236..11237 ; InCB; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; InCB; Extend # Mn KHOJKI SIGN SUKUN +11241 ; InCB; Extend # Mn KHOJKI VOWEL SIGN VOCALIC R +112DF ; InCB; Extend # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; InCB; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; InCB; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU 1133B..1133C ; InCB; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133E ; InCB; Extend # Mc GRANTHA VOWEL SIGN AA +11340 ; InCB; Extend # Mn GRANTHA VOWEL SIGN II +1134D ; InCB; Extend # Mc GRANTHA SIGN VIRAMA +11357 ; InCB; Extend # Mc GRANTHA AU LENGTH MARK 11366..1136C ; InCB; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; InCB; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113B8 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN AA +113BB..113C0 ; InCB; Extend # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; InCB; Extend # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK +113CE ; InCB; Extend # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; InCB; Extend # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; InCB; Extend # Mn TULU-TIGALARI CONJOINER +113D2 ; InCB; Extend # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; InCB; Extend # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11438..1143F ; InCB; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; InCB; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA 11446 ; InCB; Extend # Mn NEWA SIGN NUKTA 1145E ; InCB; Extend # Mn NEWA SANDHI MARK -114C3 ; InCB; Extend # Mn TIRHUTA SIGN NUKTA -115C0 ; InCB; Extend # Mn SIDDHAM SIGN NUKTA +114B0 ; InCB; Extend # Mc TIRHUTA VOWEL SIGN AA +114B3..114B8 ; InCB; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; InCB; Extend # Mn TIRHUTA VOWEL SIGN SHORT E +114BD ; InCB; Extend # Mc TIRHUTA VOWEL SIGN SHORT O +114BF..114C0 ; InCB; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; InCB; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115AF ; InCB; Extend # Mc SIDDHAM VOWEL SIGN AA +115B2..115B5 ; InCB; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; InCB; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; InCB; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; InCB; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; InCB; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; InCB; Extend # Mn MODI SIGN ANUSVARA +1163F..11640 ; InCB; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; InCB; Extend # Mn TAKRI SIGN ANUSVARA +116AD ; InCB; Extend # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; InCB; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; InCB; Extend # Mc TAKRI SIGN VIRAMA 116B7 ; InCB; Extend # Mn TAKRI SIGN NUKTA -1172B ; InCB; Extend # Mn AHOM SIGN KILLER -1183A ; InCB; Extend # Mn DOGRA SIGN NUKTA +1171D ; InCB; Extend # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; InCB; Extend # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; InCB; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; InCB; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; InCB; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; InCB; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +11930 ; InCB; Extend # Mc DIVES AKURU VOWEL SIGN AA +1193B..1193C ; InCB; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; InCB; Extend # Mc DIVES AKURU SIGN HALANTA 1193E ; InCB; Extend # Mn DIVES AKURU VIRAMA 11943 ; InCB; Extend # Mn DIVES AKURU SIGN NUKTA -11A34 ; InCB; Extend # Mn ZANABAZAR SQUARE SIGN VIRAMA +119D4..119D7 ; InCB; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; InCB; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; InCB; Extend # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; InCB; Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; InCB; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; InCB; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA 11A47 ; InCB; Extend # Mn ZANABAZAR SQUARE SUBJOINER -11A99 ; InCB; Extend # Mn SOYOMBO SUBJOINER -11D42 ; InCB; Extend # Mn MASARAM GONDI SIGN NUKTA -11D44..11D45 ; InCB; Extend # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA +11A51..11A56 ; InCB; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; InCB; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; InCB; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; InCB; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11C30..11C36 ; InCB; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; InCB; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; InCB; Extend # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; InCB; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; InCB; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; InCB; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; InCB; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; InCB; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; InCB; Extend # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; InCB; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; InCB; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; InCB; Extend # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; InCB; Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; InCB; Extend # Mn GUNJALA GONDI SIGN ANUSVARA 11D97 ; InCB; Extend # Mn GUNJALA GONDI VIRAMA +11EF3..11EF4 ; InCB; Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; InCB; Extend # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; InCB; Extend # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; InCB; Extend # Mn KAWI VOWEL SIGN EU +11F41 ; InCB; Extend # Mc KAWI SIGN KILLER 11F42 ; InCB; Extend # Mn KAWI CONJOINER +11F5A ; InCB; Extend # Mn KAWI SIGN NUKTA +13440 ; InCB; Extend # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; InCB; Extend # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; InCB; Extend # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; InCB; Extend # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA 16AF0..16AF4 ; InCB; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16B30..16B36 ; InCB; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM -1BC9E ; InCB; Extend # Mn DUPLOYAN DOUBLE MARK -1D165 ; InCB; Extend # Mc MUSICAL SYMBOL COMBINING STEM +16F4F ; InCB; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; InCB; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16FE4 ; InCB; Extend # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; InCB; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1BC9D..1BC9E ; InCB; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; InCB; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; InCB; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165..1D166 ; InCB; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; InCB; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16E..1D172 ; InCB; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 +1D16D..1D172 ; InCB; Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 1D17B..1D182 ; InCB; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; InCB; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; InCB; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO 1D242..1D244 ; InCB; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; InCB; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; InCB; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; InCB; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; InCB; Extend # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; InCB; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; InCB; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 1E000..1E006 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; InCB; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -12824,9 +13350,13 @@ FE20..FE2F ; InCB; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING 1E2AE ; InCB; Extend # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; InCB; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; InCB; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; InCB; Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E8D0..1E8D6 ; InCB; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; InCB; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1F3FB..1F3FF ; InCB; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +E0020..E007F ; InCB; Extend # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; InCB; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 884 +# Total code points: 2192 # EOF diff --git a/localedata/unicode-gen/EastAsianWidth.txt b/localedata/unicode-gen/EastAsianWidth.txt index 02df4df475..99f7a31ea5 100644 --- a/localedata/unicode-gen/EastAsianWidth.txt +++ b/localedata/unicode-gen/EastAsianWidth.txt @@ -1,8 +1,8 @@ -# EastAsianWidth-15.1.0.txt -# Date: 2023-07-28, 23:34:08 GMT -# © 2023 Unicode®, Inc. +# EastAsianWidth-16.0.0.txt +# Date: 2024-04-30, 21:48:20 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see https://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see https://www.unicode.org/reports/tr44/ @@ -334,7 +334,7 @@ 0888 ; N # Sk ARABIC RAISED ROUND DOT 0889..088E ; N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL 0890..0891 ; N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE -0898..089F ; N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +0897..089F ; N # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; N # Lm ARABIC SMALL FARSI YEH 08CA..08E1 ; N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA @@ -819,12 +819,13 @@ 1B42 ; N # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44 ; N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG 1B45..1B4C ; N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B4E..1B4F ; N # Po [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN 1B50..1B59 ; N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; N # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B6B..1B73 ; N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B74..1B7C ; N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING -1B7D..1B7E ; N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG +1B7D..1B7F ; N # Po [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK 1B80..1B81 ; N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82 ; N # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -859,7 +860,7 @@ 1C5A..1C77 ; N # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH 1C78..1C7D ; N # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD 1C7E..1C7F ; N # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD -1C80..1C88 ; N # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C80..1C8A ; N # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE 1C90..1CBA ; N # Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN 1CBD..1CBF ; N # Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1CC0..1CC7 ; N # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA @@ -1142,7 +1143,7 @@ 23F1..23F2 ; N # So [2] STOPWATCH..TIMER CLOCK 23F3 ; W # So HOURGLASS WITH FLOWING SAND 23F4..23FF ; N # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL -2400..2426 ; N # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO +2400..2429 ; N # So [42] SYMBOL FOR NULL..SYMBOL FOR DELETE MEDIUM SHADE FORM 2440..244A ; N # So [11] OCR HOOK..OCR DOUBLE BACKSLASH 2460..249B ; A # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP 249C..24E9 ; A # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z @@ -1195,7 +1196,9 @@ 261C ; A # So WHITE LEFT POINTING INDEX 261D ; N # So WHITE UP POINTING INDEX 261E ; A # So WHITE RIGHT POINTING INDEX -261F..263F ; N # So [33] WHITE DOWN POINTING INDEX..MERCURY +261F..262F ; N # So [17] WHITE DOWN POINTING INDEX..YIN YANG +2630..2637 ; W # So [8] TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH +2638..263F ; N # So [8] WHEEL OF DHARMA..MERCURY 2640 ; A # So FEMALE SIGN 2641 ; N # So EARTH 2642 ; A # So MALE SIGN @@ -1213,7 +1216,9 @@ 266F ; A # Sm MUSIC SHARP SIGN 2670..267E ; N # So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN 267F ; W # So WHEELCHAIR SYMBOL -2680..2692 ; N # So [19] DIE FACE-1..HAMMER AND PICK +2680..2689 ; N # So [10] DIE FACE-1..BLACK CIRCLE WITH TWO WHITE DOTS +268A..268F ; W # So [6] MONOGRAM FOR YANG..DIGRAM FOR GREATER YIN +2690..2692 ; N # So [3] WHITE FLAG..HAMMER AND PICK 2693 ; W # So ANCHOR 2694..269D ; N # So [10] CROSSED SWORDS..OUTLINED WHITE STAR 269E..269F ; A # So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT @@ -1487,7 +1492,7 @@ 3192..3195 ; W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK 3196..319F ; W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK 31A0..31BF ; W # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH -31C0..31E3 ; W # So [36] CJK STROKE T..CJK STROKE Q +31C0..31E5 ; W # So [38] CJK STROKE T..CJK STROKE SZP 31EF ; W # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION 31F0..31FF ; W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3200..321E ; W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU @@ -1503,7 +1508,7 @@ 32C0..32FF ; W # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA 3300..33FF ; W # So [256] SQUARE APAATO..SQUARE GAL 3400..4DBF ; W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4DC0..4DFF ; N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +4DC0..4DFF ; W # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION 4E00..9FFF ; W # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF A000..A014 ; W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E A015 ; W # Lm YI SYLLABLE WU @@ -1543,10 +1548,10 @@ A788 ; N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CA ; N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; N # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE A7D0..A7D1 ; N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; N # Ll LATIN SMALL LETTER DOUBLE THORN -A7D5..A7D9 ; N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7D5..A7DC ; N # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F2..A7F4 ; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -1870,6 +1875,7 @@ FFFD ; A # So REPLACEMENT CHARACTER 105A3..105B1 ; N # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE 105B3..105B9 ; N # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE 105BB..105BC ; N # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; N # Lo [52] TODHRI LETTER A..TODHRI LETTER OO 10600..10736 ; N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 @@ -1942,12 +1948,23 @@ FFFD ; A # So REPLACEMENT CHARACTER 10D00..10D23 ; N # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA 10D24..10D27 ; N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D30..10D39 ; N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; N # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; N # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; N # Lm GARAY VOWEL LENGTH MARK +10D4F ; N # Lo GARAY SUKUN +10D50..10D65 ; N # Lu [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69..10D6D ; N # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6E ; N # Pd GARAY HYPHEN +10D6F ; N # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; N # Ll [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10D8E..10D8F ; N # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN 10E60..10E7E ; N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS 10E80..10EA9 ; N # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EAB..10EAC ; N # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EAD ; N # Pd YEZIDI HYPHENATION MARK 10EB0..10EB1 ; N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE -10EFD..10EFF ; N # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10EC2..10EC4 ; N # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EFC..10EFF ; N # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F1D..10F26 ; N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF 10F27 ; N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH @@ -2064,6 +2081,26 @@ FFFD ; A # So REPLACEMENT CHARACTER 11362..11363 ; N # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL 11366..1136C ; N # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; N # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11380..11389 ; N # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; N # Lo TULU-TIGALARI LETTER EE +1138E ; N # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; N # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; N # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; N # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; N # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; N # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; N # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; N # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; N # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CE ; N # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; N # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; N # Mn TULU-TIGALARI CONJOINER +113D1 ; N # Lo TULU-TIGALARI REPHA +113D2 ; N # Mn TULU-TIGALARI GEMINATION MARK +113D3 ; N # Lo TULU-TIGALARI SIGN PLUTA +113D4..113D5 ; N # Po [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA +113D7..113D8 ; N # Po [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA +113E1..113E2 ; N # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA 11400..11434 ; N # Lo [53] NEWA LETTER A..NEWA LETTER HA 11435..11437 ; N # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II 11438..1143F ; N # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI @@ -2123,8 +2160,11 @@ FFFD ; A # So REPLACEMENT CHARACTER 116B8 ; N # Lo TAKRI LETTER ARCHAIC KHA 116B9 ; N # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; N # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE 11700..1171A ; N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA -1171D..1171F ; N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +1171D ; N # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; N # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; N # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA 11720..11721 ; N # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11722..11725 ; N # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11726 ; N # Mc AHOM VOWEL SIGN E @@ -2195,6 +2235,9 @@ FFFD ; A # So REPLACEMENT CHARACTER 11AB0..11ABF ; N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA 11AC0..11AF8 ; N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL 11B00..11B09 ; N # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11BC0..11BE0 ; N # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BE1 ; N # Po SUNUWAR SIGN PVO +11BF0..11BF9 ; N # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; N # Mc BHAIKSUKI VOWEL SIGN AA @@ -2253,6 +2296,7 @@ FFFD ; A # So REPLACEMENT CHARACTER 11F42 ; N # Mn KAWI CONJOINER 11F43..11F4F ; N # Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL 11F50..11F59 ; N # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11F5A ; N # Mn KAWI SIGN NUKTA 11FB0 ; N # Lo LISU LETTER YHA 11FC0..11FD4 ; N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH 11FD5..11FDC ; N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI @@ -2270,7 +2314,13 @@ FFFD ; A # So REPLACEMENT CHARACTER 13440 ; N # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY 13441..13446 ; N # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN 13447..13455 ; N # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +13460..143FA ; N # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA 14400..14646 ; N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; N # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; N # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; N # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612F ; N # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16130..16139 ; N # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16800..16A38 ; N # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; N # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -2291,6 +2341,11 @@ FFFD ; A # So REPLACEMENT CHARACTER 16B5B..16B61 ; N # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS 16B63..16B77 ; N # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS 16B7D..16B8F ; N # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; N # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; N # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; N # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D6D..16D6F ; N # Po [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA +16D70..16D79 ; N # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16E80..16E96 ; N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM 16E97..16E9A ; N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH @@ -2308,6 +2363,7 @@ FFFD ; A # So REPLACEMENT CHARACTER 17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18AFF ; W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18B00..18CD5 ; W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF ; W # Lo KHITAN SMALL SCRIPT CHARACTER-18CFF 18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 1AFF0..1AFF3 ; W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 @@ -2327,6 +2383,9 @@ FFFD ; A # So REPLACEMENT CHARACTER 1BC9D..1BC9E ; N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BC9F ; N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1BCA0..1BCA3 ; N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CC00..1CCEF ; N # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CCF0..1CCF9 ; N # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CD00..1CEB3 ; N # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET 1CF00..1CF2D ; N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1CF50..1CFC3 ; N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK @@ -2349,8 +2408,9 @@ FFFD ; A # So REPLACEMENT CHARACTER 1D245 ; N # So GREEK MUSICAL LEIMMA 1D2C0..1D2D3 ; N # No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN 1D2E0..1D2F3 ; N # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN -1D300..1D356 ; N # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING -1D360..1D378 ; N # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE +1D300..1D356 ; W # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D360..1D376 ; W # No [23] COUNTING ROD UNIT DIGIT ONE..IDEOGRAPHIC TALLY MARK FIVE +1D377..1D378 ; N # No [2] TALLY MARK ONE..TALLY MARK FIVE 1D400..1D454 ; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; N # Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -2431,6 +2491,11 @@ FFFD ; A # So REPLACEMENT CHARACTER 1E4EB ; N # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; N # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E4F0..1E4F9 ; N # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; N # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5EE..1E5EF ; N # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E5F0 ; N # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; N # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E5FF ; N # Po OL ONAL ABBREVIATION SIGN 1E7E0..1E7E6 ; N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2574,7 +2639,8 @@ FFFD ; A # So REPLACEMENT CHARACTER 1F850..1F859 ; N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS -1F8B0..1F8B1 ; N # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST +1F8B0..1F8BB ; N # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR +1F8C0..1F8C1 ; N # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW 1F900..1F90B ; N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT 1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER 1F93B ; N # So MODERN PENTATHLON @@ -2584,14 +2650,13 @@ FFFD ; A # So REPLACEMENT CHARACTER 1FA00..1FA53 ; N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; W # So [13] BALLET SHOES..CRUTCH -1FA80..1FA88 ; W # So [9] YO-YO..FLUTE -1FA90..1FABD ; W # So [46] RINGED PLANET..WING -1FABF..1FAC5 ; W # So [7] GOOSE..PERSON WITH CROWN -1FACE..1FADB ; W # So [14] MOOSE..PEA POD -1FAE0..1FAE8 ; W # So [9] MELTING FACE..SHAKING FACE +1FA80..1FA89 ; W # So [10] YO-YO..HARP +1FA8F..1FAC6 ; W # So [56] SHOVEL..FINGERPRINT +1FACE..1FADC ; W # So [15] MOOSE..ROOT VEGETABLE +1FADF..1FAE9 ; W # So [11] SPLATTER..FACE WITH BAGS UNDER EYES 1FAF0..1FAF8 ; W # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK -1FB94..1FBCA ; N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON +1FB94..1FBEF ; N # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE 1FBF0..1FBF9 ; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF 2A6E0..2A6FF ; W # Cn [32] <reserved-2A6E0>..<reserved-2A6FF> diff --git a/localedata/unicode-gen/HangulSyllableType.txt b/localedata/unicode-gen/HangulSyllableType.txt index 98dafb10f1..56b5eea076 100644 --- a/localedata/unicode-gen/HangulSyllableType.txt +++ b/localedata/unicode-gen/HangulSyllableType.txt @@ -1,8 +1,8 @@ -# HangulSyllableType-15.1.0.txt -# Date: 2023-01-05, 20:34:42 GMT -# © 2023 Unicode®, Inc. +# HangulSyllableType-16.0.0.txt +# Date: 2024-04-30, 21:48:21 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see https://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see https://www.unicode.org/reports/tr44/ diff --git a/localedata/unicode-gen/Makefile b/localedata/unicode-gen/Makefile index 48cefc2b8d..c0613110cc 100644 --- a/localedata/unicode-gen/Makefile +++ b/localedata/unicode-gen/Makefile @@ -36,7 +36,7 @@ # files for making modifications. -UNICODE_VERSION = 15.1.0 +UNICODE_VERSION = 16.0.0 PYTHON3 = python3 WGET = wget diff --git a/localedata/unicode-gen/UnicodeData.txt b/localedata/unicode-gen/UnicodeData.txt index bdcc41850d..64258a3739 100644 --- a/localedata/unicode-gen/UnicodeData.txt +++ b/localedata/unicode-gen/UnicodeData.txt @@ -409,7 +409,7 @@ 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D -019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; +019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;A7DC;;A7DC 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 @@ -610,7 +610,7 @@ 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 -0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; +0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;A7CB;;A7CB 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; @@ -2123,6 +2123,7 @@ 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;; 0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; 0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; 089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; @@ -6213,6 +6214,8 @@ 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; 1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; +1B4E;BALINESE INVERTED CARIK SIKI;Po;0;L;;;;;N;;;;; +1B4F;BALINESE INVERTED CARIK PAREREN;Po;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6260,6 +6263,7 @@ 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; 1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; 1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; +1B7F;BALINESE PANTI BAWAK;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; @@ -6511,6 +6515,8 @@ 1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462 1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A +1C89;CYRILLIC CAPITAL LETTER TJE;Lu;0;L;;;;;N;;;;1C8A; +1C8A;CYRILLIC SMALL LETTER TJE;Ll;0;L;;;;;N;;;1C89;;1C89 1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0; 1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1; 1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2; @@ -7933,7 +7939,7 @@ 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; -226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; +226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;Y;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; @@ -8375,6 +8381,9 @@ 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; +2427;SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; +2428;SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; +2429;SYMBOL FOR DELETE MEDIUM SHADE FORM;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; @@ -11709,6 +11718,8 @@ 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31E4;CJK STROKE HXG;So;0;ON;;;;;N;;;;; +31E5;CJK STROKE SZP;So;0;ON;;;;;N;;;;; 31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; @@ -14260,6 +14271,9 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 +A7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264; +A7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD; +A7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; @@ -14268,6 +14282,9 @@ A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 +A7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB; +A7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA +A7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B; A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L;<super> 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L;<super> 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L;<super> 0051;;;;N;;;;; @@ -18001,6 +18018,58 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 +105C0;TODHRI LETTER A;Lo;0;L;;;;;N;;;;; +105C1;TODHRI LETTER AS;Lo;0;L;;;;;N;;;;; +105C2;TODHRI LETTER BA;Lo;0;L;;;;;N;;;;; +105C3;TODHRI LETTER MBA;Lo;0;L;;;;;N;;;;; +105C4;TODHRI LETTER CA;Lo;0;L;;;;;N;;;;; +105C5;TODHRI LETTER CHA;Lo;0;L;;;;;N;;;;; +105C6;TODHRI LETTER DA;Lo;0;L;;;;;N;;;;; +105C7;TODHRI LETTER NDA;Lo;0;L;;;;;N;;;;; +105C8;TODHRI LETTER DHA;Lo;0;L;;;;;N;;;;; +105C9;TODHRI LETTER EI;Lo;0;L;105D2 0307;;;;N;;;;; +105CA;TODHRI LETTER E;Lo;0;L;;;;;N;;;;; +105CB;TODHRI LETTER FA;Lo;0;L;;;;;N;;;;; +105CC;TODHRI LETTER GA;Lo;0;L;;;;;N;;;;; +105CD;TODHRI LETTER NGA;Lo;0;L;;;;;N;;;;; +105CE;TODHRI LETTER GJA;Lo;0;L;;;;;N;;;;; +105CF;TODHRI LETTER NGJA;Lo;0;L;;;;;N;;;;; +105D0;TODHRI LETTER HA;Lo;0;L;;;;;N;;;;; +105D1;TODHRI LETTER HJA;Lo;0;L;;;;;N;;;;; +105D2;TODHRI LETTER I;Lo;0;L;;;;;N;;;;; +105D3;TODHRI LETTER JA;Lo;0;L;;;;;N;;;;; +105D4;TODHRI LETTER KA;Lo;0;L;;;;;N;;;;; +105D5;TODHRI LETTER LA;Lo;0;L;;;;;N;;;;; +105D6;TODHRI LETTER LLA;Lo;0;L;;;;;N;;;;; +105D7;TODHRI LETTER MA;Lo;0;L;;;;;N;;;;; +105D8;TODHRI LETTER NA;Lo;0;L;;;;;N;;;;; +105D9;TODHRI LETTER NJAN;Lo;0;L;;;;;N;;;;; +105DA;TODHRI LETTER O;Lo;0;L;;;;;N;;;;; +105DB;TODHRI LETTER PA;Lo;0;L;;;;;N;;;;; +105DC;TODHRI LETTER QA;Lo;0;L;;;;;N;;;;; +105DD;TODHRI LETTER RA;Lo;0;L;;;;;N;;;;; +105DE;TODHRI LETTER RRA;Lo;0;L;;;;;N;;;;; +105DF;TODHRI LETTER SA;Lo;0;L;;;;;N;;;;; +105E0;TODHRI LETTER SHA;Lo;0;L;;;;;N;;;;; +105E1;TODHRI LETTER SHTA;Lo;0;L;;;;;N;;;;; +105E2;TODHRI LETTER TA;Lo;0;L;;;;;N;;;;; +105E3;TODHRI LETTER THA;Lo;0;L;;;;;N;;;;; +105E4;TODHRI LETTER U;Lo;0;L;105DA 0307;;;;N;;;;; +105E5;TODHRI LETTER VA;Lo;0;L;;;;;N;;;;; +105E6;TODHRI LETTER XA;Lo;0;L;;;;;N;;;;; +105E7;TODHRI LETTER NXA;Lo;0;L;;;;;N;;;;; +105E8;TODHRI LETTER XHA;Lo;0;L;;;;;N;;;;; +105E9;TODHRI LETTER NXHA;Lo;0;L;;;;;N;;;;; +105EA;TODHRI LETTER Y;Lo;0;L;;;;;N;;;;; +105EB;TODHRI LETTER JY;Lo;0;L;;;;;N;;;;; +105EC;TODHRI LETTER ZA;Lo;0;L;;;;;N;;;;; +105ED;TODHRI LETTER ZHA;Lo;0;L;;;;;N;;;;; +105EE;TODHRI LETTER GHA;Lo;0;L;;;;;N;;;;; +105EF;TODHRI LETTER STA;Lo;0;L;;;;;N;;;;; +105F0;TODHRI LETTER SKAN;Lo;0;L;;;;;N;;;;; +105F1;TODHRI LETTER KHA;Lo;0;L;;;;;N;;;;; +105F2;TODHRI LETTER PSA;Lo;0;L;;;;;N;;;;; +105F3;TODHRI LETTER OO;Lo;0;L;;;;;N;;;;; 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; @@ -19322,6 +19391,75 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +10D40;GARAY DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; +10D41;GARAY DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; +10D42;GARAY DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; +10D43;GARAY DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; +10D44;GARAY DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; +10D45;GARAY DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; +10D46;GARAY DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; +10D47;GARAY DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; +10D48;GARAY DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; +10D49;GARAY DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +10D4A;GARAY VOWEL SIGN A;Lo;0;R;;;;;N;;;;; +10D4B;GARAY VOWEL SIGN I;Lo;0;R;;;;;N;;;;; +10D4C;GARAY VOWEL SIGN O;Lo;0;R;;;;;N;;;;; +10D4D;GARAY VOWEL SIGN EE;Lo;0;R;;;;;N;;;;; +10D4E;GARAY VOWEL LENGTH MARK;Lm;0;R;;;;;N;;;;; +10D4F;GARAY SUKUN;Lo;0;R;;;;;N;;;;; +10D50;GARAY CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10D70; +10D51;GARAY CAPITAL LETTER CA;Lu;0;R;;;;;N;;;;10D71; +10D52;GARAY CAPITAL LETTER MA;Lu;0;R;;;;;N;;;;10D72; +10D53;GARAY CAPITAL LETTER KA;Lu;0;R;;;;;N;;;;10D73; +10D54;GARAY CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;10D74; +10D55;GARAY CAPITAL LETTER JA;Lu;0;R;;;;;N;;;;10D75; +10D56;GARAY CAPITAL LETTER SA;Lu;0;R;;;;;N;;;;10D76; +10D57;GARAY CAPITAL LETTER WA;Lu;0;R;;;;;N;;;;10D77; +10D58;GARAY CAPITAL LETTER LA;Lu;0;R;;;;;N;;;;10D78; +10D59;GARAY CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;10D79; +10D5A;GARAY CAPITAL LETTER DA;Lu;0;R;;;;;N;;;;10D7A; +10D5B;GARAY CAPITAL LETTER XA;Lu;0;R;;;;;N;;;;10D7B; +10D5C;GARAY CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;10D7C; +10D5D;GARAY CAPITAL LETTER TA;Lu;0;R;;;;;N;;;;10D7D; +10D5E;GARAY CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;10D7E; +10D5F;GARAY CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;10D7F; +10D60;GARAY CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;10D80; +10D61;GARAY CAPITAL LETTER NA;Lu;0;R;;;;;N;;;;10D81; +10D62;GARAY CAPITAL LETTER PA;Lu;0;R;;;;;N;;;;10D82; +10D63;GARAY CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;10D83; +10D64;GARAY CAPITAL LETTER OLD KA;Lu;0;R;;;;;N;;;;10D84; +10D65;GARAY CAPITAL LETTER OLD NA;Lu;0;R;;;;;N;;;;10D85; +10D69;GARAY VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; +10D6A;GARAY CONSONANT GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +10D6B;GARAY COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10D6C;GARAY COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10D6D;GARAY CONSONANT NASALIZATION MARK;Mn;230;NSM;;;;;N;;;;; +10D6E;GARAY HYPHEN;Pd;0;ON;;;;;N;;;;; +10D6F;GARAY REDUPLICATION MARK;Lm;0;R;;;;;N;;;;; +10D70;GARAY SMALL LETTER A;Ll;0;R;;;;;N;;;10D50;;10D50 +10D71;GARAY SMALL LETTER CA;Ll;0;R;;;;;N;;;10D51;;10D51 +10D72;GARAY SMALL LETTER MA;Ll;0;R;;;;;N;;;10D52;;10D52 +10D73;GARAY SMALL LETTER KA;Ll;0;R;;;;;N;;;10D53;;10D53 +10D74;GARAY SMALL LETTER BA;Ll;0;R;;;;;N;;;10D54;;10D54 +10D75;GARAY SMALL LETTER JA;Ll;0;R;;;;;N;;;10D55;;10D55 +10D76;GARAY SMALL LETTER SA;Ll;0;R;;;;;N;;;10D56;;10D56 +10D77;GARAY SMALL LETTER WA;Ll;0;R;;;;;N;;;10D57;;10D57 +10D78;GARAY SMALL LETTER LA;Ll;0;R;;;;;N;;;10D58;;10D58 +10D79;GARAY SMALL LETTER GA;Ll;0;R;;;;;N;;;10D59;;10D59 +10D7A;GARAY SMALL LETTER DA;Ll;0;R;;;;;N;;;10D5A;;10D5A +10D7B;GARAY SMALL LETTER XA;Ll;0;R;;;;;N;;;10D5B;;10D5B +10D7C;GARAY SMALL LETTER YA;Ll;0;R;;;;;N;;;10D5C;;10D5C +10D7D;GARAY SMALL LETTER TA;Ll;0;R;;;;;N;;;10D5D;;10D5D +10D7E;GARAY SMALL LETTER RA;Ll;0;R;;;;;N;;;10D5E;;10D5E +10D7F;GARAY SMALL LETTER NYA;Ll;0;R;;;;;N;;;10D5F;;10D5F +10D80;GARAY SMALL LETTER FA;Ll;0;R;;;;;N;;;10D60;;10D60 +10D81;GARAY SMALL LETTER NA;Ll;0;R;;;;;N;;;10D61;;10D61 +10D82;GARAY SMALL LETTER PA;Ll;0;R;;;;;N;;;10D62;;10D62 +10D83;GARAY SMALL LETTER HA;Ll;0;R;;;;;N;;;10D63;;10D63 +10D84;GARAY SMALL LETTER OLD KA;Ll;0;R;;;;;N;;;10D64;;10D64 +10D85;GARAY SMALL LETTER OLD NA;Ll;0;R;;;;;N;;;10D65;;10D65 +10D8E;GARAY PLUS SIGN;Sm;0;R;;;;;N;;;;; +10D8F;GARAY MINUS SIGN;Sm;0;R;;;;;N;;;;; 10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; 10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; 10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; @@ -19400,6 +19538,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;; 10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;; +10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;; 10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; 10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; 10EFF;ARABIC SMALL LOW WORD MADDA;Mn;220;NSM;;;;;N;;;;; @@ -20264,6 +20406,86 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;; 11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;; 11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;; +11380;TULU-TIGALARI LETTER A;Lo;0;L;;;;;N;;;;; +11381;TULU-TIGALARI LETTER AA;Lo;0;L;;;;;N;;;;; +11382;TULU-TIGALARI LETTER I;Lo;0;L;;;;;N;;;;; +11383;TULU-TIGALARI LETTER II;Lo;0;L;11382 113C9;;;;N;;;;; +11384;TULU-TIGALARI LETTER U;Lo;0;L;;;;;N;;;;; +11385;TULU-TIGALARI LETTER UU;Lo;0;L;11384 113BB;;;;N;;;;; +11386;TULU-TIGALARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +11387;TULU-TIGALARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +11388;TULU-TIGALARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +11389;TULU-TIGALARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1138B;TULU-TIGALARI LETTER EE;Lo;0;L;;;;;N;;;;; +1138E;TULU-TIGALARI LETTER AI;Lo;0;L;1138B 113C2;;;;N;;;;; +11390;TULU-TIGALARI LETTER OO;Lo;0;L;;;;;N;;;;; +11391;TULU-TIGALARI LETTER AU;Lo;0;L;11390 113C9;;;;N;;;;; +11392;TULU-TIGALARI LETTER KA;Lo;0;L;;;;;N;;;;; +11393;TULU-TIGALARI LETTER KHA;Lo;0;L;;;;;N;;;;; +11394;TULU-TIGALARI LETTER GA;Lo;0;L;;;;;N;;;;; +11395;TULU-TIGALARI LETTER GHA;Lo;0;L;;;;;N;;;;; +11396;TULU-TIGALARI LETTER NGA;Lo;0;L;;;;;N;;;;; +11397;TULU-TIGALARI LETTER CA;Lo;0;L;;;;;N;;;;; +11398;TULU-TIGALARI LETTER CHA;Lo;0;L;;;;;N;;;;; +11399;TULU-TIGALARI LETTER JA;Lo;0;L;;;;;N;;;;; +1139A;TULU-TIGALARI LETTER JHA;Lo;0;L;;;;;N;;;;; +1139B;TULU-TIGALARI LETTER NYA;Lo;0;L;;;;;N;;;;; +1139C;TULU-TIGALARI LETTER TTA;Lo;0;L;;;;;N;;;;; +1139D;TULU-TIGALARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +1139E;TULU-TIGALARI LETTER DDA;Lo;0;L;;;;;N;;;;; +1139F;TULU-TIGALARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +113A0;TULU-TIGALARI LETTER NNA;Lo;0;L;;;;;N;;;;; +113A1;TULU-TIGALARI LETTER TA;Lo;0;L;;;;;N;;;;; +113A2;TULU-TIGALARI LETTER THA;Lo;0;L;;;;;N;;;;; +113A3;TULU-TIGALARI LETTER DA;Lo;0;L;;;;;N;;;;; +113A4;TULU-TIGALARI LETTER DHA;Lo;0;L;;;;;N;;;;; +113A5;TULU-TIGALARI LETTER NA;Lo;0;L;;;;;N;;;;; +113A6;TULU-TIGALARI LETTER PA;Lo;0;L;;;;;N;;;;; +113A7;TULU-TIGALARI LETTER PHA;Lo;0;L;;;;;N;;;;; +113A8;TULU-TIGALARI LETTER BA;Lo;0;L;;;;;N;;;;; +113A9;TULU-TIGALARI LETTER BHA;Lo;0;L;;;;;N;;;;; +113AA;TULU-TIGALARI LETTER MA;Lo;0;L;;;;;N;;;;; +113AB;TULU-TIGALARI LETTER YA;Lo;0;L;;;;;N;;;;; +113AC;TULU-TIGALARI LETTER RA;Lo;0;L;;;;;N;;;;; +113AD;TULU-TIGALARI LETTER LA;Lo;0;L;;;;;N;;;;; +113AE;TULU-TIGALARI LETTER VA;Lo;0;L;;;;;N;;;;; +113AF;TULU-TIGALARI LETTER SHA;Lo;0;L;;;;;N;;;;; +113B0;TULU-TIGALARI LETTER SSA;Lo;0;L;;;;;N;;;;; +113B1;TULU-TIGALARI LETTER SA;Lo;0;L;;;;;N;;;;; +113B2;TULU-TIGALARI LETTER HA;Lo;0;L;;;;;N;;;;; +113B3;TULU-TIGALARI LETTER LLA;Lo;0;L;;;;;N;;;;; +113B4;TULU-TIGALARI LETTER RRA;Lo;0;L;;;;;N;;;;; +113B5;TULU-TIGALARI LETTER LLLA;Lo;0;L;;;;;N;;;;; +113B7;TULU-TIGALARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +113B8;TULU-TIGALARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +113B9;TULU-TIGALARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +113BA;TULU-TIGALARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +113BB;TULU-TIGALARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +113BC;TULU-TIGALARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +113BD;TULU-TIGALARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +113BE;TULU-TIGALARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +113BF;TULU-TIGALARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +113C0;TULU-TIGALARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +113C2;TULU-TIGALARI VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +113C5;TULU-TIGALARI VOWEL SIGN AI;Mc;0;L;113C2 113C2;;;;N;;;;; +113C7;TULU-TIGALARI VOWEL SIGN OO;Mc;0;L;113C2 113B8;;;;N;;;;; +113C8;TULU-TIGALARI VOWEL SIGN AU;Mc;0;L;113C2 113C9;;;;N;;;;; +113C9;TULU-TIGALARI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +113CA;TULU-TIGALARI SIGN CANDRA ANUNASIKA;Mc;0;L;;;;;N;;;;; +113CC;TULU-TIGALARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +113CD;TULU-TIGALARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +113CE;TULU-TIGALARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +113CF;TULU-TIGALARI SIGN LOOPED VIRAMA;Mc;9;L;;;;;N;;;;; +113D0;TULU-TIGALARI CONJOINER;Mn;9;NSM;;;;;N;;;;; +113D1;TULU-TIGALARI REPHA;Lo;0;L;;;;;N;;;;; +113D2;TULU-TIGALARI GEMINATION MARK;Mn;0;NSM;;;;;N;;;;; +113D3;TULU-TIGALARI SIGN PLUTA;Lo;0;L;;;;;N;;;;; +113D4;TULU-TIGALARI DANDA;Po;0;L;;;;;N;;;;; +113D5;TULU-TIGALARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +113D7;TULU-TIGALARI SIGN OM PUSHPIKA;Po;0;L;;;;;N;;;;; +113D8;TULU-TIGALARI SIGN SHRII PUSHPIKA;Po;0;L;;;;;N;;;;; +113E1;TULU-TIGALARI VEDIC TONE SVARITA;Mn;0;NSM;;;;;N;;;;; +113E2;TULU-TIGALARI VEDIC TONE ANUDATTA;Mn;0;NSM;;;;;N;;;;; 11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;; 11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;; 11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;; @@ -20695,6 +20917,26 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +116D0;MYANMAR PAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +116D1;MYANMAR PAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +116D2;MYANMAR PAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +116D3;MYANMAR PAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +116D4;MYANMAR PAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +116D5;MYANMAR PAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +116D6;MYANMAR PAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +116D7;MYANMAR PAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +116D8;MYANMAR PAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +116D9;MYANMAR PAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +116DA;MYANMAR EASTERN PWO KAREN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +116DB;MYANMAR EASTERN PWO KAREN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +116DC;MYANMAR EASTERN PWO KAREN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +116DD;MYANMAR EASTERN PWO KAREN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +116DE;MYANMAR EASTERN PWO KAREN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +116DF;MYANMAR EASTERN PWO KAREN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +116E0;MYANMAR EASTERN PWO KAREN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +116E1;MYANMAR EASTERN PWO KAREN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +116E2;MYANMAR EASTERN PWO KAREN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +116E3;MYANMAR EASTERN PWO KAREN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;; 11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;; 11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;; @@ -20723,7 +20965,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;; 1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;; 1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; -1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; +1171E;AHOM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;; 11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; @@ -21279,6 +21521,50 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;; +11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;; +11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;; +11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;; +11BC3;SUNUWAR LETTER IMAR;Lo;0;L;;;;;N;;;;; +11BC4;SUNUWAR LETTER REU;Lo;0;L;;;;;N;;;;; +11BC5;SUNUWAR LETTER UTTHI;Lo;0;L;;;;;N;;;;; +11BC6;SUNUWAR LETTER KIK;Lo;0;L;;;;;N;;;;; +11BC7;SUNUWAR LETTER MA;Lo;0;L;;;;;N;;;;; +11BC8;SUNUWAR LETTER APPHO;Lo;0;L;;;;;N;;;;; +11BC9;SUNUWAR LETTER PIP;Lo;0;L;;;;;N;;;;; +11BCA;SUNUWAR LETTER GIL;Lo;0;L;;;;;N;;;;; +11BCB;SUNUWAR LETTER HAMSO;Lo;0;L;;;;;N;;;;; +11BCC;SUNUWAR LETTER CARMI;Lo;0;L;;;;;N;;;;; +11BCD;SUNUWAR LETTER NAH;Lo;0;L;;;;;N;;;;; +11BCE;SUNUWAR LETTER BUR;Lo;0;L;;;;;N;;;;; +11BCF;SUNUWAR LETTER JYAH;Lo;0;L;;;;;N;;;;; +11BD0;SUNUWAR LETTER LOACHA;Lo;0;L;;;;;N;;;;; +11BD1;SUNUWAR LETTER OTTHI;Lo;0;L;;;;;N;;;;; +11BD2;SUNUWAR LETTER SHYELE;Lo;0;L;;;;;N;;;;; +11BD3;SUNUWAR LETTER VARCA;Lo;0;L;;;;;N;;;;; +11BD4;SUNUWAR LETTER YAT;Lo;0;L;;;;;N;;;;; +11BD5;SUNUWAR LETTER AVA;Lo;0;L;;;;;N;;;;; +11BD6;SUNUWAR LETTER AAL;Lo;0;L;;;;;N;;;;; +11BD7;SUNUWAR LETTER DONGA;Lo;0;L;;;;;N;;;;; +11BD8;SUNUWAR LETTER THARI;Lo;0;L;;;;;N;;;;; +11BD9;SUNUWAR LETTER PHAR;Lo;0;L;;;;;N;;;;; +11BDA;SUNUWAR LETTER NGAR;Lo;0;L;;;;;N;;;;; +11BDB;SUNUWAR LETTER KHA;Lo;0;L;;;;;N;;;;; +11BDC;SUNUWAR LETTER SHYER;Lo;0;L;;;;;N;;;;; +11BDD;SUNUWAR LETTER CHELAP;Lo;0;L;;;;;N;;;;; +11BDE;SUNUWAR LETTER TENTU;Lo;0;L;;;;;N;;;;; +11BDF;SUNUWAR LETTER THELE;Lo;0;L;;;;;N;;;;; +11BE0;SUNUWAR LETTER KLOKO;Lo;0;L;;;;;N;;;;; +11BE1;SUNUWAR SIGN PVO;Po;0;L;;;;;N;;;;; +11BF0;SUNUWAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11BF1;SUNUWAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11BF2;SUNUWAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11BF3;SUNUWAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11BF4;SUNUWAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11BF5;SUNUWAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11BF6;SUNUWAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11BF7;SUNUWAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11BF8;SUNUWAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11BF9;SUNUWAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; @@ -21693,6 +21979,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11F57;KAWI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11F58;KAWI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11F59;KAWI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11F5A;KAWI SIGN NUKTA;Mn;0;NSM;;;;;N;;;;; 11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;; 11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; 11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; @@ -24188,6 +24475,4001 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 13453;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END;Mn;0;NSM;;;;;N;;;;; 13454;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END;Mn;0;NSM;;;;;N;;;;; 13455;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED;Mn;0;NSM;;;;;N;;;;; +13460;EGYPTIAN HIEROGLYPH-13460;Lo;0;L;;;;;N;;;;; +13461;EGYPTIAN HIEROGLYPH-13461;Lo;0;L;;;;;N;;;;; +13462;EGYPTIAN HIEROGLYPH-13462;Lo;0;L;;;;;N;;;;; +13463;EGYPTIAN HIEROGLYPH-13463;Lo;0;L;;;;;N;;;;; +13464;EGYPTIAN HIEROGLYPH-13464;Lo;0;L;;;;;N;;;;; +13465;EGYPTIAN HIEROGLYPH-13465;Lo;0;L;;;;;N;;;;; +13466;EGYPTIAN HIEROGLYPH-13466;Lo;0;L;;;;;N;;;;; +13467;EGYPTIAN HIEROGLYPH-13467;Lo;0;L;;;;;N;;;;; +13468;EGYPTIAN HIEROGLYPH-13468;Lo;0;L;;;;;N;;;;; +13469;EGYPTIAN HIEROGLYPH-13469;Lo;0;L;;;;;N;;;;; +1346A;EGYPTIAN HIEROGLYPH-1346A;Lo;0;L;;;;;N;;;;; +1346B;EGYPTIAN HIEROGLYPH-1346B;Lo;0;L;;;;;N;;;;; +1346C;EGYPTIAN HIEROGLYPH-1346C;Lo;0;L;;;;;N;;;;; +1346D;EGYPTIAN HIEROGLYPH-1346D;Lo;0;L;;;;;N;;;;; +1346E;EGYPTIAN HIEROGLYPH-1346E;Lo;0;L;;;;;N;;;;; +1346F;EGYPTIAN HIEROGLYPH-1346F;Lo;0;L;;;;;N;;;;; +13470;EGYPTIAN HIEROGLYPH-13470;Lo;0;L;;;;;N;;;;; +13471;EGYPTIAN HIEROGLYPH-13471;Lo;0;L;;;;;N;;;;; +13472;EGYPTIAN HIEROGLYPH-13472;Lo;0;L;;;;;N;;;;; +13473;EGYPTIAN HIEROGLYPH-13473;Lo;0;L;;;;;N;;;;; +13474;EGYPTIAN HIEROGLYPH-13474;Lo;0;L;;;;;N;;;;; +13475;EGYPTIAN HIEROGLYPH-13475;Lo;0;L;;;;;N;;;;; +13476;EGYPTIAN HIEROGLYPH-13476;Lo;0;L;;;;;N;;;;; +13477;EGYPTIAN HIEROGLYPH-13477;Lo;0;L;;;;;N;;;;; +13478;EGYPTIAN HIEROGLYPH-13478;Lo;0;L;;;;;N;;;;; +13479;EGYPTIAN HIEROGLYPH-13479;Lo;0;L;;;;;N;;;;; +1347A;EGYPTIAN HIEROGLYPH-1347A;Lo;0;L;;;;;N;;;;; +1347B;EGYPTIAN HIEROGLYPH-1347B;Lo;0;L;;;;;N;;;;; +1347C;EGYPTIAN HIEROGLYPH-1347C;Lo;0;L;;;;;N;;;;; +1347D;EGYPTIAN HIEROGLYPH-1347D;Lo;0;L;;;;;N;;;;; +1347E;EGYPTIAN HIEROGLYPH-1347E;Lo;0;L;;;;;N;;;;; +1347F;EGYPTIAN HIEROGLYPH-1347F;Lo;0;L;;;;;N;;;;; +13480;EGYPTIAN HIEROGLYPH-13480;Lo;0;L;;;;;N;;;;; +13481;EGYPTIAN HIEROGLYPH-13481;Lo;0;L;;;;;N;;;;; +13482;EGYPTIAN HIEROGLYPH-13482;Lo;0;L;;;;;N;;;;; +13483;EGYPTIAN HIEROGLYPH-13483;Lo;0;L;;;;;N;;;;; +13484;EGYPTIAN HIEROGLYPH-13484;Lo;0;L;;;;;N;;;;; +13485;EGYPTIAN HIEROGLYPH-13485;Lo;0;L;;;;;N;;;;; +13486;EGYPTIAN HIEROGLYPH-13486;Lo;0;L;;;;;N;;;;; +13487;EGYPTIAN HIEROGLYPH-13487;Lo;0;L;;;;;N;;;;; +13488;EGYPTIAN HIEROGLYPH-13488;Lo;0;L;;;;;N;;;;; +13489;EGYPTIAN HIEROGLYPH-13489;Lo;0;L;;;;;N;;;;; +1348A;EGYPTIAN HIEROGLYPH-1348A;Lo;0;L;;;;;N;;;;; +1348B;EGYPTIAN HIEROGLYPH-1348B;Lo;0;L;;;;;N;;;;; +1348C;EGYPTIAN HIEROGLYPH-1348C;Lo;0;L;;;;;N;;;;; +1348D;EGYPTIAN HIEROGLYPH-1348D;Lo;0;L;;;;;N;;;;; +1348E;EGYPTIAN HIEROGLYPH-1348E;Lo;0;L;;;;;N;;;;; +1348F;EGYPTIAN HIEROGLYPH-1348F;Lo;0;L;;;;;N;;;;; +13490;EGYPTIAN HIEROGLYPH-13490;Lo;0;L;;;;;N;;;;; +13491;EGYPTIAN HIEROGLYPH-13491;Lo;0;L;;;;;N;;;;; +13492;EGYPTIAN HIEROGLYPH-13492;Lo;0;L;;;;;N;;;;; +13493;EGYPTIAN HIEROGLYPH-13493;Lo;0;L;;;;;N;;;;; +13494;EGYPTIAN HIEROGLYPH-13494;Lo;0;L;;;;;N;;;;; +13495;EGYPTIAN HIEROGLYPH-13495;Lo;0;L;;;;;N;;;;; +13496;EGYPTIAN HIEROGLYPH-13496;Lo;0;L;;;;;N;;;;; +13497;EGYPTIAN HIEROGLYPH-13497;Lo;0;L;;;;;N;;;;; +13498;EGYPTIAN HIEROGLYPH-13498;Lo;0;L;;;;;N;;;;; +13499;EGYPTIAN HIEROGLYPH-13499;Lo;0;L;;;;;N;;;;; +1349A;EGYPTIAN HIEROGLYPH-1349A;Lo;0;L;;;;;N;;;;; +1349B;EGYPTIAN HIEROGLYPH-1349B;Lo;0;L;;;;;N;;;;; +1349C;EGYPTIAN HIEROGLYPH-1349C;Lo;0;L;;;;;N;;;;; +1349D;EGYPTIAN HIEROGLYPH-1349D;Lo;0;L;;;;;N;;;;; +1349E;EGYPTIAN HIEROGLYPH-1349E;Lo;0;L;;;;;N;;;;; +1349F;EGYPTIAN HIEROGLYPH-1349F;Lo;0;L;;;;;N;;;;; +134A0;EGYPTIAN HIEROGLYPH-134A0;Lo;0;L;;;;;N;;;;; +134A1;EGYPTIAN HIEROGLYPH-134A1;Lo;0;L;;;;;N;;;;; +134A2;EGYPTIAN HIEROGLYPH-134A2;Lo;0;L;;;;;N;;;;; +134A3;EGYPTIAN HIEROGLYPH-134A3;Lo;0;L;;;;;N;;;;; +134A4;EGYPTIAN HIEROGLYPH-134A4;Lo;0;L;;;;;N;;;;; +134A5;EGYPTIAN HIEROGLYPH-134A5;Lo;0;L;;;;;N;;;;; +134A6;EGYPTIAN HIEROGLYPH-134A6;Lo;0;L;;;;;N;;;;; +134A7;EGYPTIAN HIEROGLYPH-134A7;Lo;0;L;;;;;N;;;;; +134A8;EGYPTIAN HIEROGLYPH-134A8;Lo;0;L;;;;;N;;;;; +134A9;EGYPTIAN HIEROGLYPH-134A9;Lo;0;L;;;;;N;;;;; +134AA;EGYPTIAN HIEROGLYPH-134AA;Lo;0;L;;;;;N;;;;; +134AB;EGYPTIAN HIEROGLYPH-134AB;Lo;0;L;;;;;N;;;;; +134AC;EGYPTIAN HIEROGLYPH-134AC;Lo;0;L;;;;;N;;;;; +134AD;EGYPTIAN HIEROGLYPH-134AD;Lo;0;L;;;;;N;;;;; +134AE;EGYPTIAN HIEROGLYPH-134AE;Lo;0;L;;;;;N;;;;; +134AF;EGYPTIAN HIEROGLYPH-134AF;Lo;0;L;;;;;N;;;;; +134B0;EGYPTIAN HIEROGLYPH-134B0;Lo;0;L;;;;;N;;;;; +134B1;EGYPTIAN HIEROGLYPH-134B1;Lo;0;L;;;;;N;;;;; +134B2;EGYPTIAN HIEROGLYPH-134B2;Lo;0;L;;;;;N;;;;; +134B3;EGYPTIAN HIEROGLYPH-134B3;Lo;0;L;;;;;N;;;;; +134B4;EGYPTIAN HIEROGLYPH-134B4;Lo;0;L;;;;;N;;;;; +134B5;EGYPTIAN HIEROGLYPH-134B5;Lo;0;L;;;;;N;;;;; +134B6;EGYPTIAN HIEROGLYPH-134B6;Lo;0;L;;;;;N;;;;; +134B7;EGYPTIAN HIEROGLYPH-134B7;Lo;0;L;;;;;N;;;;; +134B8;EGYPTIAN HIEROGLYPH-134B8;Lo;0;L;;;;;N;;;;; +134B9;EGYPTIAN HIEROGLYPH-134B9;Lo;0;L;;;;;N;;;;; +134BA;EGYPTIAN HIEROGLYPH-134BA;Lo;0;L;;;;;N;;;;; +134BB;EGYPTIAN HIEROGLYPH-134BB;Lo;0;L;;;;;N;;;;; +134BC;EGYPTIAN HIEROGLYPH-134BC;Lo;0;L;;;;;N;;;;; +134BD;EGYPTIAN HIEROGLYPH-134BD;Lo;0;L;;;;;N;;;;; +134BE;EGYPTIAN HIEROGLYPH-134BE;Lo;0;L;;;;;N;;;;; +134BF;EGYPTIAN HIEROGLYPH-134BF;Lo;0;L;;;;;N;;;;; +134C0;EGYPTIAN HIEROGLYPH-134C0;Lo;0;L;;;;;N;;;;; +134C1;EGYPTIAN HIEROGLYPH-134C1;Lo;0;L;;;;;N;;;;; +134C2;EGYPTIAN HIEROGLYPH-134C2;Lo;0;L;;;;;N;;;;; +134C3;EGYPTIAN HIEROGLYPH-134C3;Lo;0;L;;;;;N;;;;; +134C4;EGYPTIAN HIEROGLYPH-134C4;Lo;0;L;;;;;N;;;;; +134C5;EGYPTIAN HIEROGLYPH-134C5;Lo;0;L;;;;;N;;;;; +134C6;EGYPTIAN HIEROGLYPH-134C6;Lo;0;L;;;;;N;;;;; +134C7;EGYPTIAN HIEROGLYPH-134C7;Lo;0;L;;;;;N;;;;; +134C8;EGYPTIAN HIEROGLYPH-134C8;Lo;0;L;;;;;N;;;;; +134C9;EGYPTIAN HIEROGLYPH-134C9;Lo;0;L;;;;;N;;;;; +134CA;EGYPTIAN HIEROGLYPH-134CA;Lo;0;L;;;;;N;;;;; +134CB;EGYPTIAN HIEROGLYPH-134CB;Lo;0;L;;;;;N;;;;; +134CC;EGYPTIAN HIEROGLYPH-134CC;Lo;0;L;;;;;N;;;;; +134CD;EGYPTIAN HIEROGLYPH-134CD;Lo;0;L;;;;;N;;;;; +134CE;EGYPTIAN HIEROGLYPH-134CE;Lo;0;L;;;;;N;;;;; +134CF;EGYPTIAN HIEROGLYPH-134CF;Lo;0;L;;;;;N;;;;; +134D0;EGYPTIAN HIEROGLYPH-134D0;Lo;0;L;;;;;N;;;;; +134D1;EGYPTIAN HIEROGLYPH-134D1;Lo;0;L;;;;;N;;;;; +134D2;EGYPTIAN HIEROGLYPH-134D2;Lo;0;L;;;;;N;;;;; +134D3;EGYPTIAN HIEROGLYPH-134D3;Lo;0;L;;;;;N;;;;; +134D4;EGYPTIAN HIEROGLYPH-134D4;Lo;0;L;;;;;N;;;;; +134D5;EGYPTIAN HIEROGLYPH-134D5;Lo;0;L;;;;;N;;;;; +134D6;EGYPTIAN HIEROGLYPH-134D6;Lo;0;L;;;;;N;;;;; +134D7;EGYPTIAN HIEROGLYPH-134D7;Lo;0;L;;;;;N;;;;; +134D8;EGYPTIAN HIEROGLYPH-134D8;Lo;0;L;;;;;N;;;;; +134D9;EGYPTIAN HIEROGLYPH-134D9;Lo;0;L;;;;;N;;;;; +134DA;EGYPTIAN HIEROGLYPH-134DA;Lo;0;L;;;;;N;;;;; +134DB;EGYPTIAN HIEROGLYPH-134DB;Lo;0;L;;;;;N;;;;; +134DC;EGYPTIAN HIEROGLYPH-134DC;Lo;0;L;;;;;N;;;;; +134DD;EGYPTIAN HIEROGLYPH-134DD;Lo;0;L;;;;;N;;;;; +134DE;EGYPTIAN HIEROGLYPH-134DE;Lo;0;L;;;;;N;;;;; +134DF;EGYPTIAN HIEROGLYPH-134DF;Lo;0;L;;;;;N;;;;; +134E0;EGYPTIAN HIEROGLYPH-134E0;Lo;0;L;;;;;N;;;;; +134E1;EGYPTIAN HIEROGLYPH-134E1;Lo;0;L;;;;;N;;;;; +134E2;EGYPTIAN HIEROGLYPH-134E2;Lo;0;L;;;;;N;;;;; +134E3;EGYPTIAN HIEROGLYPH-134E3;Lo;0;L;;;;;N;;;;; +134E4;EGYPTIAN HIEROGLYPH-134E4;Lo;0;L;;;;;N;;;;; +134E5;EGYPTIAN HIEROGLYPH-134E5;Lo;0;L;;;;;N;;;;; +134E6;EGYPTIAN HIEROGLYPH-134E6;Lo;0;L;;;;;N;;;;; +134E7;EGYPTIAN HIEROGLYPH-134E7;Lo;0;L;;;;;N;;;;; +134E8;EGYPTIAN HIEROGLYPH-134E8;Lo;0;L;;;;;N;;;;; +134E9;EGYPTIAN HIEROGLYPH-134E9;Lo;0;L;;;;;N;;;;; +134EA;EGYPTIAN HIEROGLYPH-134EA;Lo;0;L;;;;;N;;;;; +134EB;EGYPTIAN HIEROGLYPH-134EB;Lo;0;L;;;;;N;;;;; +134EC;EGYPTIAN HIEROGLYPH-134EC;Lo;0;L;;;;;N;;;;; +134ED;EGYPTIAN HIEROGLYPH-134ED;Lo;0;L;;;;;N;;;;; +134EE;EGYPTIAN HIEROGLYPH-134EE;Lo;0;L;;;;;N;;;;; +134EF;EGYPTIAN HIEROGLYPH-134EF;Lo;0;L;;;;;N;;;;; +134F0;EGYPTIAN HIEROGLYPH-134F0;Lo;0;L;;;;;N;;;;; +134F1;EGYPTIAN HIEROGLYPH-134F1;Lo;0;L;;;;;N;;;;; +134F2;EGYPTIAN HIEROGLYPH-134F2;Lo;0;L;;;;;N;;;;; +134F3;EGYPTIAN HIEROGLYPH-134F3;Lo;0;L;;;;;N;;;;; +134F4;EGYPTIAN HIEROGLYPH-134F4;Lo;0;L;;;;;N;;;;; +134F5;EGYPTIAN HIEROGLYPH-134F5;Lo;0;L;;;;;N;;;;; +134F6;EGYPTIAN HIEROGLYPH-134F6;Lo;0;L;;;;;N;;;;; +134F7;EGYPTIAN HIEROGLYPH-134F7;Lo;0;L;;;;;N;;;;; +134F8;EGYPTIAN HIEROGLYPH-134F8;Lo;0;L;;;;;N;;;;; +134F9;EGYPTIAN HIEROGLYPH-134F9;Lo;0;L;;;;;N;;;;; +134FA;EGYPTIAN HIEROGLYPH-134FA;Lo;0;L;;;;;N;;;;; +134FB;EGYPTIAN HIEROGLYPH-134FB;Lo;0;L;;;;;N;;;;; +134FC;EGYPTIAN HIEROGLYPH-134FC;Lo;0;L;;;;;N;;;;; +134FD;EGYPTIAN HIEROGLYPH-134FD;Lo;0;L;;;;;N;;;;; +134FE;EGYPTIAN HIEROGLYPH-134FE;Lo;0;L;;;;;N;;;;; +134FF;EGYPTIAN HIEROGLYPH-134FF;Lo;0;L;;;;;N;;;;; +13500;EGYPTIAN HIEROGLYPH-13500;Lo;0;L;;;;;N;;;;; +13501;EGYPTIAN HIEROGLYPH-13501;Lo;0;L;;;;;N;;;;; +13502;EGYPTIAN HIEROGLYPH-13502;Lo;0;L;;;;;N;;;;; +13503;EGYPTIAN HIEROGLYPH-13503;Lo;0;L;;;;;N;;;;; +13504;EGYPTIAN HIEROGLYPH-13504;Lo;0;L;;;;;N;;;;; +13505;EGYPTIAN HIEROGLYPH-13505;Lo;0;L;;;;;N;;;;; +13506;EGYPTIAN HIEROGLYPH-13506;Lo;0;L;;;;;N;;;;; +13507;EGYPTIAN HIEROGLYPH-13507;Lo;0;L;;;;;N;;;;; +13508;EGYPTIAN HIEROGLYPH-13508;Lo;0;L;;;;;N;;;;; +13509;EGYPTIAN HIEROGLYPH-13509;Lo;0;L;;;;;N;;;;; +1350A;EGYPTIAN HIEROGLYPH-1350A;Lo;0;L;;;;;N;;;;; +1350B;EGYPTIAN HIEROGLYPH-1350B;Lo;0;L;;;;;N;;;;; +1350C;EGYPTIAN HIEROGLYPH-1350C;Lo;0;L;;;;;N;;;;; +1350D;EGYPTIAN HIEROGLYPH-1350D;Lo;0;L;;;;;N;;;;; +1350E;EGYPTIAN HIEROGLYPH-1350E;Lo;0;L;;;;;N;;;;; +1350F;EGYPTIAN HIEROGLYPH-1350F;Lo;0;L;;;;;N;;;;; +13510;EGYPTIAN HIEROGLYPH-13510;Lo;0;L;;;;;N;;;;; +13511;EGYPTIAN HIEROGLYPH-13511;Lo;0;L;;;;;N;;;;; +13512;EGYPTIAN HIEROGLYPH-13512;Lo;0;L;;;;;N;;;;; +13513;EGYPTIAN HIEROGLYPH-13513;Lo;0;L;;;;;N;;;;; +13514;EGYPTIAN HIEROGLYPH-13514;Lo;0;L;;;;;N;;;;; +13515;EGYPTIAN HIEROGLYPH-13515;Lo;0;L;;;;;N;;;;; +13516;EGYPTIAN HIEROGLYPH-13516;Lo;0;L;;;;;N;;;;; +13517;EGYPTIAN HIEROGLYPH-13517;Lo;0;L;;;;;N;;;;; +13518;EGYPTIAN HIEROGLYPH-13518;Lo;0;L;;;;;N;;;;; +13519;EGYPTIAN HIEROGLYPH-13519;Lo;0;L;;;;;N;;;;; +1351A;EGYPTIAN HIEROGLYPH-1351A;Lo;0;L;;;;;N;;;;; +1351B;EGYPTIAN HIEROGLYPH-1351B;Lo;0;L;;;;;N;;;;; +1351C;EGYPTIAN HIEROGLYPH-1351C;Lo;0;L;;;;;N;;;;; +1351D;EGYPTIAN HIEROGLYPH-1351D;Lo;0;L;;;;;N;;;;; +1351E;EGYPTIAN HIEROGLYPH-1351E;Lo;0;L;;;;;N;;;;; +1351F;EGYPTIAN HIEROGLYPH-1351F;Lo;0;L;;;;;N;;;;; +13520;EGYPTIAN HIEROGLYPH-13520;Lo;0;L;;;;;N;;;;; +13521;EGYPTIAN HIEROGLYPH-13521;Lo;0;L;;;;;N;;;;; +13522;EGYPTIAN HIEROGLYPH-13522;Lo;0;L;;;;;N;;;;; +13523;EGYPTIAN HIEROGLYPH-13523;Lo;0;L;;;;;N;;;;; +13524;EGYPTIAN HIEROGLYPH-13524;Lo;0;L;;;;;N;;;;; +13525;EGYPTIAN HIEROGLYPH-13525;Lo;0;L;;;;;N;;;;; +13526;EGYPTIAN HIEROGLYPH-13526;Lo;0;L;;;;;N;;;;; +13527;EGYPTIAN HIEROGLYPH-13527;Lo;0;L;;;;;N;;;;; +13528;EGYPTIAN HIEROGLYPH-13528;Lo;0;L;;;;;N;;;;; +13529;EGYPTIAN HIEROGLYPH-13529;Lo;0;L;;;;;N;;;;; +1352A;EGYPTIAN HIEROGLYPH-1352A;Lo;0;L;;;;;N;;;;; +1352B;EGYPTIAN HIEROGLYPH-1352B;Lo;0;L;;;;;N;;;;; +1352C;EGYPTIAN HIEROGLYPH-1352C;Lo;0;L;;;;;N;;;;; +1352D;EGYPTIAN HIEROGLYPH-1352D;Lo;0;L;;;;;N;;;;; +1352E;EGYPTIAN HIEROGLYPH-1352E;Lo;0;L;;;;;N;;;;; +1352F;EGYPTIAN HIEROGLYPH-1352F;Lo;0;L;;;;;N;;;;; +13530;EGYPTIAN HIEROGLYPH-13530;Lo;0;L;;;;;N;;;;; +13531;EGYPTIAN HIEROGLYPH-13531;Lo;0;L;;;;;N;;;;; +13532;EGYPTIAN HIEROGLYPH-13532;Lo;0;L;;;;;N;;;;; +13533;EGYPTIAN HIEROGLYPH-13533;Lo;0;L;;;;;N;;;;; +13534;EGYPTIAN HIEROGLYPH-13534;Lo;0;L;;;;;N;;;;; +13535;EGYPTIAN HIEROGLYPH-13535;Lo;0;L;;;;;N;;;;; +13536;EGYPTIAN HIEROGLYPH-13536;Lo;0;L;;;;;N;;;;; +13537;EGYPTIAN HIEROGLYPH-13537;Lo;0;L;;;;;N;;;;; +13538;EGYPTIAN HIEROGLYPH-13538;Lo;0;L;;;;;N;;;;; +13539;EGYPTIAN HIEROGLYPH-13539;Lo;0;L;;;;;N;;;;; +1353A;EGYPTIAN HIEROGLYPH-1353A;Lo;0;L;;;;;N;;;;; +1353B;EGYPTIAN HIEROGLYPH-1353B;Lo;0;L;;;;;N;;;;; +1353C;EGYPTIAN HIEROGLYPH-1353C;Lo;0;L;;;;;N;;;;; +1353D;EGYPTIAN HIEROGLYPH-1353D;Lo;0;L;;;;;N;;;;; +1353E;EGYPTIAN HIEROGLYPH-1353E;Lo;0;L;;;;;N;;;;; +1353F;EGYPTIAN HIEROGLYPH-1353F;Lo;0;L;;;;;N;;;;; +13540;EGYPTIAN HIEROGLYPH-13540;Lo;0;L;;;;;N;;;;; +13541;EGYPTIAN HIEROGLYPH-13541;Lo;0;L;;;;;N;;;;; +13542;EGYPTIAN HIEROGLYPH-13542;Lo;0;L;;;;;N;;;;; +13543;EGYPTIAN HIEROGLYPH-13543;Lo;0;L;;;;;N;;;;; +13544;EGYPTIAN HIEROGLYPH-13544;Lo;0;L;;;;;N;;;;; +13545;EGYPTIAN HIEROGLYPH-13545;Lo;0;L;;;;;N;;;;; +13546;EGYPTIAN HIEROGLYPH-13546;Lo;0;L;;;;;N;;;;; +13547;EGYPTIAN HIEROGLYPH-13547;Lo;0;L;;;;;N;;;;; +13548;EGYPTIAN HIEROGLYPH-13548;Lo;0;L;;;;;N;;;;; +13549;EGYPTIAN HIEROGLYPH-13549;Lo;0;L;;;;;N;;;;; +1354A;EGYPTIAN HIEROGLYPH-1354A;Lo;0;L;;;;;N;;;;; +1354B;EGYPTIAN HIEROGLYPH-1354B;Lo;0;L;;;;;N;;;;; +1354C;EGYPTIAN HIEROGLYPH-1354C;Lo;0;L;;;;;N;;;;; +1354D;EGYPTIAN HIEROGLYPH-1354D;Lo;0;L;;;;;N;;;;; +1354E;EGYPTIAN HIEROGLYPH-1354E;Lo;0;L;;;;;N;;;;; +1354F;EGYPTIAN HIEROGLYPH-1354F;Lo;0;L;;;;;N;;;;; +13550;EGYPTIAN HIEROGLYPH-13550;Lo;0;L;;;;;N;;;;; +13551;EGYPTIAN HIEROGLYPH-13551;Lo;0;L;;;;;N;;;;; +13552;EGYPTIAN HIEROGLYPH-13552;Lo;0;L;;;;;N;;;;; +13553;EGYPTIAN HIEROGLYPH-13553;Lo;0;L;;;;;N;;;;; +13554;EGYPTIAN HIEROGLYPH-13554;Lo;0;L;;;;;N;;;;; +13555;EGYPTIAN HIEROGLYPH-13555;Lo;0;L;;;;;N;;;;; +13556;EGYPTIAN HIEROGLYPH-13556;Lo;0;L;;;;;N;;;;; +13557;EGYPTIAN HIEROGLYPH-13557;Lo;0;L;;;;;N;;;;; +13558;EGYPTIAN HIEROGLYPH-13558;Lo;0;L;;;;;N;;;;; +13559;EGYPTIAN HIEROGLYPH-13559;Lo;0;L;;;;;N;;;;; +1355A;EGYPTIAN HIEROGLYPH-1355A;Lo;0;L;;;;;N;;;;; +1355B;EGYPTIAN HIEROGLYPH-1355B;Lo;0;L;;;;;N;;;;; +1355C;EGYPTIAN HIEROGLYPH-1355C;Lo;0;L;;;;;N;;;;; +1355D;EGYPTIAN HIEROGLYPH-1355D;Lo;0;L;;;;;N;;;;; +1355E;EGYPTIAN HIEROGLYPH-1355E;Lo;0;L;;;;;N;;;;; +1355F;EGYPTIAN HIEROGLYPH-1355F;Lo;0;L;;;;;N;;;;; +13560;EGYPTIAN HIEROGLYPH-13560;Lo;0;L;;;;;N;;;;; +13561;EGYPTIAN HIEROGLYPH-13561;Lo;0;L;;;;;N;;;;; +13562;EGYPTIAN HIEROGLYPH-13562;Lo;0;L;;;;;N;;;;; +13563;EGYPTIAN HIEROGLYPH-13563;Lo;0;L;;;;;N;;;;; +13564;EGYPTIAN HIEROGLYPH-13564;Lo;0;L;;;;;N;;;;; +13565;EGYPTIAN HIEROGLYPH-13565;Lo;0;L;;;;;N;;;;; +13566;EGYPTIAN HIEROGLYPH-13566;Lo;0;L;;;;;N;;;;; +13567;EGYPTIAN HIEROGLYPH-13567;Lo;0;L;;;;;N;;;;; +13568;EGYPTIAN HIEROGLYPH-13568;Lo;0;L;;;;;N;;;;; +13569;EGYPTIAN HIEROGLYPH-13569;Lo;0;L;;;;;N;;;;; +1356A;EGYPTIAN HIEROGLYPH-1356A;Lo;0;L;;;;;N;;;;; +1356B;EGYPTIAN HIEROGLYPH-1356B;Lo;0;L;;;;;N;;;;; +1356C;EGYPTIAN HIEROGLYPH-1356C;Lo;0;L;;;;;N;;;;; +1356D;EGYPTIAN HIEROGLYPH-1356D;Lo;0;L;;;;;N;;;;; +1356E;EGYPTIAN HIEROGLYPH-1356E;Lo;0;L;;;;;N;;;;; +1356F;EGYPTIAN HIEROGLYPH-1356F;Lo;0;L;;;;;N;;;;; +13570;EGYPTIAN HIEROGLYPH-13570;Lo;0;L;;;;;N;;;;; +13571;EGYPTIAN HIEROGLYPH-13571;Lo;0;L;;;;;N;;;;; +13572;EGYPTIAN HIEROGLYPH-13572;Lo;0;L;;;;;N;;;;; +13573;EGYPTIAN HIEROGLYPH-13573;Lo;0;L;;;;;N;;;;; +13574;EGYPTIAN HIEROGLYPH-13574;Lo;0;L;;;;;N;;;;; +13575;EGYPTIAN HIEROGLYPH-13575;Lo;0;L;;;;;N;;;;; +13576;EGYPTIAN HIEROGLYPH-13576;Lo;0;L;;;;;N;;;;; +13577;EGYPTIAN HIEROGLYPH-13577;Lo;0;L;;;;;N;;;;; +13578;EGYPTIAN HIEROGLYPH-13578;Lo;0;L;;;;;N;;;;; +13579;EGYPTIAN HIEROGLYPH-13579;Lo;0;L;;;;;N;;;;; +1357A;EGYPTIAN HIEROGLYPH-1357A;Lo;0;L;;;;;N;;;;; +1357B;EGYPTIAN HIEROGLYPH-1357B;Lo;0;L;;;;;N;;;;; +1357C;EGYPTIAN HIEROGLYPH-1357C;Lo;0;L;;;;;N;;;;; +1357D;EGYPTIAN HIEROGLYPH-1357D;Lo;0;L;;;;;N;;;;; +1357E;EGYPTIAN HIEROGLYPH-1357E;Lo;0;L;;;;;N;;;;; +1357F;EGYPTIAN HIEROGLYPH-1357F;Lo;0;L;;;;;N;;;;; +13580;EGYPTIAN HIEROGLYPH-13580;Lo;0;L;;;;;N;;;;; +13581;EGYPTIAN HIEROGLYPH-13581;Lo;0;L;;;;;N;;;;; +13582;EGYPTIAN HIEROGLYPH-13582;Lo;0;L;;;;;N;;;;; +13583;EGYPTIAN HIEROGLYPH-13583;Lo;0;L;;;;;N;;;;; +13584;EGYPTIAN HIEROGLYPH-13584;Lo;0;L;;;;;N;;;;; +13585;EGYPTIAN HIEROGLYPH-13585;Lo;0;L;;;;;N;;;;; +13586;EGYPTIAN HIEROGLYPH-13586;Lo;0;L;;;;;N;;;;; +13587;EGYPTIAN HIEROGLYPH-13587;Lo;0;L;;;;;N;;;;; +13588;EGYPTIAN HIEROGLYPH-13588;Lo;0;L;;;;;N;;;;; +13589;EGYPTIAN HIEROGLYPH-13589;Lo;0;L;;;;;N;;;;; +1358A;EGYPTIAN HIEROGLYPH-1358A;Lo;0;L;;;;;N;;;;; +1358B;EGYPTIAN HIEROGLYPH-1358B;Lo;0;L;;;;;N;;;;; +1358C;EGYPTIAN HIEROGLYPH-1358C;Lo;0;L;;;;;N;;;;; +1358D;EGYPTIAN HIEROGLYPH-1358D;Lo;0;L;;;;;N;;;;; +1358E;EGYPTIAN HIEROGLYPH-1358E;Lo;0;L;;;;;N;;;;; +1358F;EGYPTIAN HIEROGLYPH-1358F;Lo;0;L;;;;;N;;;;; +13590;EGYPTIAN HIEROGLYPH-13590;Lo;0;L;;;;;N;;;;; +13591;EGYPTIAN HIEROGLYPH-13591;Lo;0;L;;;;;N;;;;; +13592;EGYPTIAN HIEROGLYPH-13592;Lo;0;L;;;;;N;;;;; +13593;EGYPTIAN HIEROGLYPH-13593;Lo;0;L;;;;;N;;;;; +13594;EGYPTIAN HIEROGLYPH-13594;Lo;0;L;;;;;N;;;;; +13595;EGYPTIAN HIEROGLYPH-13595;Lo;0;L;;;;;N;;;;; +13596;EGYPTIAN HIEROGLYPH-13596;Lo;0;L;;;;;N;;;;; +13597;EGYPTIAN HIEROGLYPH-13597;Lo;0;L;;;;;N;;;;; +13598;EGYPTIAN HIEROGLYPH-13598;Lo;0;L;;;;;N;;;;; +13599;EGYPTIAN HIEROGLYPH-13599;Lo;0;L;;;;;N;;;;; +1359A;EGYPTIAN HIEROGLYPH-1359A;Lo;0;L;;;;;N;;;;; +1359B;EGYPTIAN HIEROGLYPH-1359B;Lo;0;L;;;;;N;;;;; +1359C;EGYPTIAN HIEROGLYPH-1359C;Lo;0;L;;;;;N;;;;; +1359D;EGYPTIAN HIEROGLYPH-1359D;Lo;0;L;;;;;N;;;;; +1359E;EGYPTIAN HIEROGLYPH-1359E;Lo;0;L;;;;;N;;;;; +1359F;EGYPTIAN HIEROGLYPH-1359F;Lo;0;L;;;;;N;;;;; +135A0;EGYPTIAN HIEROGLYPH-135A0;Lo;0;L;;;;;N;;;;; +135A1;EGYPTIAN HIEROGLYPH-135A1;Lo;0;L;;;;;N;;;;; +135A2;EGYPTIAN HIEROGLYPH-135A2;Lo;0;L;;;;;N;;;;; +135A3;EGYPTIAN HIEROGLYPH-135A3;Lo;0;L;;;;;N;;;;; +135A4;EGYPTIAN HIEROGLYPH-135A4;Lo;0;L;;;;;N;;;;; +135A5;EGYPTIAN HIEROGLYPH-135A5;Lo;0;L;;;;;N;;;;; +135A6;EGYPTIAN HIEROGLYPH-135A6;Lo;0;L;;;;;N;;;;; +135A7;EGYPTIAN HIEROGLYPH-135A7;Lo;0;L;;;;;N;;;;; +135A8;EGYPTIAN HIEROGLYPH-135A8;Lo;0;L;;;;;N;;;;; +135A9;EGYPTIAN HIEROGLYPH-135A9;Lo;0;L;;;;;N;;;;; +135AA;EGYPTIAN HIEROGLYPH-135AA;Lo;0;L;;;;;N;;;;; +135AB;EGYPTIAN HIEROGLYPH-135AB;Lo;0;L;;;;;N;;;;; +135AC;EGYPTIAN HIEROGLYPH-135AC;Lo;0;L;;;;;N;;;;; +135AD;EGYPTIAN HIEROGLYPH-135AD;Lo;0;L;;;;;N;;;;; +135AE;EGYPTIAN HIEROGLYPH-135AE;Lo;0;L;;;;;N;;;;; +135AF;EGYPTIAN HIEROGLYPH-135AF;Lo;0;L;;;;;N;;;;; +135B0;EGYPTIAN HIEROGLYPH-135B0;Lo;0;L;;;;;N;;;;; +135B1;EGYPTIAN HIEROGLYPH-135B1;Lo;0;L;;;;;N;;;;; +135B2;EGYPTIAN HIEROGLYPH-135B2;Lo;0;L;;;;;N;;;;; +135B3;EGYPTIAN HIEROGLYPH-135B3;Lo;0;L;;;;;N;;;;; +135B4;EGYPTIAN HIEROGLYPH-135B4;Lo;0;L;;;;;N;;;;; +135B5;EGYPTIAN HIEROGLYPH-135B5;Lo;0;L;;;;;N;;;;; +135B6;EGYPTIAN HIEROGLYPH-135B6;Lo;0;L;;;;;N;;;;; +135B7;EGYPTIAN HIEROGLYPH-135B7;Lo;0;L;;;;;N;;;;; +135B8;EGYPTIAN HIEROGLYPH-135B8;Lo;0;L;;;;;N;;;;; +135B9;EGYPTIAN HIEROGLYPH-135B9;Lo;0;L;;;;;N;;;;; +135BA;EGYPTIAN HIEROGLYPH-135BA;Lo;0;L;;;;;N;;;;; +135BB;EGYPTIAN HIEROGLYPH-135BB;Lo;0;L;;;;;N;;;;; +135BC;EGYPTIAN HIEROGLYPH-135BC;Lo;0;L;;;;;N;;;;; +135BD;EGYPTIAN HIEROGLYPH-135BD;Lo;0;L;;;;;N;;;;; +135BE;EGYPTIAN HIEROGLYPH-135BE;Lo;0;L;;;;;N;;;;; +135BF;EGYPTIAN HIEROGLYPH-135BF;Lo;0;L;;;;;N;;;;; +135C0;EGYPTIAN HIEROGLYPH-135C0;Lo;0;L;;;;;N;;;;; +135C1;EGYPTIAN HIEROGLYPH-135C1;Lo;0;L;;;;;N;;;;; +135C2;EGYPTIAN HIEROGLYPH-135C2;Lo;0;L;;;;;N;;;;; +135C3;EGYPTIAN HIEROGLYPH-135C3;Lo;0;L;;;;;N;;;;; +135C4;EGYPTIAN HIEROGLYPH-135C4;Lo;0;L;;;;;N;;;;; +135C5;EGYPTIAN HIEROGLYPH-135C5;Lo;0;L;;;;;N;;;;; +135C6;EGYPTIAN HIEROGLYPH-135C6;Lo;0;L;;;;;N;;;;; +135C7;EGYPTIAN HIEROGLYPH-135C7;Lo;0;L;;;;;N;;;;; +135C8;EGYPTIAN HIEROGLYPH-135C8;Lo;0;L;;;;;N;;;;; +135C9;EGYPTIAN HIEROGLYPH-135C9;Lo;0;L;;;;;N;;;;; +135CA;EGYPTIAN HIEROGLYPH-135CA;Lo;0;L;;;;;N;;;;; +135CB;EGYPTIAN HIEROGLYPH-135CB;Lo;0;L;;;;;N;;;;; +135CC;EGYPTIAN HIEROGLYPH-135CC;Lo;0;L;;;;;N;;;;; +135CD;EGYPTIAN HIEROGLYPH-135CD;Lo;0;L;;;;;N;;;;; +135CE;EGYPTIAN HIEROGLYPH-135CE;Lo;0;L;;;;;N;;;;; +135CF;EGYPTIAN HIEROGLYPH-135CF;Lo;0;L;;;;;N;;;;; +135D0;EGYPTIAN HIEROGLYPH-135D0;Lo;0;L;;;;;N;;;;; +135D1;EGYPTIAN HIEROGLYPH-135D1;Lo;0;L;;;;;N;;;;; +135D2;EGYPTIAN HIEROGLYPH-135D2;Lo;0;L;;;;;N;;;;; +135D3;EGYPTIAN HIEROGLYPH-135D3;Lo;0;L;;;;;N;;;;; +135D4;EGYPTIAN HIEROGLYPH-135D4;Lo;0;L;;;;;N;;;;; +135D5;EGYPTIAN HIEROGLYPH-135D5;Lo;0;L;;;;;N;;;;; +135D6;EGYPTIAN HIEROGLYPH-135D6;Lo;0;L;;;;;N;;;;; +135D7;EGYPTIAN HIEROGLYPH-135D7;Lo;0;L;;;;;N;;;;; +135D8;EGYPTIAN HIEROGLYPH-135D8;Lo;0;L;;;;;N;;;;; +135D9;EGYPTIAN HIEROGLYPH-135D9;Lo;0;L;;;;;N;;;;; +135DA;EGYPTIAN HIEROGLYPH-135DA;Lo;0;L;;;;;N;;;;; +135DB;EGYPTIAN HIEROGLYPH-135DB;Lo;0;L;;;;;N;;;;; +135DC;EGYPTIAN HIEROGLYPH-135DC;Lo;0;L;;;;;N;;;;; +135DD;EGYPTIAN HIEROGLYPH-135DD;Lo;0;L;;;;;N;;;;; +135DE;EGYPTIAN HIEROGLYPH-135DE;Lo;0;L;;;;;N;;;;; +135DF;EGYPTIAN HIEROGLYPH-135DF;Lo;0;L;;;;;N;;;;; +135E0;EGYPTIAN HIEROGLYPH-135E0;Lo;0;L;;;;;N;;;;; +135E1;EGYPTIAN HIEROGLYPH-135E1;Lo;0;L;;;;;N;;;;; +135E2;EGYPTIAN HIEROGLYPH-135E2;Lo;0;L;;;;;N;;;;; +135E3;EGYPTIAN HIEROGLYPH-135E3;Lo;0;L;;;;;N;;;;; +135E4;EGYPTIAN HIEROGLYPH-135E4;Lo;0;L;;;;;N;;;;; +135E5;EGYPTIAN HIEROGLYPH-135E5;Lo;0;L;;;;;N;;;;; +135E6;EGYPTIAN HIEROGLYPH-135E6;Lo;0;L;;;;;N;;;;; +135E7;EGYPTIAN HIEROGLYPH-135E7;Lo;0;L;;;;;N;;;;; +135E8;EGYPTIAN HIEROGLYPH-135E8;Lo;0;L;;;;;N;;;;; +135E9;EGYPTIAN HIEROGLYPH-135E9;Lo;0;L;;;;;N;;;;; +135EA;EGYPTIAN HIEROGLYPH-135EA;Lo;0;L;;;;;N;;;;; +135EB;EGYPTIAN HIEROGLYPH-135EB;Lo;0;L;;;;;N;;;;; +135EC;EGYPTIAN HIEROGLYPH-135EC;Lo;0;L;;;;;N;;;;; +135ED;EGYPTIAN HIEROGLYPH-135ED;Lo;0;L;;;;;N;;;;; +135EE;EGYPTIAN HIEROGLYPH-135EE;Lo;0;L;;;;;N;;;;; +135EF;EGYPTIAN HIEROGLYPH-135EF;Lo;0;L;;;;;N;;;;; +135F0;EGYPTIAN HIEROGLYPH-135F0;Lo;0;L;;;;;N;;;;; +135F1;EGYPTIAN HIEROGLYPH-135F1;Lo;0;L;;;;;N;;;;; +135F2;EGYPTIAN HIEROGLYPH-135F2;Lo;0;L;;;;;N;;;;; +135F3;EGYPTIAN HIEROGLYPH-135F3;Lo;0;L;;;;;N;;;;; +135F4;EGYPTIAN HIEROGLYPH-135F4;Lo;0;L;;;;;N;;;;; +135F5;EGYPTIAN HIEROGLYPH-135F5;Lo;0;L;;;;;N;;;;; +135F6;EGYPTIAN HIEROGLYPH-135F6;Lo;0;L;;;;;N;;;;; +135F7;EGYPTIAN HIEROGLYPH-135F7;Lo;0;L;;;;;N;;;;; +135F8;EGYPTIAN HIEROGLYPH-135F8;Lo;0;L;;;;;N;;;;; +135F9;EGYPTIAN HIEROGLYPH-135F9;Lo;0;L;;;;;N;;;;; +135FA;EGYPTIAN HIEROGLYPH-135FA;Lo;0;L;;;;;N;;;;; +135FB;EGYPTIAN HIEROGLYPH-135FB;Lo;0;L;;;;;N;;;;; +135FC;EGYPTIAN HIEROGLYPH-135FC;Lo;0;L;;;;;N;;;;; +135FD;EGYPTIAN HIEROGLYPH-135FD;Lo;0;L;;;;;N;;;;; +135FE;EGYPTIAN HIEROGLYPH-135FE;Lo;0;L;;;;;N;;;;; +135FF;EGYPTIAN HIEROGLYPH-135FF;Lo;0;L;;;;;N;;;;; +13600;EGYPTIAN HIEROGLYPH-13600;Lo;0;L;;;;;N;;;;; +13601;EGYPTIAN HIEROGLYPH-13601;Lo;0;L;;;;;N;;;;; +13602;EGYPTIAN HIEROGLYPH-13602;Lo;0;L;;;;;N;;;;; +13603;EGYPTIAN HIEROGLYPH-13603;Lo;0;L;;;;;N;;;;; +13604;EGYPTIAN HIEROGLYPH-13604;Lo;0;L;;;;;N;;;;; +13605;EGYPTIAN HIEROGLYPH-13605;Lo;0;L;;;;;N;;;;; +13606;EGYPTIAN HIEROGLYPH-13606;Lo;0;L;;;;;N;;;;; +13607;EGYPTIAN HIEROGLYPH-13607;Lo;0;L;;;;;N;;;;; +13608;EGYPTIAN HIEROGLYPH-13608;Lo;0;L;;;;;N;;;;; +13609;EGYPTIAN HIEROGLYPH-13609;Lo;0;L;;;;;N;;;;; +1360A;EGYPTIAN HIEROGLYPH-1360A;Lo;0;L;;;;;N;;;;; +1360B;EGYPTIAN HIEROGLYPH-1360B;Lo;0;L;;;;;N;;;;; +1360C;EGYPTIAN HIEROGLYPH-1360C;Lo;0;L;;;;;N;;;;; +1360D;EGYPTIAN HIEROGLYPH-1360D;Lo;0;L;;;;;N;;;;; +1360E;EGYPTIAN HIEROGLYPH-1360E;Lo;0;L;;;;;N;;;;; +1360F;EGYPTIAN HIEROGLYPH-1360F;Lo;0;L;;;;;N;;;;; +13610;EGYPTIAN HIEROGLYPH-13610;Lo;0;L;;;;;N;;;;; +13611;EGYPTIAN HIEROGLYPH-13611;Lo;0;L;;;;;N;;;;; +13612;EGYPTIAN HIEROGLYPH-13612;Lo;0;L;;;;;N;;;;; +13613;EGYPTIAN HIEROGLYPH-13613;Lo;0;L;;;;;N;;;;; +13614;EGYPTIAN HIEROGLYPH-13614;Lo;0;L;;;;;N;;;;; +13615;EGYPTIAN HIEROGLYPH-13615;Lo;0;L;;;;;N;;;;; +13616;EGYPTIAN HIEROGLYPH-13616;Lo;0;L;;;;;N;;;;; +13617;EGYPTIAN HIEROGLYPH-13617;Lo;0;L;;;;;N;;;;; +13618;EGYPTIAN HIEROGLYPH-13618;Lo;0;L;;;;;N;;;;; +13619;EGYPTIAN HIEROGLYPH-13619;Lo;0;L;;;;;N;;;;; +1361A;EGYPTIAN HIEROGLYPH-1361A;Lo;0;L;;;;;N;;;;; +1361B;EGYPTIAN HIEROGLYPH-1361B;Lo;0;L;;;;;N;;;;; +1361C;EGYPTIAN HIEROGLYPH-1361C;Lo;0;L;;;;;N;;;;; +1361D;EGYPTIAN HIEROGLYPH-1361D;Lo;0;L;;;;;N;;;;; +1361E;EGYPTIAN HIEROGLYPH-1361E;Lo;0;L;;;;;N;;;;; +1361F;EGYPTIAN HIEROGLYPH-1361F;Lo;0;L;;;;;N;;;;; +13620;EGYPTIAN HIEROGLYPH-13620;Lo;0;L;;;;;N;;;;; +13621;EGYPTIAN HIEROGLYPH-13621;Lo;0;L;;;;;N;;;;; +13622;EGYPTIAN HIEROGLYPH-13622;Lo;0;L;;;;;N;;;;; +13623;EGYPTIAN HIEROGLYPH-13623;Lo;0;L;;;;;N;;;;; +13624;EGYPTIAN HIEROGLYPH-13624;Lo;0;L;;;;;N;;;;; +13625;EGYPTIAN HIEROGLYPH-13625;Lo;0;L;;;;;N;;;;; +13626;EGYPTIAN HIEROGLYPH-13626;Lo;0;L;;;;;N;;;;; +13627;EGYPTIAN HIEROGLYPH-13627;Lo;0;L;;;;;N;;;;; +13628;EGYPTIAN HIEROGLYPH-13628;Lo;0;L;;;;;N;;;;; +13629;EGYPTIAN HIEROGLYPH-13629;Lo;0;L;;;;;N;;;;; +1362A;EGYPTIAN HIEROGLYPH-1362A;Lo;0;L;;;;;N;;;;; +1362B;EGYPTIAN HIEROGLYPH-1362B;Lo;0;L;;;;;N;;;;; +1362C;EGYPTIAN HIEROGLYPH-1362C;Lo;0;L;;;;;N;;;;; +1362D;EGYPTIAN HIEROGLYPH-1362D;Lo;0;L;;;;;N;;;;; +1362E;EGYPTIAN HIEROGLYPH-1362E;Lo;0;L;;;;;N;;;;; +1362F;EGYPTIAN HIEROGLYPH-1362F;Lo;0;L;;;;;N;;;;; +13630;EGYPTIAN HIEROGLYPH-13630;Lo;0;L;;;;;N;;;;; +13631;EGYPTIAN HIEROGLYPH-13631;Lo;0;L;;;;;N;;;;; +13632;EGYPTIAN HIEROGLYPH-13632;Lo;0;L;;;;;N;;;;; +13633;EGYPTIAN HIEROGLYPH-13633;Lo;0;L;;;;;N;;;;; +13634;EGYPTIAN HIEROGLYPH-13634;Lo;0;L;;;;;N;;;;; +13635;EGYPTIAN HIEROGLYPH-13635;Lo;0;L;;;;;N;;;;; +13636;EGYPTIAN HIEROGLYPH-13636;Lo;0;L;;;;;N;;;;; +13637;EGYPTIAN HIEROGLYPH-13637;Lo;0;L;;;;;N;;;;; +13638;EGYPTIAN HIEROGLYPH-13638;Lo;0;L;;;;;N;;;;; +13639;EGYPTIAN HIEROGLYPH-13639;Lo;0;L;;;;;N;;;;; +1363A;EGYPTIAN HIEROGLYPH-1363A;Lo;0;L;;;;;N;;;;; +1363B;EGYPTIAN HIEROGLYPH-1363B;Lo;0;L;;;;;N;;;;; +1363C;EGYPTIAN HIEROGLYPH-1363C;Lo;0;L;;;;;N;;;;; +1363D;EGYPTIAN HIEROGLYPH-1363D;Lo;0;L;;;;;N;;;;; +1363E;EGYPTIAN HIEROGLYPH-1363E;Lo;0;L;;;;;N;;;;; +1363F;EGYPTIAN HIEROGLYPH-1363F;Lo;0;L;;;;;N;;;;; +13640;EGYPTIAN HIEROGLYPH-13640;Lo;0;L;;;;;N;;;;; +13641;EGYPTIAN HIEROGLYPH-13641;Lo;0;L;;;;;N;;;;; +13642;EGYPTIAN HIEROGLYPH-13642;Lo;0;L;;;;;N;;;;; +13643;EGYPTIAN HIEROGLYPH-13643;Lo;0;L;;;;;N;;;;; +13644;EGYPTIAN HIEROGLYPH-13644;Lo;0;L;;;;;N;;;;; +13645;EGYPTIAN HIEROGLYPH-13645;Lo;0;L;;;;;N;;;;; +13646;EGYPTIAN HIEROGLYPH-13646;Lo;0;L;;;;;N;;;;; +13647;EGYPTIAN HIEROGLYPH-13647;Lo;0;L;;;;;N;;;;; +13648;EGYPTIAN HIEROGLYPH-13648;Lo;0;L;;;;;N;;;;; +13649;EGYPTIAN HIEROGLYPH-13649;Lo;0;L;;;;;N;;;;; +1364A;EGYPTIAN HIEROGLYPH-1364A;Lo;0;L;;;;;N;;;;; +1364B;EGYPTIAN HIEROGLYPH-1364B;Lo;0;L;;;;;N;;;;; +1364C;EGYPTIAN HIEROGLYPH-1364C;Lo;0;L;;;;;N;;;;; +1364D;EGYPTIAN HIEROGLYPH-1364D;Lo;0;L;;;;;N;;;;; +1364E;EGYPTIAN HIEROGLYPH-1364E;Lo;0;L;;;;;N;;;;; +1364F;EGYPTIAN HIEROGLYPH-1364F;Lo;0;L;;;;;N;;;;; +13650;EGYPTIAN HIEROGLYPH-13650;Lo;0;L;;;;;N;;;;; +13651;EGYPTIAN HIEROGLYPH-13651;Lo;0;L;;;;;N;;;;; +13652;EGYPTIAN HIEROGLYPH-13652;Lo;0;L;;;;;N;;;;; +13653;EGYPTIAN HIEROGLYPH-13653;Lo;0;L;;;;;N;;;;; +13654;EGYPTIAN HIEROGLYPH-13654;Lo;0;L;;;;;N;;;;; +13655;EGYPTIAN HIEROGLYPH-13655;Lo;0;L;;;;;N;;;;; +13656;EGYPTIAN HIEROGLYPH-13656;Lo;0;L;;;;;N;;;;; +13657;EGYPTIAN HIEROGLYPH-13657;Lo;0;L;;;;;N;;;;; +13658;EGYPTIAN HIEROGLYPH-13658;Lo;0;L;;;;;N;;;;; +13659;EGYPTIAN HIEROGLYPH-13659;Lo;0;L;;;;;N;;;;; +1365A;EGYPTIAN HIEROGLYPH-1365A;Lo;0;L;;;;;N;;;;; +1365B;EGYPTIAN HIEROGLYPH-1365B;Lo;0;L;;;;;N;;;;; +1365C;EGYPTIAN HIEROGLYPH-1365C;Lo;0;L;;;;;N;;;;; +1365D;EGYPTIAN HIEROGLYPH-1365D;Lo;0;L;;;;;N;;;;; +1365E;EGYPTIAN HIEROGLYPH-1365E;Lo;0;L;;;;;N;;;;; +1365F;EGYPTIAN HIEROGLYPH-1365F;Lo;0;L;;;;;N;;;;; +13660;EGYPTIAN HIEROGLYPH-13660;Lo;0;L;;;;;N;;;;; +13661;EGYPTIAN HIEROGLYPH-13661;Lo;0;L;;;;;N;;;;; +13662;EGYPTIAN HIEROGLYPH-13662;Lo;0;L;;;;;N;;;;; +13663;EGYPTIAN HIEROGLYPH-13663;Lo;0;L;;;;;N;;;;; +13664;EGYPTIAN HIEROGLYPH-13664;Lo;0;L;;;;;N;;;;; +13665;EGYPTIAN HIEROGLYPH-13665;Lo;0;L;;;;;N;;;;; +13666;EGYPTIAN HIEROGLYPH-13666;Lo;0;L;;;;;N;;;;; +13667;EGYPTIAN HIEROGLYPH-13667;Lo;0;L;;;;;N;;;;; +13668;EGYPTIAN HIEROGLYPH-13668;Lo;0;L;;;;;N;;;;; +13669;EGYPTIAN HIEROGLYPH-13669;Lo;0;L;;;;;N;;;;; +1366A;EGYPTIAN HIEROGLYPH-1366A;Lo;0;L;;;;;N;;;;; +1366B;EGYPTIAN HIEROGLYPH-1366B;Lo;0;L;;;;;N;;;;; +1366C;EGYPTIAN HIEROGLYPH-1366C;Lo;0;L;;;;;N;;;;; +1366D;EGYPTIAN HIEROGLYPH-1366D;Lo;0;L;;;;;N;;;;; +1366E;EGYPTIAN HIEROGLYPH-1366E;Lo;0;L;;;;;N;;;;; +1366F;EGYPTIAN HIEROGLYPH-1366F;Lo;0;L;;;;;N;;;;; +13670;EGYPTIAN HIEROGLYPH-13670;Lo;0;L;;;;;N;;;;; +13671;EGYPTIAN HIEROGLYPH-13671;Lo;0;L;;;;;N;;;;; +13672;EGYPTIAN HIEROGLYPH-13672;Lo;0;L;;;;;N;;;;; +13673;EGYPTIAN HIEROGLYPH-13673;Lo;0;L;;;;;N;;;;; +13674;EGYPTIAN HIEROGLYPH-13674;Lo;0;L;;;;;N;;;;; +13675;EGYPTIAN HIEROGLYPH-13675;Lo;0;L;;;;;N;;;;; +13676;EGYPTIAN HIEROGLYPH-13676;Lo;0;L;;;;;N;;;;; +13677;EGYPTIAN HIEROGLYPH-13677;Lo;0;L;;;;;N;;;;; +13678;EGYPTIAN HIEROGLYPH-13678;Lo;0;L;;;;;N;;;;; +13679;EGYPTIAN HIEROGLYPH-13679;Lo;0;L;;;;;N;;;;; +1367A;EGYPTIAN HIEROGLYPH-1367A;Lo;0;L;;;;;N;;;;; +1367B;EGYPTIAN HIEROGLYPH-1367B;Lo;0;L;;;;;N;;;;; +1367C;EGYPTIAN HIEROGLYPH-1367C;Lo;0;L;;;;;N;;;;; +1367D;EGYPTIAN HIEROGLYPH-1367D;Lo;0;L;;;;;N;;;;; +1367E;EGYPTIAN HIEROGLYPH-1367E;Lo;0;L;;;;;N;;;;; +1367F;EGYPTIAN HIEROGLYPH-1367F;Lo;0;L;;;;;N;;;;; +13680;EGYPTIAN HIEROGLYPH-13680;Lo;0;L;;;;;N;;;;; +13681;EGYPTIAN HIEROGLYPH-13681;Lo;0;L;;;;;N;;;;; +13682;EGYPTIAN HIEROGLYPH-13682;Lo;0;L;;;;;N;;;;; +13683;EGYPTIAN HIEROGLYPH-13683;Lo;0;L;;;;;N;;;;; +13684;EGYPTIAN HIEROGLYPH-13684;Lo;0;L;;;;;N;;;;; +13685;EGYPTIAN HIEROGLYPH-13685;Lo;0;L;;;;;N;;;;; +13686;EGYPTIAN HIEROGLYPH-13686;Lo;0;L;;;;;N;;;;; +13687;EGYPTIAN HIEROGLYPH-13687;Lo;0;L;;;;;N;;;;; +13688;EGYPTIAN HIEROGLYPH-13688;Lo;0;L;;;;;N;;;;; +13689;EGYPTIAN HIEROGLYPH-13689;Lo;0;L;;;;;N;;;;; +1368A;EGYPTIAN HIEROGLYPH-1368A;Lo;0;L;;;;;N;;;;; +1368B;EGYPTIAN HIEROGLYPH-1368B;Lo;0;L;;;;;N;;;;; +1368C;EGYPTIAN HIEROGLYPH-1368C;Lo;0;L;;;;;N;;;;; +1368D;EGYPTIAN HIEROGLYPH-1368D;Lo;0;L;;;;;N;;;;; +1368E;EGYPTIAN HIEROGLYPH-1368E;Lo;0;L;;;;;N;;;;; +1368F;EGYPTIAN HIEROGLYPH-1368F;Lo;0;L;;;;;N;;;;; +13690;EGYPTIAN HIEROGLYPH-13690;Lo;0;L;;;;;N;;;;; +13691;EGYPTIAN HIEROGLYPH-13691;Lo;0;L;;;;;N;;;;; +13692;EGYPTIAN HIEROGLYPH-13692;Lo;0;L;;;;;N;;;;; +13693;EGYPTIAN HIEROGLYPH-13693;Lo;0;L;;;;;N;;;;; +13694;EGYPTIAN HIEROGLYPH-13694;Lo;0;L;;;;;N;;;;; +13695;EGYPTIAN HIEROGLYPH-13695;Lo;0;L;;;;;N;;;;; +13696;EGYPTIAN HIEROGLYPH-13696;Lo;0;L;;;;;N;;;;; +13697;EGYPTIAN HIEROGLYPH-13697;Lo;0;L;;;;;N;;;;; +13698;EGYPTIAN HIEROGLYPH-13698;Lo;0;L;;;;;N;;;;; +13699;EGYPTIAN HIEROGLYPH-13699;Lo;0;L;;;;;N;;;;; +1369A;EGYPTIAN HIEROGLYPH-1369A;Lo;0;L;;;;;N;;;;; +1369B;EGYPTIAN HIEROGLYPH-1369B;Lo;0;L;;;;;N;;;;; +1369C;EGYPTIAN HIEROGLYPH-1369C;Lo;0;L;;;;;N;;;;; +1369D;EGYPTIAN HIEROGLYPH-1369D;Lo;0;L;;;;;N;;;;; +1369E;EGYPTIAN HIEROGLYPH-1369E;Lo;0;L;;;;;N;;;;; +1369F;EGYPTIAN HIEROGLYPH-1369F;Lo;0;L;;;;;N;;;;; +136A0;EGYPTIAN HIEROGLYPH-136A0;Lo;0;L;;;;;N;;;;; +136A1;EGYPTIAN HIEROGLYPH-136A1;Lo;0;L;;;;;N;;;;; +136A2;EGYPTIAN HIEROGLYPH-136A2;Lo;0;L;;;;;N;;;;; +136A3;EGYPTIAN HIEROGLYPH-136A3;Lo;0;L;;;;;N;;;;; +136A4;EGYPTIAN HIEROGLYPH-136A4;Lo;0;L;;;;;N;;;;; +136A5;EGYPTIAN HIEROGLYPH-136A5;Lo;0;L;;;;;N;;;;; +136A6;EGYPTIAN HIEROGLYPH-136A6;Lo;0;L;;;;;N;;;;; +136A7;EGYPTIAN HIEROGLYPH-136A7;Lo;0;L;;;;;N;;;;; +136A8;EGYPTIAN HIEROGLYPH-136A8;Lo;0;L;;;;;N;;;;; +136A9;EGYPTIAN HIEROGLYPH-136A9;Lo;0;L;;;;;N;;;;; +136AA;EGYPTIAN HIEROGLYPH-136AA;Lo;0;L;;;;;N;;;;; +136AB;EGYPTIAN HIEROGLYPH-136AB;Lo;0;L;;;;;N;;;;; +136AC;EGYPTIAN HIEROGLYPH-136AC;Lo;0;L;;;;;N;;;;; +136AD;EGYPTIAN HIEROGLYPH-136AD;Lo;0;L;;;;;N;;;;; +136AE;EGYPTIAN HIEROGLYPH-136AE;Lo;0;L;;;;;N;;;;; +136AF;EGYPTIAN HIEROGLYPH-136AF;Lo;0;L;;;;;N;;;;; +136B0;EGYPTIAN HIEROGLYPH-136B0;Lo;0;L;;;;;N;;;;; +136B1;EGYPTIAN HIEROGLYPH-136B1;Lo;0;L;;;;;N;;;;; +136B2;EGYPTIAN HIEROGLYPH-136B2;Lo;0;L;;;;;N;;;;; +136B3;EGYPTIAN HIEROGLYPH-136B3;Lo;0;L;;;;;N;;;;; +136B4;EGYPTIAN HIEROGLYPH-136B4;Lo;0;L;;;;;N;;;;; +136B5;EGYPTIAN HIEROGLYPH-136B5;Lo;0;L;;;;;N;;;;; +136B6;EGYPTIAN HIEROGLYPH-136B6;Lo;0;L;;;;;N;;;;; +136B7;EGYPTIAN HIEROGLYPH-136B7;Lo;0;L;;;;;N;;;;; +136B8;EGYPTIAN HIEROGLYPH-136B8;Lo;0;L;;;;;N;;;;; +136B9;EGYPTIAN HIEROGLYPH-136B9;Lo;0;L;;;;;N;;;;; +136BA;EGYPTIAN HIEROGLYPH-136BA;Lo;0;L;;;;;N;;;;; +136BB;EGYPTIAN HIEROGLYPH-136BB;Lo;0;L;;;;;N;;;;; +136BC;EGYPTIAN HIEROGLYPH-136BC;Lo;0;L;;;;;N;;;;; +136BD;EGYPTIAN HIEROGLYPH-136BD;Lo;0;L;;;;;N;;;;; +136BE;EGYPTIAN HIEROGLYPH-136BE;Lo;0;L;;;;;N;;;;; +136BF;EGYPTIAN HIEROGLYPH-136BF;Lo;0;L;;;;;N;;;;; +136C0;EGYPTIAN HIEROGLYPH-136C0;Lo;0;L;;;;;N;;;;; +136C1;EGYPTIAN HIEROGLYPH-136C1;Lo;0;L;;;;;N;;;;; +136C2;EGYPTIAN HIEROGLYPH-136C2;Lo;0;L;;;;;N;;;;; +136C3;EGYPTIAN HIEROGLYPH-136C3;Lo;0;L;;;;;N;;;;; +136C4;EGYPTIAN HIEROGLYPH-136C4;Lo;0;L;;;;;N;;;;; +136C5;EGYPTIAN HIEROGLYPH-136C5;Lo;0;L;;;;;N;;;;; +136C6;EGYPTIAN HIEROGLYPH-136C6;Lo;0;L;;;;;N;;;;; +136C7;EGYPTIAN HIEROGLYPH-136C7;Lo;0;L;;;;;N;;;;; +136C8;EGYPTIAN HIEROGLYPH-136C8;Lo;0;L;;;;;N;;;;; +136C9;EGYPTIAN HIEROGLYPH-136C9;Lo;0;L;;;;;N;;;;; +136CA;EGYPTIAN HIEROGLYPH-136CA;Lo;0;L;;;;;N;;;;; +136CB;EGYPTIAN HIEROGLYPH-136CB;Lo;0;L;;;;;N;;;;; +136CC;EGYPTIAN HIEROGLYPH-136CC;Lo;0;L;;;;;N;;;;; +136CD;EGYPTIAN HIEROGLYPH-136CD;Lo;0;L;;;;;N;;;;; +136CE;EGYPTIAN HIEROGLYPH-136CE;Lo;0;L;;;;;N;;;;; +136CF;EGYPTIAN HIEROGLYPH-136CF;Lo;0;L;;;;;N;;;;; +136D0;EGYPTIAN HIEROGLYPH-136D0;Lo;0;L;;;;;N;;;;; +136D1;EGYPTIAN HIEROGLYPH-136D1;Lo;0;L;;;;;N;;;;; +136D2;EGYPTIAN HIEROGLYPH-136D2;Lo;0;L;;;;;N;;;;; +136D3;EGYPTIAN HIEROGLYPH-136D3;Lo;0;L;;;;;N;;;;; +136D4;EGYPTIAN HIEROGLYPH-136D4;Lo;0;L;;;;;N;;;;; +136D5;EGYPTIAN HIEROGLYPH-136D5;Lo;0;L;;;;;N;;;;; +136D6;EGYPTIAN HIEROGLYPH-136D6;Lo;0;L;;;;;N;;;;; +136D7;EGYPTIAN HIEROGLYPH-136D7;Lo;0;L;;;;;N;;;;; +136D8;EGYPTIAN HIEROGLYPH-136D8;Lo;0;L;;;;;N;;;;; +136D9;EGYPTIAN HIEROGLYPH-136D9;Lo;0;L;;;;;N;;;;; +136DA;EGYPTIAN HIEROGLYPH-136DA;Lo;0;L;;;;;N;;;;; +136DB;EGYPTIAN HIEROGLYPH-136DB;Lo;0;L;;;;;N;;;;; +136DC;EGYPTIAN HIEROGLYPH-136DC;Lo;0;L;;;;;N;;;;; +136DD;EGYPTIAN HIEROGLYPH-136DD;Lo;0;L;;;;;N;;;;; +136DE;EGYPTIAN HIEROGLYPH-136DE;Lo;0;L;;;;;N;;;;; +136DF;EGYPTIAN HIEROGLYPH-136DF;Lo;0;L;;;;;N;;;;; +136E0;EGYPTIAN HIEROGLYPH-136E0;Lo;0;L;;;;;N;;;;; +136E1;EGYPTIAN HIEROGLYPH-136E1;Lo;0;L;;;;;N;;;;; +136E2;EGYPTIAN HIEROGLYPH-136E2;Lo;0;L;;;;;N;;;;; +136E3;EGYPTIAN HIEROGLYPH-136E3;Lo;0;L;;;;;N;;;;; +136E4;EGYPTIAN HIEROGLYPH-136E4;Lo;0;L;;;;;N;;;;; +136E5;EGYPTIAN HIEROGLYPH-136E5;Lo;0;L;;;;;N;;;;; +136E6;EGYPTIAN HIEROGLYPH-136E6;Lo;0;L;;;;;N;;;;; +136E7;EGYPTIAN HIEROGLYPH-136E7;Lo;0;L;;;;;N;;;;; +136E8;EGYPTIAN HIEROGLYPH-136E8;Lo;0;L;;;;;N;;;;; +136E9;EGYPTIAN HIEROGLYPH-136E9;Lo;0;L;;;;;N;;;;; +136EA;EGYPTIAN HIEROGLYPH-136EA;Lo;0;L;;;;;N;;;;; +136EB;EGYPTIAN HIEROGLYPH-136EB;Lo;0;L;;;;;N;;;;; +136EC;EGYPTIAN HIEROGLYPH-136EC;Lo;0;L;;;;;N;;;;; +136ED;EGYPTIAN HIEROGLYPH-136ED;Lo;0;L;;;;;N;;;;; +136EE;EGYPTIAN HIEROGLYPH-136EE;Lo;0;L;;;;;N;;;;; +136EF;EGYPTIAN HIEROGLYPH-136EF;Lo;0;L;;;;;N;;;;; +136F0;EGYPTIAN HIEROGLYPH-136F0;Lo;0;L;;;;;N;;;;; +136F1;EGYPTIAN HIEROGLYPH-136F1;Lo;0;L;;;;;N;;;;; +136F2;EGYPTIAN HIEROGLYPH-136F2;Lo;0;L;;;;;N;;;;; +136F3;EGYPTIAN HIEROGLYPH-136F3;Lo;0;L;;;;;N;;;;; +136F4;EGYPTIAN HIEROGLYPH-136F4;Lo;0;L;;;;;N;;;;; +136F5;EGYPTIAN HIEROGLYPH-136F5;Lo;0;L;;;;;N;;;;; +136F6;EGYPTIAN HIEROGLYPH-136F6;Lo;0;L;;;;;N;;;;; +136F7;EGYPTIAN HIEROGLYPH-136F7;Lo;0;L;;;;;N;;;;; +136F8;EGYPTIAN HIEROGLYPH-136F8;Lo;0;L;;;;;N;;;;; +136F9;EGYPTIAN HIEROGLYPH-136F9;Lo;0;L;;;;;N;;;;; +136FA;EGYPTIAN HIEROGLYPH-136FA;Lo;0;L;;;;;N;;;;; +136FB;EGYPTIAN HIEROGLYPH-136FB;Lo;0;L;;;;;N;;;;; +136FC;EGYPTIAN HIEROGLYPH-136FC;Lo;0;L;;;;;N;;;;; +136FD;EGYPTIAN HIEROGLYPH-136FD;Lo;0;L;;;;;N;;;;; +136FE;EGYPTIAN HIEROGLYPH-136FE;Lo;0;L;;;;;N;;;;; +136FF;EGYPTIAN HIEROGLYPH-136FF;Lo;0;L;;;;;N;;;;; +13700;EGYPTIAN HIEROGLYPH-13700;Lo;0;L;;;;;N;;;;; +13701;EGYPTIAN HIEROGLYPH-13701;Lo;0;L;;;;;N;;;;; +13702;EGYPTIAN HIEROGLYPH-13702;Lo;0;L;;;;;N;;;;; +13703;EGYPTIAN HIEROGLYPH-13703;Lo;0;L;;;;;N;;;;; +13704;EGYPTIAN HIEROGLYPH-13704;Lo;0;L;;;;;N;;;;; +13705;EGYPTIAN HIEROGLYPH-13705;Lo;0;L;;;;;N;;;;; +13706;EGYPTIAN HIEROGLYPH-13706;Lo;0;L;;;;;N;;;;; +13707;EGYPTIAN HIEROGLYPH-13707;Lo;0;L;;;;;N;;;;; +13708;EGYPTIAN HIEROGLYPH-13708;Lo;0;L;;;;;N;;;;; +13709;EGYPTIAN HIEROGLYPH-13709;Lo;0;L;;;;;N;;;;; +1370A;EGYPTIAN HIEROGLYPH-1370A;Lo;0;L;;;;;N;;;;; +1370B;EGYPTIAN HIEROGLYPH-1370B;Lo;0;L;;;;;N;;;;; +1370C;EGYPTIAN HIEROGLYPH-1370C;Lo;0;L;;;;;N;;;;; +1370D;EGYPTIAN HIEROGLYPH-1370D;Lo;0;L;;;;;N;;;;; +1370E;EGYPTIAN HIEROGLYPH-1370E;Lo;0;L;;;;;N;;;;; +1370F;EGYPTIAN HIEROGLYPH-1370F;Lo;0;L;;;;;N;;;;; +13710;EGYPTIAN HIEROGLYPH-13710;Lo;0;L;;;;;N;;;;; +13711;EGYPTIAN HIEROGLYPH-13711;Lo;0;L;;;;;N;;;;; +13712;EGYPTIAN HIEROGLYPH-13712;Lo;0;L;;;;;N;;;;; +13713;EGYPTIAN HIEROGLYPH-13713;Lo;0;L;;;;;N;;;;; +13714;EGYPTIAN HIEROGLYPH-13714;Lo;0;L;;;;;N;;;;; +13715;EGYPTIAN HIEROGLYPH-13715;Lo;0;L;;;;;N;;;;; +13716;EGYPTIAN HIEROGLYPH-13716;Lo;0;L;;;;;N;;;;; +13717;EGYPTIAN HIEROGLYPH-13717;Lo;0;L;;;;;N;;;;; +13718;EGYPTIAN HIEROGLYPH-13718;Lo;0;L;;;;;N;;;;; +13719;EGYPTIAN HIEROGLYPH-13719;Lo;0;L;;;;;N;;;;; +1371A;EGYPTIAN HIEROGLYPH-1371A;Lo;0;L;;;;;N;;;;; +1371B;EGYPTIAN HIEROGLYPH-1371B;Lo;0;L;;;;;N;;;;; +1371C;EGYPTIAN HIEROGLYPH-1371C;Lo;0;L;;;;;N;;;;; +1371D;EGYPTIAN HIEROGLYPH-1371D;Lo;0;L;;;;;N;;;;; +1371E;EGYPTIAN HIEROGLYPH-1371E;Lo;0;L;;;;;N;;;;; +1371F;EGYPTIAN HIEROGLYPH-1371F;Lo;0;L;;;;;N;;;;; +13720;EGYPTIAN HIEROGLYPH-13720;Lo;0;L;;;;;N;;;;; +13721;EGYPTIAN HIEROGLYPH-13721;Lo;0;L;;;;;N;;;;; +13722;EGYPTIAN HIEROGLYPH-13722;Lo;0;L;;;;;N;;;;; +13723;EGYPTIAN HIEROGLYPH-13723;Lo;0;L;;;;;N;;;;; +13724;EGYPTIAN HIEROGLYPH-13724;Lo;0;L;;;;;N;;;;; +13725;EGYPTIAN HIEROGLYPH-13725;Lo;0;L;;;;;N;;;;; +13726;EGYPTIAN HIEROGLYPH-13726;Lo;0;L;;;;;N;;;;; +13727;EGYPTIAN HIEROGLYPH-13727;Lo;0;L;;;;;N;;;;; +13728;EGYPTIAN HIEROGLYPH-13728;Lo;0;L;;;;;N;;;;; +13729;EGYPTIAN HIEROGLYPH-13729;Lo;0;L;;;;;N;;;;; +1372A;EGYPTIAN HIEROGLYPH-1372A;Lo;0;L;;;;;N;;;;; +1372B;EGYPTIAN HIEROGLYPH-1372B;Lo;0;L;;;;;N;;;;; +1372C;EGYPTIAN HIEROGLYPH-1372C;Lo;0;L;;;;;N;;;;; +1372D;EGYPTIAN HIEROGLYPH-1372D;Lo;0;L;;;;;N;;;;; +1372E;EGYPTIAN HIEROGLYPH-1372E;Lo;0;L;;;;;N;;;;; +1372F;EGYPTIAN HIEROGLYPH-1372F;Lo;0;L;;;;;N;;;;; +13730;EGYPTIAN HIEROGLYPH-13730;Lo;0;L;;;;;N;;;;; +13731;EGYPTIAN HIEROGLYPH-13731;Lo;0;L;;;;;N;;;;; +13732;EGYPTIAN HIEROGLYPH-13732;Lo;0;L;;;;;N;;;;; +13733;EGYPTIAN HIEROGLYPH-13733;Lo;0;L;;;;;N;;;;; +13734;EGYPTIAN HIEROGLYPH-13734;Lo;0;L;;;;;N;;;;; +13735;EGYPTIAN HIEROGLYPH-13735;Lo;0;L;;;;;N;;;;; +13736;EGYPTIAN HIEROGLYPH-13736;Lo;0;L;;;;;N;;;;; +13737;EGYPTIAN HIEROGLYPH-13737;Lo;0;L;;;;;N;;;;; +13738;EGYPTIAN HIEROGLYPH-13738;Lo;0;L;;;;;N;;;;; +13739;EGYPTIAN HIEROGLYPH-13739;Lo;0;L;;;;;N;;;;; +1373A;EGYPTIAN HIEROGLYPH-1373A;Lo;0;L;;;;;N;;;;; +1373B;EGYPTIAN HIEROGLYPH-1373B;Lo;0;L;;;;;N;;;;; +1373C;EGYPTIAN HIEROGLYPH-1373C;Lo;0;L;;;;;N;;;;; +1373D;EGYPTIAN HIEROGLYPH-1373D;Lo;0;L;;;;;N;;;;; +1373E;EGYPTIAN HIEROGLYPH-1373E;Lo;0;L;;;;;N;;;;; +1373F;EGYPTIAN HIEROGLYPH-1373F;Lo;0;L;;;;;N;;;;; +13740;EGYPTIAN HIEROGLYPH-13740;Lo;0;L;;;;;N;;;;; +13741;EGYPTIAN HIEROGLYPH-13741;Lo;0;L;;;;;N;;;;; +13742;EGYPTIAN HIEROGLYPH-13742;Lo;0;L;;;;;N;;;;; +13743;EGYPTIAN HIEROGLYPH-13743;Lo;0;L;;;;;N;;;;; +13744;EGYPTIAN HIEROGLYPH-13744;Lo;0;L;;;;;N;;;;; +13745;EGYPTIAN HIEROGLYPH-13745;Lo;0;L;;;;;N;;;;; +13746;EGYPTIAN HIEROGLYPH-13746;Lo;0;L;;;;;N;;;;; +13747;EGYPTIAN HIEROGLYPH-13747;Lo;0;L;;;;;N;;;;; +13748;EGYPTIAN HIEROGLYPH-13748;Lo;0;L;;;;;N;;;;; +13749;EGYPTIAN HIEROGLYPH-13749;Lo;0;L;;;;;N;;;;; +1374A;EGYPTIAN HIEROGLYPH-1374A;Lo;0;L;;;;;N;;;;; +1374B;EGYPTIAN HIEROGLYPH-1374B;Lo;0;L;;;;;N;;;;; +1374C;EGYPTIAN HIEROGLYPH-1374C;Lo;0;L;;;;;N;;;;; +1374D;EGYPTIAN HIEROGLYPH-1374D;Lo;0;L;;;;;N;;;;; +1374E;EGYPTIAN HIEROGLYPH-1374E;Lo;0;L;;;;;N;;;;; +1374F;EGYPTIAN HIEROGLYPH-1374F;Lo;0;L;;;;;N;;;;; +13750;EGYPTIAN HIEROGLYPH-13750;Lo;0;L;;;;;N;;;;; +13751;EGYPTIAN HIEROGLYPH-13751;Lo;0;L;;;;;N;;;;; +13752;EGYPTIAN HIEROGLYPH-13752;Lo;0;L;;;;;N;;;;; +13753;EGYPTIAN HIEROGLYPH-13753;Lo;0;L;;;;;N;;;;; +13754;EGYPTIAN HIEROGLYPH-13754;Lo;0;L;;;;;N;;;;; +13755;EGYPTIAN HIEROGLYPH-13755;Lo;0;L;;;;;N;;;;; +13756;EGYPTIAN HIEROGLYPH-13756;Lo;0;L;;;;;N;;;;; +13757;EGYPTIAN HIEROGLYPH-13757;Lo;0;L;;;;;N;;;;; +13758;EGYPTIAN HIEROGLYPH-13758;Lo;0;L;;;;;N;;;;; +13759;EGYPTIAN HIEROGLYPH-13759;Lo;0;L;;;;;N;;;;; +1375A;EGYPTIAN HIEROGLYPH-1375A;Lo;0;L;;;;;N;;;;; +1375B;EGYPTIAN HIEROGLYPH-1375B;Lo;0;L;;;;;N;;;;; +1375C;EGYPTIAN HIEROGLYPH-1375C;Lo;0;L;;;;;N;;;;; +1375D;EGYPTIAN HIEROGLYPH-1375D;Lo;0;L;;;;;N;;;;; +1375E;EGYPTIAN HIEROGLYPH-1375E;Lo;0;L;;;;;N;;;;; +1375F;EGYPTIAN HIEROGLYPH-1375F;Lo;0;L;;;;;N;;;;; +13760;EGYPTIAN HIEROGLYPH-13760;Lo;0;L;;;;;N;;;;; +13761;EGYPTIAN HIEROGLYPH-13761;Lo;0;L;;;;;N;;;;; +13762;EGYPTIAN HIEROGLYPH-13762;Lo;0;L;;;;;N;;;;; +13763;EGYPTIAN HIEROGLYPH-13763;Lo;0;L;;;;;N;;;;; +13764;EGYPTIAN HIEROGLYPH-13764;Lo;0;L;;;;;N;;;;; +13765;EGYPTIAN HIEROGLYPH-13765;Lo;0;L;;;;;N;;;;; +13766;EGYPTIAN HIEROGLYPH-13766;Lo;0;L;;;;;N;;;;; +13767;EGYPTIAN HIEROGLYPH-13767;Lo;0;L;;;;;N;;;;; +13768;EGYPTIAN HIEROGLYPH-13768;Lo;0;L;;;;;N;;;;; +13769;EGYPTIAN HIEROGLYPH-13769;Lo;0;L;;;;;N;;;;; +1376A;EGYPTIAN HIEROGLYPH-1376A;Lo;0;L;;;;;N;;;;; +1376B;EGYPTIAN HIEROGLYPH-1376B;Lo;0;L;;;;;N;;;;; +1376C;EGYPTIAN HIEROGLYPH-1376C;Lo;0;L;;;;;N;;;;; +1376D;EGYPTIAN HIEROGLYPH-1376D;Lo;0;L;;;;;N;;;;; +1376E;EGYPTIAN HIEROGLYPH-1376E;Lo;0;L;;;;;N;;;;; +1376F;EGYPTIAN HIEROGLYPH-1376F;Lo;0;L;;;;;N;;;;; +13770;EGYPTIAN HIEROGLYPH-13770;Lo;0;L;;;;;N;;;;; +13771;EGYPTIAN HIEROGLYPH-13771;Lo;0;L;;;;;N;;;;; +13772;EGYPTIAN HIEROGLYPH-13772;Lo;0;L;;;;;N;;;;; +13773;EGYPTIAN HIEROGLYPH-13773;Lo;0;L;;;;;N;;;;; +13774;EGYPTIAN HIEROGLYPH-13774;Lo;0;L;;;;;N;;;;; +13775;EGYPTIAN HIEROGLYPH-13775;Lo;0;L;;;;;N;;;;; +13776;EGYPTIAN HIEROGLYPH-13776;Lo;0;L;;;;;N;;;;; +13777;EGYPTIAN HIEROGLYPH-13777;Lo;0;L;;;;;N;;;;; +13778;EGYPTIAN HIEROGLYPH-13778;Lo;0;L;;;;;N;;;;; +13779;EGYPTIAN HIEROGLYPH-13779;Lo;0;L;;;;;N;;;;; +1377A;EGYPTIAN HIEROGLYPH-1377A;Lo;0;L;;;;;N;;;;; +1377B;EGYPTIAN HIEROGLYPH-1377B;Lo;0;L;;;;;N;;;;; +1377C;EGYPTIAN HIEROGLYPH-1377C;Lo;0;L;;;;;N;;;;; +1377D;EGYPTIAN HIEROGLYPH-1377D;Lo;0;L;;;;;N;;;;; +1377E;EGYPTIAN HIEROGLYPH-1377E;Lo;0;L;;;;;N;;;;; +1377F;EGYPTIAN HIEROGLYPH-1377F;Lo;0;L;;;;;N;;;;; +13780;EGYPTIAN HIEROGLYPH-13780;Lo;0;L;;;;;N;;;;; +13781;EGYPTIAN HIEROGLYPH-13781;Lo;0;L;;;;;N;;;;; +13782;EGYPTIAN HIEROGLYPH-13782;Lo;0;L;;;;;N;;;;; +13783;EGYPTIAN HIEROGLYPH-13783;Lo;0;L;;;;;N;;;;; +13784;EGYPTIAN HIEROGLYPH-13784;Lo;0;L;;;;;N;;;;; +13785;EGYPTIAN HIEROGLYPH-13785;Lo;0;L;;;;;N;;;;; +13786;EGYPTIAN HIEROGLYPH-13786;Lo;0;L;;;;;N;;;;; +13787;EGYPTIAN HIEROGLYPH-13787;Lo;0;L;;;;;N;;;;; +13788;EGYPTIAN HIEROGLYPH-13788;Lo;0;L;;;;;N;;;;; +13789;EGYPTIAN HIEROGLYPH-13789;Lo;0;L;;;;;N;;;;; +1378A;EGYPTIAN HIEROGLYPH-1378A;Lo;0;L;;;;;N;;;;; +1378B;EGYPTIAN HIEROGLYPH-1378B;Lo;0;L;;;;;N;;;;; +1378C;EGYPTIAN HIEROGLYPH-1378C;Lo;0;L;;;;;N;;;;; +1378D;EGYPTIAN HIEROGLYPH-1378D;Lo;0;L;;;;;N;;;;; +1378E;EGYPTIAN HIEROGLYPH-1378E;Lo;0;L;;;;;N;;;;; +1378F;EGYPTIAN HIEROGLYPH-1378F;Lo;0;L;;;;;N;;;;; +13790;EGYPTIAN HIEROGLYPH-13790;Lo;0;L;;;;;N;;;;; +13791;EGYPTIAN HIEROGLYPH-13791;Lo;0;L;;;;;N;;;;; +13792;EGYPTIAN HIEROGLYPH-13792;Lo;0;L;;;;;N;;;;; +13793;EGYPTIAN HIEROGLYPH-13793;Lo;0;L;;;;;N;;;;; +13794;EGYPTIAN HIEROGLYPH-13794;Lo;0;L;;;;;N;;;;; +13795;EGYPTIAN HIEROGLYPH-13795;Lo;0;L;;;;;N;;;;; +13796;EGYPTIAN HIEROGLYPH-13796;Lo;0;L;;;;;N;;;;; +13797;EGYPTIAN HIEROGLYPH-13797;Lo;0;L;;;;;N;;;;; +13798;EGYPTIAN HIEROGLYPH-13798;Lo;0;L;;;;;N;;;;; +13799;EGYPTIAN HIEROGLYPH-13799;Lo;0;L;;;;;N;;;;; +1379A;EGYPTIAN HIEROGLYPH-1379A;Lo;0;L;;;;;N;;;;; +1379B;EGYPTIAN HIEROGLYPH-1379B;Lo;0;L;;;;;N;;;;; +1379C;EGYPTIAN HIEROGLYPH-1379C;Lo;0;L;;;;;N;;;;; +1379D;EGYPTIAN HIEROGLYPH-1379D;Lo;0;L;;;;;N;;;;; +1379E;EGYPTIAN HIEROGLYPH-1379E;Lo;0;L;;;;;N;;;;; +1379F;EGYPTIAN HIEROGLYPH-1379F;Lo;0;L;;;;;N;;;;; +137A0;EGYPTIAN HIEROGLYPH-137A0;Lo;0;L;;;;;N;;;;; +137A1;EGYPTIAN HIEROGLYPH-137A1;Lo;0;L;;;;;N;;;;; +137A2;EGYPTIAN HIEROGLYPH-137A2;Lo;0;L;;;;;N;;;;; +137A3;EGYPTIAN HIEROGLYPH-137A3;Lo;0;L;;;;;N;;;;; +137A4;EGYPTIAN HIEROGLYPH-137A4;Lo;0;L;;;;;N;;;;; +137A5;EGYPTIAN HIEROGLYPH-137A5;Lo;0;L;;;;;N;;;;; +137A6;EGYPTIAN HIEROGLYPH-137A6;Lo;0;L;;;;;N;;;;; +137A7;EGYPTIAN HIEROGLYPH-137A7;Lo;0;L;;;;;N;;;;; +137A8;EGYPTIAN HIEROGLYPH-137A8;Lo;0;L;;;;;N;;;;; +137A9;EGYPTIAN HIEROGLYPH-137A9;Lo;0;L;;;;;N;;;;; +137AA;EGYPTIAN HIEROGLYPH-137AA;Lo;0;L;;;;;N;;;;; +137AB;EGYPTIAN HIEROGLYPH-137AB;Lo;0;L;;;;;N;;;;; +137AC;EGYPTIAN HIEROGLYPH-137AC;Lo;0;L;;;;;N;;;;; +137AD;EGYPTIAN HIEROGLYPH-137AD;Lo;0;L;;;;;N;;;;; +137AE;EGYPTIAN HIEROGLYPH-137AE;Lo;0;L;;;;;N;;;;; +137AF;EGYPTIAN HIEROGLYPH-137AF;Lo;0;L;;;;;N;;;;; +137B0;EGYPTIAN HIEROGLYPH-137B0;Lo;0;L;;;;;N;;;;; +137B1;EGYPTIAN HIEROGLYPH-137B1;Lo;0;L;;;;;N;;;;; +137B2;EGYPTIAN HIEROGLYPH-137B2;Lo;0;L;;;;;N;;;;; +137B3;EGYPTIAN HIEROGLYPH-137B3;Lo;0;L;;;;;N;;;;; +137B4;EGYPTIAN HIEROGLYPH-137B4;Lo;0;L;;;;;N;;;;; +137B5;EGYPTIAN HIEROGLYPH-137B5;Lo;0;L;;;;;N;;;;; +137B6;EGYPTIAN HIEROGLYPH-137B6;Lo;0;L;;;;;N;;;;; +137B7;EGYPTIAN HIEROGLYPH-137B7;Lo;0;L;;;;;N;;;;; +137B8;EGYPTIAN HIEROGLYPH-137B8;Lo;0;L;;;;;N;;;;; +137B9;EGYPTIAN HIEROGLYPH-137B9;Lo;0;L;;;;;N;;;;; +137BA;EGYPTIAN HIEROGLYPH-137BA;Lo;0;L;;;;;N;;;;; +137BB;EGYPTIAN HIEROGLYPH-137BB;Lo;0;L;;;;;N;;;;; +137BC;EGYPTIAN HIEROGLYPH-137BC;Lo;0;L;;;;;N;;;;; +137BD;EGYPTIAN HIEROGLYPH-137BD;Lo;0;L;;;;;N;;;;; +137BE;EGYPTIAN HIEROGLYPH-137BE;Lo;0;L;;;;;N;;;;; +137BF;EGYPTIAN HIEROGLYPH-137BF;Lo;0;L;;;;;N;;;;; +137C0;EGYPTIAN HIEROGLYPH-137C0;Lo;0;L;;;;;N;;;;; +137C1;EGYPTIAN HIEROGLYPH-137C1;Lo;0;L;;;;;N;;;;; +137C2;EGYPTIAN HIEROGLYPH-137C2;Lo;0;L;;;;;N;;;;; +137C3;EGYPTIAN HIEROGLYPH-137C3;Lo;0;L;;;;;N;;;;; +137C4;EGYPTIAN HIEROGLYPH-137C4;Lo;0;L;;;;;N;;;;; +137C5;EGYPTIAN HIEROGLYPH-137C5;Lo;0;L;;;;;N;;;;; +137C6;EGYPTIAN HIEROGLYPH-137C6;Lo;0;L;;;;;N;;;;; +137C7;EGYPTIAN HIEROGLYPH-137C7;Lo;0;L;;;;;N;;;;; +137C8;EGYPTIAN HIEROGLYPH-137C8;Lo;0;L;;;;;N;;;;; +137C9;EGYPTIAN HIEROGLYPH-137C9;Lo;0;L;;;;;N;;;;; +137CA;EGYPTIAN HIEROGLYPH-137CA;Lo;0;L;;;;;N;;;;; +137CB;EGYPTIAN HIEROGLYPH-137CB;Lo;0;L;;;;;N;;;;; +137CC;EGYPTIAN HIEROGLYPH-137CC;Lo;0;L;;;;;N;;;;; +137CD;EGYPTIAN HIEROGLYPH-137CD;Lo;0;L;;;;;N;;;;; +137CE;EGYPTIAN HIEROGLYPH-137CE;Lo;0;L;;;;;N;;;;; +137CF;EGYPTIAN HIEROGLYPH-137CF;Lo;0;L;;;;;N;;;;; +137D0;EGYPTIAN HIEROGLYPH-137D0;Lo;0;L;;;;;N;;;;; +137D1;EGYPTIAN HIEROGLYPH-137D1;Lo;0;L;;;;;N;;;;; +137D2;EGYPTIAN HIEROGLYPH-137D2;Lo;0;L;;;;;N;;;;; +137D3;EGYPTIAN HIEROGLYPH-137D3;Lo;0;L;;;;;N;;;;; +137D4;EGYPTIAN HIEROGLYPH-137D4;Lo;0;L;;;;;N;;;;; +137D5;EGYPTIAN HIEROGLYPH-137D5;Lo;0;L;;;;;N;;;;; +137D6;EGYPTIAN HIEROGLYPH-137D6;Lo;0;L;;;;;N;;;;; +137D7;EGYPTIAN HIEROGLYPH-137D7;Lo;0;L;;;;;N;;;;; +137D8;EGYPTIAN HIEROGLYPH-137D8;Lo;0;L;;;;;N;;;;; +137D9;EGYPTIAN HIEROGLYPH-137D9;Lo;0;L;;;;;N;;;;; +137DA;EGYPTIAN HIEROGLYPH-137DA;Lo;0;L;;;;;N;;;;; +137DB;EGYPTIAN HIEROGLYPH-137DB;Lo;0;L;;;;;N;;;;; +137DC;EGYPTIAN HIEROGLYPH-137DC;Lo;0;L;;;;;N;;;;; +137DD;EGYPTIAN HIEROGLYPH-137DD;Lo;0;L;;;;;N;;;;; +137DE;EGYPTIAN HIEROGLYPH-137DE;Lo;0;L;;;;;N;;;;; +137DF;EGYPTIAN HIEROGLYPH-137DF;Lo;0;L;;;;;N;;;;; +137E0;EGYPTIAN HIEROGLYPH-137E0;Lo;0;L;;;;;N;;;;; +137E1;EGYPTIAN HIEROGLYPH-137E1;Lo;0;L;;;;;N;;;;; +137E2;EGYPTIAN HIEROGLYPH-137E2;Lo;0;L;;;;;N;;;;; +137E3;EGYPTIAN HIEROGLYPH-137E3;Lo;0;L;;;;;N;;;;; +137E4;EGYPTIAN HIEROGLYPH-137E4;Lo;0;L;;;;;N;;;;; +137E5;EGYPTIAN HIEROGLYPH-137E5;Lo;0;L;;;;;N;;;;; +137E6;EGYPTIAN HIEROGLYPH-137E6;Lo;0;L;;;;;N;;;;; +137E7;EGYPTIAN HIEROGLYPH-137E7;Lo;0;L;;;;;N;;;;; +137E8;EGYPTIAN HIEROGLYPH-137E8;Lo;0;L;;;;;N;;;;; +137E9;EGYPTIAN HIEROGLYPH-137E9;Lo;0;L;;;;;N;;;;; +137EA;EGYPTIAN HIEROGLYPH-137EA;Lo;0;L;;;;;N;;;;; +137EB;EGYPTIAN HIEROGLYPH-137EB;Lo;0;L;;;;;N;;;;; +137EC;EGYPTIAN HIEROGLYPH-137EC;Lo;0;L;;;;;N;;;;; +137ED;EGYPTIAN HIEROGLYPH-137ED;Lo;0;L;;;;;N;;;;; +137EE;EGYPTIAN HIEROGLYPH-137EE;Lo;0;L;;;;;N;;;;; +137EF;EGYPTIAN HIEROGLYPH-137EF;Lo;0;L;;;;;N;;;;; +137F0;EGYPTIAN HIEROGLYPH-137F0;Lo;0;L;;;;;N;;;;; +137F1;EGYPTIAN HIEROGLYPH-137F1;Lo;0;L;;;;;N;;;;; +137F2;EGYPTIAN HIEROGLYPH-137F2;Lo;0;L;;;;;N;;;;; +137F3;EGYPTIAN HIEROGLYPH-137F3;Lo;0;L;;;;;N;;;;; +137F4;EGYPTIAN HIEROGLYPH-137F4;Lo;0;L;;;;;N;;;;; +137F5;EGYPTIAN HIEROGLYPH-137F5;Lo;0;L;;;;;N;;;;; +137F6;EGYPTIAN HIEROGLYPH-137F6;Lo;0;L;;;;;N;;;;; +137F7;EGYPTIAN HIEROGLYPH-137F7;Lo;0;L;;;;;N;;;;; +137F8;EGYPTIAN HIEROGLYPH-137F8;Lo;0;L;;;;;N;;;;; +137F9;EGYPTIAN HIEROGLYPH-137F9;Lo;0;L;;;;;N;;;;; +137FA;EGYPTIAN HIEROGLYPH-137FA;Lo;0;L;;;;;N;;;;; +137FB;EGYPTIAN HIEROGLYPH-137FB;Lo;0;L;;;;;N;;;;; +137FC;EGYPTIAN HIEROGLYPH-137FC;Lo;0;L;;;;;N;;;;; +137FD;EGYPTIAN HIEROGLYPH-137FD;Lo;0;L;;;;;N;;;;; +137FE;EGYPTIAN HIEROGLYPH-137FE;Lo;0;L;;;;;N;;;;; +137FF;EGYPTIAN HIEROGLYPH-137FF;Lo;0;L;;;;;N;;;;; +13800;EGYPTIAN HIEROGLYPH-13800;Lo;0;L;;;;;N;;;;; +13801;EGYPTIAN HIEROGLYPH-13801;Lo;0;L;;;;;N;;;;; +13802;EGYPTIAN HIEROGLYPH-13802;Lo;0;L;;;;;N;;;;; +13803;EGYPTIAN HIEROGLYPH-13803;Lo;0;L;;;;;N;;;;; +13804;EGYPTIAN HIEROGLYPH-13804;Lo;0;L;;;;;N;;;;; +13805;EGYPTIAN HIEROGLYPH-13805;Lo;0;L;;;;;N;;;;; +13806;EGYPTIAN HIEROGLYPH-13806;Lo;0;L;;;;;N;;;;; +13807;EGYPTIAN HIEROGLYPH-13807;Lo;0;L;;;;;N;;;;; +13808;EGYPTIAN HIEROGLYPH-13808;Lo;0;L;;;;;N;;;;; +13809;EGYPTIAN HIEROGLYPH-13809;Lo;0;L;;;;;N;;;;; +1380A;EGYPTIAN HIEROGLYPH-1380A;Lo;0;L;;;;;N;;;;; +1380B;EGYPTIAN HIEROGLYPH-1380B;Lo;0;L;;;;;N;;;;; +1380C;EGYPTIAN HIEROGLYPH-1380C;Lo;0;L;;;;;N;;;;; +1380D;EGYPTIAN HIEROGLYPH-1380D;Lo;0;L;;;;;N;;;;; +1380E;EGYPTIAN HIEROGLYPH-1380E;Lo;0;L;;;;;N;;;;; +1380F;EGYPTIAN HIEROGLYPH-1380F;Lo;0;L;;;;;N;;;;; +13810;EGYPTIAN HIEROGLYPH-13810;Lo;0;L;;;;;N;;;;; +13811;EGYPTIAN HIEROGLYPH-13811;Lo;0;L;;;;;N;;;;; +13812;EGYPTIAN HIEROGLYPH-13812;Lo;0;L;;;;;N;;;;; +13813;EGYPTIAN HIEROGLYPH-13813;Lo;0;L;;;;;N;;;;; +13814;EGYPTIAN HIEROGLYPH-13814;Lo;0;L;;;;;N;;;;; +13815;EGYPTIAN HIEROGLYPH-13815;Lo;0;L;;;;;N;;;;; +13816;EGYPTIAN HIEROGLYPH-13816;Lo;0;L;;;;;N;;;;; +13817;EGYPTIAN HIEROGLYPH-13817;Lo;0;L;;;;;N;;;;; +13818;EGYPTIAN HIEROGLYPH-13818;Lo;0;L;;;;;N;;;;; +13819;EGYPTIAN HIEROGLYPH-13819;Lo;0;L;;;;;N;;;;; +1381A;EGYPTIAN HIEROGLYPH-1381A;Lo;0;L;;;;;N;;;;; +1381B;EGYPTIAN HIEROGLYPH-1381B;Lo;0;L;;;;;N;;;;; +1381C;EGYPTIAN HIEROGLYPH-1381C;Lo;0;L;;;;;N;;;;; +1381D;EGYPTIAN HIEROGLYPH-1381D;Lo;0;L;;;;;N;;;;; +1381E;EGYPTIAN HIEROGLYPH-1381E;Lo;0;L;;;;;N;;;;; +1381F;EGYPTIAN HIEROGLYPH-1381F;Lo;0;L;;;;;N;;;;; +13820;EGYPTIAN HIEROGLYPH-13820;Lo;0;L;;;;;N;;;;; +13821;EGYPTIAN HIEROGLYPH-13821;Lo;0;L;;;;;N;;;;; +13822;EGYPTIAN HIEROGLYPH-13822;Lo;0;L;;;;;N;;;;; +13823;EGYPTIAN HIEROGLYPH-13823;Lo;0;L;;;;;N;;;;; +13824;EGYPTIAN HIEROGLYPH-13824;Lo;0;L;;;;;N;;;;; +13825;EGYPTIAN HIEROGLYPH-13825;Lo;0;L;;;;;N;;;;; +13826;EGYPTIAN HIEROGLYPH-13826;Lo;0;L;;;;;N;;;;; +13827;EGYPTIAN HIEROGLYPH-13827;Lo;0;L;;;;;N;;;;; +13828;EGYPTIAN HIEROGLYPH-13828;Lo;0;L;;;;;N;;;;; +13829;EGYPTIAN HIEROGLYPH-13829;Lo;0;L;;;;;N;;;;; +1382A;EGYPTIAN HIEROGLYPH-1382A;Lo;0;L;;;;;N;;;;; +1382B;EGYPTIAN HIEROGLYPH-1382B;Lo;0;L;;;;;N;;;;; +1382C;EGYPTIAN HIEROGLYPH-1382C;Lo;0;L;;;;;N;;;;; +1382D;EGYPTIAN HIEROGLYPH-1382D;Lo;0;L;;;;;N;;;;; +1382E;EGYPTIAN HIEROGLYPH-1382E;Lo;0;L;;;;;N;;;;; +1382F;EGYPTIAN HIEROGLYPH-1382F;Lo;0;L;;;;;N;;;;; +13830;EGYPTIAN HIEROGLYPH-13830;Lo;0;L;;;;;N;;;;; +13831;EGYPTIAN HIEROGLYPH-13831;Lo;0;L;;;;;N;;;;; +13832;EGYPTIAN HIEROGLYPH-13832;Lo;0;L;;;;;N;;;;; +13833;EGYPTIAN HIEROGLYPH-13833;Lo;0;L;;;;;N;;;;; +13834;EGYPTIAN HIEROGLYPH-13834;Lo;0;L;;;;;N;;;;; +13835;EGYPTIAN HIEROGLYPH-13835;Lo;0;L;;;;;N;;;;; +13836;EGYPTIAN HIEROGLYPH-13836;Lo;0;L;;;;;N;;;;; +13837;EGYPTIAN HIEROGLYPH-13837;Lo;0;L;;;;;N;;;;; +13838;EGYPTIAN HIEROGLYPH-13838;Lo;0;L;;;;;N;;;;; +13839;EGYPTIAN HIEROGLYPH-13839;Lo;0;L;;;;;N;;;;; +1383A;EGYPTIAN HIEROGLYPH-1383A;Lo;0;L;;;;;N;;;;; +1383B;EGYPTIAN HIEROGLYPH-1383B;Lo;0;L;;;;;N;;;;; +1383C;EGYPTIAN HIEROGLYPH-1383C;Lo;0;L;;;;;N;;;;; +1383D;EGYPTIAN HIEROGLYPH-1383D;Lo;0;L;;;;;N;;;;; +1383E;EGYPTIAN HIEROGLYPH-1383E;Lo;0;L;;;;;N;;;;; +1383F;EGYPTIAN HIEROGLYPH-1383F;Lo;0;L;;;;;N;;;;; +13840;EGYPTIAN HIEROGLYPH-13840;Lo;0;L;;;;;N;;;;; +13841;EGYPTIAN HIEROGLYPH-13841;Lo;0;L;;;;;N;;;;; +13842;EGYPTIAN HIEROGLYPH-13842;Lo;0;L;;;;;N;;;;; +13843;EGYPTIAN HIEROGLYPH-13843;Lo;0;L;;;;;N;;;;; +13844;EGYPTIAN HIEROGLYPH-13844;Lo;0;L;;;;;N;;;;; +13845;EGYPTIAN HIEROGLYPH-13845;Lo;0;L;;;;;N;;;;; +13846;EGYPTIAN HIEROGLYPH-13846;Lo;0;L;;;;;N;;;;; +13847;EGYPTIAN HIEROGLYPH-13847;Lo;0;L;;;;;N;;;;; +13848;EGYPTIAN HIEROGLYPH-13848;Lo;0;L;;;;;N;;;;; +13849;EGYPTIAN HIEROGLYPH-13849;Lo;0;L;;;;;N;;;;; +1384A;EGYPTIAN HIEROGLYPH-1384A;Lo;0;L;;;;;N;;;;; +1384B;EGYPTIAN HIEROGLYPH-1384B;Lo;0;L;;;;;N;;;;; +1384C;EGYPTIAN HIEROGLYPH-1384C;Lo;0;L;;;;;N;;;;; +1384D;EGYPTIAN HIEROGLYPH-1384D;Lo;0;L;;;;;N;;;;; +1384E;EGYPTIAN HIEROGLYPH-1384E;Lo;0;L;;;;;N;;;;; +1384F;EGYPTIAN HIEROGLYPH-1384F;Lo;0;L;;;;;N;;;;; +13850;EGYPTIAN HIEROGLYPH-13850;Lo;0;L;;;;;N;;;;; +13851;EGYPTIAN HIEROGLYPH-13851;Lo;0;L;;;;;N;;;;; +13852;EGYPTIAN HIEROGLYPH-13852;Lo;0;L;;;;;N;;;;; +13853;EGYPTIAN HIEROGLYPH-13853;Lo;0;L;;;;;N;;;;; +13854;EGYPTIAN HIEROGLYPH-13854;Lo;0;L;;;;;N;;;;; +13855;EGYPTIAN HIEROGLYPH-13855;Lo;0;L;;;;;N;;;;; +13856;EGYPTIAN HIEROGLYPH-13856;Lo;0;L;;;;;N;;;;; +13857;EGYPTIAN HIEROGLYPH-13857;Lo;0;L;;;;;N;;;;; +13858;EGYPTIAN HIEROGLYPH-13858;Lo;0;L;;;;;N;;;;; +13859;EGYPTIAN HIEROGLYPH-13859;Lo;0;L;;;;;N;;;;; +1385A;EGYPTIAN HIEROGLYPH-1385A;Lo;0;L;;;;;N;;;;; +1385B;EGYPTIAN HIEROGLYPH-1385B;Lo;0;L;;;;;N;;;;; +1385C;EGYPTIAN HIEROGLYPH-1385C;Lo;0;L;;;;;N;;;;; +1385D;EGYPTIAN HIEROGLYPH-1385D;Lo;0;L;;;;;N;;;;; +1385E;EGYPTIAN HIEROGLYPH-1385E;Lo;0;L;;;;;N;;;;; +1385F;EGYPTIAN HIEROGLYPH-1385F;Lo;0;L;;;;;N;;;;; +13860;EGYPTIAN HIEROGLYPH-13860;Lo;0;L;;;;;N;;;;; +13861;EGYPTIAN HIEROGLYPH-13861;Lo;0;L;;;;;N;;;;; +13862;EGYPTIAN HIEROGLYPH-13862;Lo;0;L;;;;;N;;;;; +13863;EGYPTIAN HIEROGLYPH-13863;Lo;0;L;;;;;N;;;;; +13864;EGYPTIAN HIEROGLYPH-13864;Lo;0;L;;;;;N;;;;; +13865;EGYPTIAN HIEROGLYPH-13865;Lo;0;L;;;;;N;;;;; +13866;EGYPTIAN HIEROGLYPH-13866;Lo;0;L;;;;;N;;;;; +13867;EGYPTIAN HIEROGLYPH-13867;Lo;0;L;;;;;N;;;;; +13868;EGYPTIAN HIEROGLYPH-13868;Lo;0;L;;;;;N;;;;; +13869;EGYPTIAN HIEROGLYPH-13869;Lo;0;L;;;;;N;;;;; +1386A;EGYPTIAN HIEROGLYPH-1386A;Lo;0;L;;;;;N;;;;; +1386B;EGYPTIAN HIEROGLYPH-1386B;Lo;0;L;;;;;N;;;;; +1386C;EGYPTIAN HIEROGLYPH-1386C;Lo;0;L;;;;;N;;;;; +1386D;EGYPTIAN HIEROGLYPH-1386D;Lo;0;L;;;;;N;;;;; +1386E;EGYPTIAN HIEROGLYPH-1386E;Lo;0;L;;;;;N;;;;; +1386F;EGYPTIAN HIEROGLYPH-1386F;Lo;0;L;;;;;N;;;;; +13870;EGYPTIAN HIEROGLYPH-13870;Lo;0;L;;;;;N;;;;; +13871;EGYPTIAN HIEROGLYPH-13871;Lo;0;L;;;;;N;;;;; +13872;EGYPTIAN HIEROGLYPH-13872;Lo;0;L;;;;;N;;;;; +13873;EGYPTIAN HIEROGLYPH-13873;Lo;0;L;;;;;N;;;;; +13874;EGYPTIAN HIEROGLYPH-13874;Lo;0;L;;;;;N;;;;; +13875;EGYPTIAN HIEROGLYPH-13875;Lo;0;L;;;;;N;;;;; +13876;EGYPTIAN HIEROGLYPH-13876;Lo;0;L;;;;;N;;;;; +13877;EGYPTIAN HIEROGLYPH-13877;Lo;0;L;;;;;N;;;;; +13878;EGYPTIAN HIEROGLYPH-13878;Lo;0;L;;;;;N;;;;; +13879;EGYPTIAN HIEROGLYPH-13879;Lo;0;L;;;;;N;;;;; +1387A;EGYPTIAN HIEROGLYPH-1387A;Lo;0;L;;;;;N;;;;; +1387B;EGYPTIAN HIEROGLYPH-1387B;Lo;0;L;;;;;N;;;;; +1387C;EGYPTIAN HIEROGLYPH-1387C;Lo;0;L;;;;;N;;;;; +1387D;EGYPTIAN HIEROGLYPH-1387D;Lo;0;L;;;;;N;;;;; +1387E;EGYPTIAN HIEROGLYPH-1387E;Lo;0;L;;;;;N;;;;; +1387F;EGYPTIAN HIEROGLYPH-1387F;Lo;0;L;;;;;N;;;;; +13880;EGYPTIAN HIEROGLYPH-13880;Lo;0;L;;;;;N;;;;; +13881;EGYPTIAN HIEROGLYPH-13881;Lo;0;L;;;;;N;;;;; +13882;EGYPTIAN HIEROGLYPH-13882;Lo;0;L;;;;;N;;;;; +13883;EGYPTIAN HIEROGLYPH-13883;Lo;0;L;;;;;N;;;;; +13884;EGYPTIAN HIEROGLYPH-13884;Lo;0;L;;;;;N;;;;; +13885;EGYPTIAN HIEROGLYPH-13885;Lo;0;L;;;;;N;;;;; +13886;EGYPTIAN HIEROGLYPH-13886;Lo;0;L;;;;;N;;;;; +13887;EGYPTIAN HIEROGLYPH-13887;Lo;0;L;;;;;N;;;;; +13888;EGYPTIAN HIEROGLYPH-13888;Lo;0;L;;;;;N;;;;; +13889;EGYPTIAN HIEROGLYPH-13889;Lo;0;L;;;;;N;;;;; +1388A;EGYPTIAN HIEROGLYPH-1388A;Lo;0;L;;;;;N;;;;; +1388B;EGYPTIAN HIEROGLYPH-1388B;Lo;0;L;;;;;N;;;;; +1388C;EGYPTIAN HIEROGLYPH-1388C;Lo;0;L;;;;;N;;;;; +1388D;EGYPTIAN HIEROGLYPH-1388D;Lo;0;L;;;;;N;;;;; +1388E;EGYPTIAN HIEROGLYPH-1388E;Lo;0;L;;;;;N;;;;; +1388F;EGYPTIAN HIEROGLYPH-1388F;Lo;0;L;;;;;N;;;;; +13890;EGYPTIAN HIEROGLYPH-13890;Lo;0;L;;;;;N;;;;; +13891;EGYPTIAN HIEROGLYPH-13891;Lo;0;L;;;;;N;;;;; +13892;EGYPTIAN HIEROGLYPH-13892;Lo;0;L;;;;;N;;;;; +13893;EGYPTIAN HIEROGLYPH-13893;Lo;0;L;;;;;N;;;;; +13894;EGYPTIAN HIEROGLYPH-13894;Lo;0;L;;;;;N;;;;; +13895;EGYPTIAN HIEROGLYPH-13895;Lo;0;L;;;;;N;;;;; +13896;EGYPTIAN HIEROGLYPH-13896;Lo;0;L;;;;;N;;;;; +13897;EGYPTIAN HIEROGLYPH-13897;Lo;0;L;;;;;N;;;;; +13898;EGYPTIAN HIEROGLYPH-13898;Lo;0;L;;;;;N;;;;; +13899;EGYPTIAN HIEROGLYPH-13899;Lo;0;L;;;;;N;;;;; +1389A;EGYPTIAN HIEROGLYPH-1389A;Lo;0;L;;;;;N;;;;; +1389B;EGYPTIAN HIEROGLYPH-1389B;Lo;0;L;;;;;N;;;;; +1389C;EGYPTIAN HIEROGLYPH-1389C;Lo;0;L;;;;;N;;;;; +1389D;EGYPTIAN HIEROGLYPH-1389D;Lo;0;L;;;;;N;;;;; +1389E;EGYPTIAN HIEROGLYPH-1389E;Lo;0;L;;;;;N;;;;; +1389F;EGYPTIAN HIEROGLYPH-1389F;Lo;0;L;;;;;N;;;;; +138A0;EGYPTIAN HIEROGLYPH-138A0;Lo;0;L;;;;;N;;;;; +138A1;EGYPTIAN HIEROGLYPH-138A1;Lo;0;L;;;;;N;;;;; +138A2;EGYPTIAN HIEROGLYPH-138A2;Lo;0;L;;;;;N;;;;; +138A3;EGYPTIAN HIEROGLYPH-138A3;Lo;0;L;;;;;N;;;;; +138A4;EGYPTIAN HIEROGLYPH-138A4;Lo;0;L;;;;;N;;;;; +138A5;EGYPTIAN HIEROGLYPH-138A5;Lo;0;L;;;;;N;;;;; +138A6;EGYPTIAN HIEROGLYPH-138A6;Lo;0;L;;;;;N;;;;; +138A7;EGYPTIAN HIEROGLYPH-138A7;Lo;0;L;;;;;N;;;;; +138A8;EGYPTIAN HIEROGLYPH-138A8;Lo;0;L;;;;;N;;;;; +138A9;EGYPTIAN HIEROGLYPH-138A9;Lo;0;L;;;;;N;;;;; +138AA;EGYPTIAN HIEROGLYPH-138AA;Lo;0;L;;;;;N;;;;; +138AB;EGYPTIAN HIEROGLYPH-138AB;Lo;0;L;;;;;N;;;;; +138AC;EGYPTIAN HIEROGLYPH-138AC;Lo;0;L;;;;;N;;;;; +138AD;EGYPTIAN HIEROGLYPH-138AD;Lo;0;L;;;;;N;;;;; +138AE;EGYPTIAN HIEROGLYPH-138AE;Lo;0;L;;;;;N;;;;; +138AF;EGYPTIAN HIEROGLYPH-138AF;Lo;0;L;;;;;N;;;;; +138B0;EGYPTIAN HIEROGLYPH-138B0;Lo;0;L;;;;;N;;;;; +138B1;EGYPTIAN HIEROGLYPH-138B1;Lo;0;L;;;;;N;;;;; +138B2;EGYPTIAN HIEROGLYPH-138B2;Lo;0;L;;;;;N;;;;; +138B3;EGYPTIAN HIEROGLYPH-138B3;Lo;0;L;;;;;N;;;;; +138B4;EGYPTIAN HIEROGLYPH-138B4;Lo;0;L;;;;;N;;;;; +138B5;EGYPTIAN HIEROGLYPH-138B5;Lo;0;L;;;;;N;;;;; +138B6;EGYPTIAN HIEROGLYPH-138B6;Lo;0;L;;;;;N;;;;; +138B7;EGYPTIAN HIEROGLYPH-138B7;Lo;0;L;;;;;N;;;;; +138B8;EGYPTIAN HIEROGLYPH-138B8;Lo;0;L;;;;;N;;;;; +138B9;EGYPTIAN HIEROGLYPH-138B9;Lo;0;L;;;;;N;;;;; +138BA;EGYPTIAN HIEROGLYPH-138BA;Lo;0;L;;;;;N;;;;; +138BB;EGYPTIAN HIEROGLYPH-138BB;Lo;0;L;;;;;N;;;;; +138BC;EGYPTIAN HIEROGLYPH-138BC;Lo;0;L;;;;;N;;;;; +138BD;EGYPTIAN HIEROGLYPH-138BD;Lo;0;L;;;;;N;;;;; +138BE;EGYPTIAN HIEROGLYPH-138BE;Lo;0;L;;;;;N;;;;; +138BF;EGYPTIAN HIEROGLYPH-138BF;Lo;0;L;;;;;N;;;;; +138C0;EGYPTIAN HIEROGLYPH-138C0;Lo;0;L;;;;;N;;;;; +138C1;EGYPTIAN HIEROGLYPH-138C1;Lo;0;L;;;;;N;;;;; +138C2;EGYPTIAN HIEROGLYPH-138C2;Lo;0;L;;;;;N;;;;; +138C3;EGYPTIAN HIEROGLYPH-138C3;Lo;0;L;;;;;N;;;;; +138C4;EGYPTIAN HIEROGLYPH-138C4;Lo;0;L;;;;;N;;;;; +138C5;EGYPTIAN HIEROGLYPH-138C5;Lo;0;L;;;;;N;;;;; +138C6;EGYPTIAN HIEROGLYPH-138C6;Lo;0;L;;;;;N;;;;; +138C7;EGYPTIAN HIEROGLYPH-138C7;Lo;0;L;;;;;N;;;;; +138C8;EGYPTIAN HIEROGLYPH-138C8;Lo;0;L;;;;;N;;;;; +138C9;EGYPTIAN HIEROGLYPH-138C9;Lo;0;L;;;;;N;;;;; +138CA;EGYPTIAN HIEROGLYPH-138CA;Lo;0;L;;;;;N;;;;; +138CB;EGYPTIAN HIEROGLYPH-138CB;Lo;0;L;;;;;N;;;;; +138CC;EGYPTIAN HIEROGLYPH-138CC;Lo;0;L;;;;;N;;;;; +138CD;EGYPTIAN HIEROGLYPH-138CD;Lo;0;L;;;;;N;;;;; +138CE;EGYPTIAN HIEROGLYPH-138CE;Lo;0;L;;;;;N;;;;; +138CF;EGYPTIAN HIEROGLYPH-138CF;Lo;0;L;;;;;N;;;;; +138D0;EGYPTIAN HIEROGLYPH-138D0;Lo;0;L;;;;;N;;;;; +138D1;EGYPTIAN HIEROGLYPH-138D1;Lo;0;L;;;;;N;;;;; +138D2;EGYPTIAN HIEROGLYPH-138D2;Lo;0;L;;;;;N;;;;; +138D3;EGYPTIAN HIEROGLYPH-138D3;Lo;0;L;;;;;N;;;;; +138D4;EGYPTIAN HIEROGLYPH-138D4;Lo;0;L;;;;;N;;;;; +138D5;EGYPTIAN HIEROGLYPH-138D5;Lo;0;L;;;;;N;;;;; +138D6;EGYPTIAN HIEROGLYPH-138D6;Lo;0;L;;;;;N;;;;; +138D7;EGYPTIAN HIEROGLYPH-138D7;Lo;0;L;;;;;N;;;;; +138D8;EGYPTIAN HIEROGLYPH-138D8;Lo;0;L;;;;;N;;;;; +138D9;EGYPTIAN HIEROGLYPH-138D9;Lo;0;L;;;;;N;;;;; +138DA;EGYPTIAN HIEROGLYPH-138DA;Lo;0;L;;;;;N;;;;; +138DB;EGYPTIAN HIEROGLYPH-138DB;Lo;0;L;;;;;N;;;;; +138DC;EGYPTIAN HIEROGLYPH-138DC;Lo;0;L;;;;;N;;;;; +138DD;EGYPTIAN HIEROGLYPH-138DD;Lo;0;L;;;;;N;;;;; +138DE;EGYPTIAN HIEROGLYPH-138DE;Lo;0;L;;;;;N;;;;; +138DF;EGYPTIAN HIEROGLYPH-138DF;Lo;0;L;;;;;N;;;;; +138E0;EGYPTIAN HIEROGLYPH-138E0;Lo;0;L;;;;;N;;;;; +138E1;EGYPTIAN HIEROGLYPH-138E1;Lo;0;L;;;;;N;;;;; +138E2;EGYPTIAN HIEROGLYPH-138E2;Lo;0;L;;;;;N;;;;; +138E3;EGYPTIAN HIEROGLYPH-138E3;Lo;0;L;;;;;N;;;;; +138E4;EGYPTIAN HIEROGLYPH-138E4;Lo;0;L;;;;;N;;;;; +138E5;EGYPTIAN HIEROGLYPH-138E5;Lo;0;L;;;;;N;;;;; +138E6;EGYPTIAN HIEROGLYPH-138E6;Lo;0;L;;;;;N;;;;; +138E7;EGYPTIAN HIEROGLYPH-138E7;Lo;0;L;;;;;N;;;;; +138E8;EGYPTIAN HIEROGLYPH-138E8;Lo;0;L;;;;;N;;;;; +138E9;EGYPTIAN HIEROGLYPH-138E9;Lo;0;L;;;;;N;;;;; +138EA;EGYPTIAN HIEROGLYPH-138EA;Lo;0;L;;;;;N;;;;; +138EB;EGYPTIAN HIEROGLYPH-138EB;Lo;0;L;;;;;N;;;;; +138EC;EGYPTIAN HIEROGLYPH-138EC;Lo;0;L;;;;;N;;;;; +138ED;EGYPTIAN HIEROGLYPH-138ED;Lo;0;L;;;;;N;;;;; +138EE;EGYPTIAN HIEROGLYPH-138EE;Lo;0;L;;;;;N;;;;; +138EF;EGYPTIAN HIEROGLYPH-138EF;Lo;0;L;;;;;N;;;;; +138F0;EGYPTIAN HIEROGLYPH-138F0;Lo;0;L;;;;;N;;;;; +138F1;EGYPTIAN HIEROGLYPH-138F1;Lo;0;L;;;;;N;;;;; +138F2;EGYPTIAN HIEROGLYPH-138F2;Lo;0;L;;;;;N;;;;; +138F3;EGYPTIAN HIEROGLYPH-138F3;Lo;0;L;;;;;N;;;;; +138F4;EGYPTIAN HIEROGLYPH-138F4;Lo;0;L;;;;;N;;;;; +138F5;EGYPTIAN HIEROGLYPH-138F5;Lo;0;L;;;;;N;;;;; +138F6;EGYPTIAN HIEROGLYPH-138F6;Lo;0;L;;;;;N;;;;; +138F7;EGYPTIAN HIEROGLYPH-138F7;Lo;0;L;;;;;N;;;;; +138F8;EGYPTIAN HIEROGLYPH-138F8;Lo;0;L;;;;;N;;;;; +138F9;EGYPTIAN HIEROGLYPH-138F9;Lo;0;L;;;;;N;;;;; +138FA;EGYPTIAN HIEROGLYPH-138FA;Lo;0;L;;;;;N;;;;; +138FB;EGYPTIAN HIEROGLYPH-138FB;Lo;0;L;;;;;N;;;;; +138FC;EGYPTIAN HIEROGLYPH-138FC;Lo;0;L;;;;;N;;;;; +138FD;EGYPTIAN HIEROGLYPH-138FD;Lo;0;L;;;;;N;;;;; +138FE;EGYPTIAN HIEROGLYPH-138FE;Lo;0;L;;;;;N;;;;; +138FF;EGYPTIAN HIEROGLYPH-138FF;Lo;0;L;;;;;N;;;;; +13900;EGYPTIAN HIEROGLYPH-13900;Lo;0;L;;;;;N;;;;; +13901;EGYPTIAN HIEROGLYPH-13901;Lo;0;L;;;;;N;;;;; +13902;EGYPTIAN HIEROGLYPH-13902;Lo;0;L;;;;;N;;;;; +13903;EGYPTIAN HIEROGLYPH-13903;Lo;0;L;;;;;N;;;;; +13904;EGYPTIAN HIEROGLYPH-13904;Lo;0;L;;;;;N;;;;; +13905;EGYPTIAN HIEROGLYPH-13905;Lo;0;L;;;;;N;;;;; +13906;EGYPTIAN HIEROGLYPH-13906;Lo;0;L;;;;;N;;;;; +13907;EGYPTIAN HIEROGLYPH-13907;Lo;0;L;;;;;N;;;;; +13908;EGYPTIAN HIEROGLYPH-13908;Lo;0;L;;;;;N;;;;; +13909;EGYPTIAN HIEROGLYPH-13909;Lo;0;L;;;;;N;;;;; +1390A;EGYPTIAN HIEROGLYPH-1390A;Lo;0;L;;;;;N;;;;; +1390B;EGYPTIAN HIEROGLYPH-1390B;Lo;0;L;;;;;N;;;;; +1390C;EGYPTIAN HIEROGLYPH-1390C;Lo;0;L;;;;;N;;;;; +1390D;EGYPTIAN HIEROGLYPH-1390D;Lo;0;L;;;;;N;;;;; +1390E;EGYPTIAN HIEROGLYPH-1390E;Lo;0;L;;;;;N;;;;; +1390F;EGYPTIAN HIEROGLYPH-1390F;Lo;0;L;;;;;N;;;;; +13910;EGYPTIAN HIEROGLYPH-13910;Lo;0;L;;;;;N;;;;; +13911;EGYPTIAN HIEROGLYPH-13911;Lo;0;L;;;;;N;;;;; +13912;EGYPTIAN HIEROGLYPH-13912;Lo;0;L;;;;;N;;;;; +13913;EGYPTIAN HIEROGLYPH-13913;Lo;0;L;;;;;N;;;;; +13914;EGYPTIAN HIEROGLYPH-13914;Lo;0;L;;;;;N;;;;; +13915;EGYPTIAN HIEROGLYPH-13915;Lo;0;L;;;;;N;;;;; +13916;EGYPTIAN HIEROGLYPH-13916;Lo;0;L;;;;;N;;;;; +13917;EGYPTIAN HIEROGLYPH-13917;Lo;0;L;;;;;N;;;;; +13918;EGYPTIAN HIEROGLYPH-13918;Lo;0;L;;;;;N;;;;; +13919;EGYPTIAN HIEROGLYPH-13919;Lo;0;L;;;;;N;;;;; +1391A;EGYPTIAN HIEROGLYPH-1391A;Lo;0;L;;;;;N;;;;; +1391B;EGYPTIAN HIEROGLYPH-1391B;Lo;0;L;;;;;N;;;;; +1391C;EGYPTIAN HIEROGLYPH-1391C;Lo;0;L;;;;;N;;;;; +1391D;EGYPTIAN HIEROGLYPH-1391D;Lo;0;L;;;;;N;;;;; +1391E;EGYPTIAN HIEROGLYPH-1391E;Lo;0;L;;;;;N;;;;; +1391F;EGYPTIAN HIEROGLYPH-1391F;Lo;0;L;;;;;N;;;;; +13920;EGYPTIAN HIEROGLYPH-13920;Lo;0;L;;;;;N;;;;; +13921;EGYPTIAN HIEROGLYPH-13921;Lo;0;L;;;;;N;;;;; +13922;EGYPTIAN HIEROGLYPH-13922;Lo;0;L;;;;;N;;;;; +13923;EGYPTIAN HIEROGLYPH-13923;Lo;0;L;;;;;N;;;;; +13924;EGYPTIAN HIEROGLYPH-13924;Lo;0;L;;;;;N;;;;; +13925;EGYPTIAN HIEROGLYPH-13925;Lo;0;L;;;;;N;;;;; +13926;EGYPTIAN HIEROGLYPH-13926;Lo;0;L;;;;;N;;;;; +13927;EGYPTIAN HIEROGLYPH-13927;Lo;0;L;;;;;N;;;;; +13928;EGYPTIAN HIEROGLYPH-13928;Lo;0;L;;;;;N;;;;; +13929;EGYPTIAN HIEROGLYPH-13929;Lo;0;L;;;;;N;;;;; +1392A;EGYPTIAN HIEROGLYPH-1392A;Lo;0;L;;;;;N;;;;; +1392B;EGYPTIAN HIEROGLYPH-1392B;Lo;0;L;;;;;N;;;;; +1392C;EGYPTIAN HIEROGLYPH-1392C;Lo;0;L;;;;;N;;;;; +1392D;EGYPTIAN HIEROGLYPH-1392D;Lo;0;L;;;;;N;;;;; +1392E;EGYPTIAN HIEROGLYPH-1392E;Lo;0;L;;;;;N;;;;; +1392F;EGYPTIAN HIEROGLYPH-1392F;Lo;0;L;;;;;N;;;;; +13930;EGYPTIAN HIEROGLYPH-13930;Lo;0;L;;;;;N;;;;; +13931;EGYPTIAN HIEROGLYPH-13931;Lo;0;L;;;;;N;;;;; +13932;EGYPTIAN HIEROGLYPH-13932;Lo;0;L;;;;;N;;;;; +13933;EGYPTIAN HIEROGLYPH-13933;Lo;0;L;;;;;N;;;;; +13934;EGYPTIAN HIEROGLYPH-13934;Lo;0;L;;;;;N;;;;; +13935;EGYPTIAN HIEROGLYPH-13935;Lo;0;L;;;;;N;;;;; +13936;EGYPTIAN HIEROGLYPH-13936;Lo;0;L;;;;;N;;;;; +13937;EGYPTIAN HIEROGLYPH-13937;Lo;0;L;;;;;N;;;;; +13938;EGYPTIAN HIEROGLYPH-13938;Lo;0;L;;;;;N;;;;; +13939;EGYPTIAN HIEROGLYPH-13939;Lo;0;L;;;;;N;;;;; +1393A;EGYPTIAN HIEROGLYPH-1393A;Lo;0;L;;;;;N;;;;; +1393B;EGYPTIAN HIEROGLYPH-1393B;Lo;0;L;;;;;N;;;;; +1393C;EGYPTIAN HIEROGLYPH-1393C;Lo;0;L;;;;;N;;;;; +1393D;EGYPTIAN HIEROGLYPH-1393D;Lo;0;L;;;;;N;;;;; +1393E;EGYPTIAN HIEROGLYPH-1393E;Lo;0;L;;;;;N;;;;; +1393F;EGYPTIAN HIEROGLYPH-1393F;Lo;0;L;;;;;N;;;;; +13940;EGYPTIAN HIEROGLYPH-13940;Lo;0;L;;;;;N;;;;; +13941;EGYPTIAN HIEROGLYPH-13941;Lo;0;L;;;;;N;;;;; +13942;EGYPTIAN HIEROGLYPH-13942;Lo;0;L;;;;;N;;;;; +13943;EGYPTIAN HIEROGLYPH-13943;Lo;0;L;;;;;N;;;;; +13944;EGYPTIAN HIEROGLYPH-13944;Lo;0;L;;;;;N;;;;; +13945;EGYPTIAN HIEROGLYPH-13945;Lo;0;L;;;;;N;;;;; +13946;EGYPTIAN HIEROGLYPH-13946;Lo;0;L;;;;;N;;;;; +13947;EGYPTIAN HIEROGLYPH-13947;Lo;0;L;;;;;N;;;;; +13948;EGYPTIAN HIEROGLYPH-13948;Lo;0;L;;;;;N;;;;; +13949;EGYPTIAN HIEROGLYPH-13949;Lo;0;L;;;;;N;;;;; +1394A;EGYPTIAN HIEROGLYPH-1394A;Lo;0;L;;;;;N;;;;; +1394B;EGYPTIAN HIEROGLYPH-1394B;Lo;0;L;;;;;N;;;;; +1394C;EGYPTIAN HIEROGLYPH-1394C;Lo;0;L;;;;;N;;;;; +1394D;EGYPTIAN HIEROGLYPH-1394D;Lo;0;L;;;;;N;;;;; +1394E;EGYPTIAN HIEROGLYPH-1394E;Lo;0;L;;;;;N;;;;; +1394F;EGYPTIAN HIEROGLYPH-1394F;Lo;0;L;;;;;N;;;;; +13950;EGYPTIAN HIEROGLYPH-13950;Lo;0;L;;;;;N;;;;; +13951;EGYPTIAN HIEROGLYPH-13951;Lo;0;L;;;;;N;;;;; +13952;EGYPTIAN HIEROGLYPH-13952;Lo;0;L;;;;;N;;;;; +13953;EGYPTIAN HIEROGLYPH-13953;Lo;0;L;;;;;N;;;;; +13954;EGYPTIAN HIEROGLYPH-13954;Lo;0;L;;;;;N;;;;; +13955;EGYPTIAN HIEROGLYPH-13955;Lo;0;L;;;;;N;;;;; +13956;EGYPTIAN HIEROGLYPH-13956;Lo;0;L;;;;;N;;;;; +13957;EGYPTIAN HIEROGLYPH-13957;Lo;0;L;;;;;N;;;;; +13958;EGYPTIAN HIEROGLYPH-13958;Lo;0;L;;;;;N;;;;; +13959;EGYPTIAN HIEROGLYPH-13959;Lo;0;L;;;;;N;;;;; +1395A;EGYPTIAN HIEROGLYPH-1395A;Lo;0;L;;;;;N;;;;; +1395B;EGYPTIAN HIEROGLYPH-1395B;Lo;0;L;;;;;N;;;;; +1395C;EGYPTIAN HIEROGLYPH-1395C;Lo;0;L;;;;;N;;;;; +1395D;EGYPTIAN HIEROGLYPH-1395D;Lo;0;L;;;;;N;;;;; +1395E;EGYPTIAN HIEROGLYPH-1395E;Lo;0;L;;;;;N;;;;; +1395F;EGYPTIAN HIEROGLYPH-1395F;Lo;0;L;;;;;N;;;;; +13960;EGYPTIAN HIEROGLYPH-13960;Lo;0;L;;;;;N;;;;; +13961;EGYPTIAN HIEROGLYPH-13961;Lo;0;L;;;;;N;;;;; +13962;EGYPTIAN HIEROGLYPH-13962;Lo;0;L;;;;;N;;;;; +13963;EGYPTIAN HIEROGLYPH-13963;Lo;0;L;;;;;N;;;;; +13964;EGYPTIAN HIEROGLYPH-13964;Lo;0;L;;;;;N;;;;; +13965;EGYPTIAN HIEROGLYPH-13965;Lo;0;L;;;;;N;;;;; +13966;EGYPTIAN HIEROGLYPH-13966;Lo;0;L;;;;;N;;;;; +13967;EGYPTIAN HIEROGLYPH-13967;Lo;0;L;;;;;N;;;;; +13968;EGYPTIAN HIEROGLYPH-13968;Lo;0;L;;;;;N;;;;; +13969;EGYPTIAN HIEROGLYPH-13969;Lo;0;L;;;;;N;;;;; +1396A;EGYPTIAN HIEROGLYPH-1396A;Lo;0;L;;;;;N;;;;; +1396B;EGYPTIAN HIEROGLYPH-1396B;Lo;0;L;;;;;N;;;;; +1396C;EGYPTIAN HIEROGLYPH-1396C;Lo;0;L;;;;;N;;;;; +1396D;EGYPTIAN HIEROGLYPH-1396D;Lo;0;L;;;;;N;;;;; +1396E;EGYPTIAN HIEROGLYPH-1396E;Lo;0;L;;;;;N;;;;; +1396F;EGYPTIAN HIEROGLYPH-1396F;Lo;0;L;;;;;N;;;;; +13970;EGYPTIAN HIEROGLYPH-13970;Lo;0;L;;;;;N;;;;; +13971;EGYPTIAN HIEROGLYPH-13971;Lo;0;L;;;;;N;;;;; +13972;EGYPTIAN HIEROGLYPH-13972;Lo;0;L;;;;;N;;;;; +13973;EGYPTIAN HIEROGLYPH-13973;Lo;0;L;;;;;N;;;;; +13974;EGYPTIAN HIEROGLYPH-13974;Lo;0;L;;;;;N;;;;; +13975;EGYPTIAN HIEROGLYPH-13975;Lo;0;L;;;;;N;;;;; +13976;EGYPTIAN HIEROGLYPH-13976;Lo;0;L;;;;;N;;;;; +13977;EGYPTIAN HIEROGLYPH-13977;Lo;0;L;;;;;N;;;;; +13978;EGYPTIAN HIEROGLYPH-13978;Lo;0;L;;;;;N;;;;; +13979;EGYPTIAN HIEROGLYPH-13979;Lo;0;L;;;;;N;;;;; +1397A;EGYPTIAN HIEROGLYPH-1397A;Lo;0;L;;;;;N;;;;; +1397B;EGYPTIAN HIEROGLYPH-1397B;Lo;0;L;;;;;N;;;;; +1397C;EGYPTIAN HIEROGLYPH-1397C;Lo;0;L;;;;;N;;;;; +1397D;EGYPTIAN HIEROGLYPH-1397D;Lo;0;L;;;;;N;;;;; +1397E;EGYPTIAN HIEROGLYPH-1397E;Lo;0;L;;;;;N;;;;; +1397F;EGYPTIAN HIEROGLYPH-1397F;Lo;0;L;;;;;N;;;;; +13980;EGYPTIAN HIEROGLYPH-13980;Lo;0;L;;;;;N;;;;; +13981;EGYPTIAN HIEROGLYPH-13981;Lo;0;L;;;;;N;;;;; +13982;EGYPTIAN HIEROGLYPH-13982;Lo;0;L;;;;;N;;;;; +13983;EGYPTIAN HIEROGLYPH-13983;Lo;0;L;;;;;N;;;;; +13984;EGYPTIAN HIEROGLYPH-13984;Lo;0;L;;;;;N;;;;; +13985;EGYPTIAN HIEROGLYPH-13985;Lo;0;L;;;;;N;;;;; +13986;EGYPTIAN HIEROGLYPH-13986;Lo;0;L;;;;;N;;;;; +13987;EGYPTIAN HIEROGLYPH-13987;Lo;0;L;;;;;N;;;;; +13988;EGYPTIAN HIEROGLYPH-13988;Lo;0;L;;;;;N;;;;; +13989;EGYPTIAN HIEROGLYPH-13989;Lo;0;L;;;;;N;;;;; +1398A;EGYPTIAN HIEROGLYPH-1398A;Lo;0;L;;;;;N;;;;; +1398B;EGYPTIAN HIEROGLYPH-1398B;Lo;0;L;;;;;N;;;;; +1398C;EGYPTIAN HIEROGLYPH-1398C;Lo;0;L;;;;;N;;;;; +1398D;EGYPTIAN HIEROGLYPH-1398D;Lo;0;L;;;;;N;;;;; +1398E;EGYPTIAN HIEROGLYPH-1398E;Lo;0;L;;;;;N;;;;; +1398F;EGYPTIAN HIEROGLYPH-1398F;Lo;0;L;;;;;N;;;;; +13990;EGYPTIAN HIEROGLYPH-13990;Lo;0;L;;;;;N;;;;; +13991;EGYPTIAN HIEROGLYPH-13991;Lo;0;L;;;;;N;;;;; +13992;EGYPTIAN HIEROGLYPH-13992;Lo;0;L;;;;;N;;;;; +13993;EGYPTIAN HIEROGLYPH-13993;Lo;0;L;;;;;N;;;;; +13994;EGYPTIAN HIEROGLYPH-13994;Lo;0;L;;;;;N;;;;; +13995;EGYPTIAN HIEROGLYPH-13995;Lo;0;L;;;;;N;;;;; +13996;EGYPTIAN HIEROGLYPH-13996;Lo;0;L;;;;;N;;;;; +13997;EGYPTIAN HIEROGLYPH-13997;Lo;0;L;;;;;N;;;;; +13998;EGYPTIAN HIEROGLYPH-13998;Lo;0;L;;;;;N;;;;; +13999;EGYPTIAN HIEROGLYPH-13999;Lo;0;L;;;;;N;;;;; +1399A;EGYPTIAN HIEROGLYPH-1399A;Lo;0;L;;;;;N;;;;; +1399B;EGYPTIAN HIEROGLYPH-1399B;Lo;0;L;;;;;N;;;;; +1399C;EGYPTIAN HIEROGLYPH-1399C;Lo;0;L;;;;;N;;;;; +1399D;EGYPTIAN HIEROGLYPH-1399D;Lo;0;L;;;;;N;;;;; +1399E;EGYPTIAN HIEROGLYPH-1399E;Lo;0;L;;;;;N;;;;; +1399F;EGYPTIAN HIEROGLYPH-1399F;Lo;0;L;;;;;N;;;;; +139A0;EGYPTIAN HIEROGLYPH-139A0;Lo;0;L;;;;;N;;;;; +139A1;EGYPTIAN HIEROGLYPH-139A1;Lo;0;L;;;;;N;;;;; +139A2;EGYPTIAN HIEROGLYPH-139A2;Lo;0;L;;;;;N;;;;; +139A3;EGYPTIAN HIEROGLYPH-139A3;Lo;0;L;;;;;N;;;;; +139A4;EGYPTIAN HIEROGLYPH-139A4;Lo;0;L;;;;;N;;;;; +139A5;EGYPTIAN HIEROGLYPH-139A5;Lo;0;L;;;;;N;;;;; +139A6;EGYPTIAN HIEROGLYPH-139A6;Lo;0;L;;;;;N;;;;; +139A7;EGYPTIAN HIEROGLYPH-139A7;Lo;0;L;;;;;N;;;;; +139A8;EGYPTIAN HIEROGLYPH-139A8;Lo;0;L;;;;;N;;;;; +139A9;EGYPTIAN HIEROGLYPH-139A9;Lo;0;L;;;;;N;;;;; +139AA;EGYPTIAN HIEROGLYPH-139AA;Lo;0;L;;;;;N;;;;; +139AB;EGYPTIAN HIEROGLYPH-139AB;Lo;0;L;;;;;N;;;;; +139AC;EGYPTIAN HIEROGLYPH-139AC;Lo;0;L;;;;;N;;;;; +139AD;EGYPTIAN HIEROGLYPH-139AD;Lo;0;L;;;;;N;;;;; +139AE;EGYPTIAN HIEROGLYPH-139AE;Lo;0;L;;;;;N;;;;; +139AF;EGYPTIAN HIEROGLYPH-139AF;Lo;0;L;;;;;N;;;;; +139B0;EGYPTIAN HIEROGLYPH-139B0;Lo;0;L;;;;;N;;;;; +139B1;EGYPTIAN HIEROGLYPH-139B1;Lo;0;L;;;;;N;;;;; +139B2;EGYPTIAN HIEROGLYPH-139B2;Lo;0;L;;;;;N;;;;; +139B3;EGYPTIAN HIEROGLYPH-139B3;Lo;0;L;;;;;N;;;;; +139B4;EGYPTIAN HIEROGLYPH-139B4;Lo;0;L;;;;;N;;;;; +139B5;EGYPTIAN HIEROGLYPH-139B5;Lo;0;L;;;;;N;;;;; +139B6;EGYPTIAN HIEROGLYPH-139B6;Lo;0;L;;;;;N;;;;; +139B7;EGYPTIAN HIEROGLYPH-139B7;Lo;0;L;;;;;N;;;;; +139B8;EGYPTIAN HIEROGLYPH-139B8;Lo;0;L;;;;;N;;;;; +139B9;EGYPTIAN HIEROGLYPH-139B9;Lo;0;L;;;;;N;;;;; +139BA;EGYPTIAN HIEROGLYPH-139BA;Lo;0;L;;;;;N;;;;; +139BB;EGYPTIAN HIEROGLYPH-139BB;Lo;0;L;;;;;N;;;;; +139BC;EGYPTIAN HIEROGLYPH-139BC;Lo;0;L;;;;;N;;;;; +139BD;EGYPTIAN HIEROGLYPH-139BD;Lo;0;L;;;;;N;;;;; +139BE;EGYPTIAN HIEROGLYPH-139BE;Lo;0;L;;;;;N;;;;; +139BF;EGYPTIAN HIEROGLYPH-139BF;Lo;0;L;;;;;N;;;;; +139C0;EGYPTIAN HIEROGLYPH-139C0;Lo;0;L;;;;;N;;;;; +139C1;EGYPTIAN HIEROGLYPH-139C1;Lo;0;L;;;;;N;;;;; +139C2;EGYPTIAN HIEROGLYPH-139C2;Lo;0;L;;;;;N;;;;; +139C3;EGYPTIAN HIEROGLYPH-139C3;Lo;0;L;;;;;N;;;;; +139C4;EGYPTIAN HIEROGLYPH-139C4;Lo;0;L;;;;;N;;;;; +139C5;EGYPTIAN HIEROGLYPH-139C5;Lo;0;L;;;;;N;;;;; +139C6;EGYPTIAN HIEROGLYPH-139C6;Lo;0;L;;;;;N;;;;; +139C7;EGYPTIAN HIEROGLYPH-139C7;Lo;0;L;;;;;N;;;;; +139C8;EGYPTIAN HIEROGLYPH-139C8;Lo;0;L;;;;;N;;;;; +139C9;EGYPTIAN HIEROGLYPH-139C9;Lo;0;L;;;;;N;;;;; +139CA;EGYPTIAN HIEROGLYPH-139CA;Lo;0;L;;;;;N;;;;; +139CB;EGYPTIAN HIEROGLYPH-139CB;Lo;0;L;;;;;N;;;;; +139CC;EGYPTIAN HIEROGLYPH-139CC;Lo;0;L;;;;;N;;;;; +139CD;EGYPTIAN HIEROGLYPH-139CD;Lo;0;L;;;;;N;;;;; +139CE;EGYPTIAN HIEROGLYPH-139CE;Lo;0;L;;;;;N;;;;; +139CF;EGYPTIAN HIEROGLYPH-139CF;Lo;0;L;;;;;N;;;;; +139D0;EGYPTIAN HIEROGLYPH-139D0;Lo;0;L;;;;;N;;;;; +139D1;EGYPTIAN HIEROGLYPH-139D1;Lo;0;L;;;;;N;;;;; +139D2;EGYPTIAN HIEROGLYPH-139D2;Lo;0;L;;;;;N;;;;; +139D3;EGYPTIAN HIEROGLYPH-139D3;Lo;0;L;;;;;N;;;;; +139D4;EGYPTIAN HIEROGLYPH-139D4;Lo;0;L;;;;;N;;;;; +139D5;EGYPTIAN HIEROGLYPH-139D5;Lo;0;L;;;;;N;;;;; +139D6;EGYPTIAN HIEROGLYPH-139D6;Lo;0;L;;;;;N;;;;; +139D7;EGYPTIAN HIEROGLYPH-139D7;Lo;0;L;;;;;N;;;;; +139D8;EGYPTIAN HIEROGLYPH-139D8;Lo;0;L;;;;;N;;;;; +139D9;EGYPTIAN HIEROGLYPH-139D9;Lo;0;L;;;;;N;;;;; +139DA;EGYPTIAN HIEROGLYPH-139DA;Lo;0;L;;;;;N;;;;; +139DB;EGYPTIAN HIEROGLYPH-139DB;Lo;0;L;;;;;N;;;;; +139DC;EGYPTIAN HIEROGLYPH-139DC;Lo;0;L;;;;;N;;;;; +139DD;EGYPTIAN HIEROGLYPH-139DD;Lo;0;L;;;;;N;;;;; +139DE;EGYPTIAN HIEROGLYPH-139DE;Lo;0;L;;;;;N;;;;; +139DF;EGYPTIAN HIEROGLYPH-139DF;Lo;0;L;;;;;N;;;;; +139E0;EGYPTIAN HIEROGLYPH-139E0;Lo;0;L;;;;;N;;;;; +139E1;EGYPTIAN HIEROGLYPH-139E1;Lo;0;L;;;;;N;;;;; +139E2;EGYPTIAN HIEROGLYPH-139E2;Lo;0;L;;;;;N;;;;; +139E3;EGYPTIAN HIEROGLYPH-139E3;Lo;0;L;;;;;N;;;;; +139E4;EGYPTIAN HIEROGLYPH-139E4;Lo;0;L;;;;;N;;;;; +139E5;EGYPTIAN HIEROGLYPH-139E5;Lo;0;L;;;;;N;;;;; +139E6;EGYPTIAN HIEROGLYPH-139E6;Lo;0;L;;;;;N;;;;; +139E7;EGYPTIAN HIEROGLYPH-139E7;Lo;0;L;;;;;N;;;;; +139E8;EGYPTIAN HIEROGLYPH-139E8;Lo;0;L;;;;;N;;;;; +139E9;EGYPTIAN HIEROGLYPH-139E9;Lo;0;L;;;;;N;;;;; +139EA;EGYPTIAN HIEROGLYPH-139EA;Lo;0;L;;;;;N;;;;; +139EB;EGYPTIAN HIEROGLYPH-139EB;Lo;0;L;;;;;N;;;;; +139EC;EGYPTIAN HIEROGLYPH-139EC;Lo;0;L;;;;;N;;;;; +139ED;EGYPTIAN HIEROGLYPH-139ED;Lo;0;L;;;;;N;;;;; +139EE;EGYPTIAN HIEROGLYPH-139EE;Lo;0;L;;;;;N;;;;; +139EF;EGYPTIAN HIEROGLYPH-139EF;Lo;0;L;;;;;N;;;;; +139F0;EGYPTIAN HIEROGLYPH-139F0;Lo;0;L;;;;;N;;;;; +139F1;EGYPTIAN HIEROGLYPH-139F1;Lo;0;L;;;;;N;;;;; +139F2;EGYPTIAN HIEROGLYPH-139F2;Lo;0;L;;;;;N;;;;; +139F3;EGYPTIAN HIEROGLYPH-139F3;Lo;0;L;;;;;N;;;;; +139F4;EGYPTIAN HIEROGLYPH-139F4;Lo;0;L;;;;;N;;;;; +139F5;EGYPTIAN HIEROGLYPH-139F5;Lo;0;L;;;;;N;;;;; +139F6;EGYPTIAN HIEROGLYPH-139F6;Lo;0;L;;;;;N;;;;; +139F7;EGYPTIAN HIEROGLYPH-139F7;Lo;0;L;;;;;N;;;;; +139F8;EGYPTIAN HIEROGLYPH-139F8;Lo;0;L;;;;;N;;;;; +139F9;EGYPTIAN HIEROGLYPH-139F9;Lo;0;L;;;;;N;;;;; +139FA;EGYPTIAN HIEROGLYPH-139FA;Lo;0;L;;;;;N;;;;; +139FB;EGYPTIAN HIEROGLYPH-139FB;Lo;0;L;;;;;N;;;;; +139FC;EGYPTIAN HIEROGLYPH-139FC;Lo;0;L;;;;;N;;;;; +139FD;EGYPTIAN HIEROGLYPH-139FD;Lo;0;L;;;;;N;;;;; +139FE;EGYPTIAN HIEROGLYPH-139FE;Lo;0;L;;;;;N;;;;; +139FF;EGYPTIAN HIEROGLYPH-139FF;Lo;0;L;;;;;N;;;;; +13A00;EGYPTIAN HIEROGLYPH-13A00;Lo;0;L;;;;;N;;;;; +13A01;EGYPTIAN HIEROGLYPH-13A01;Lo;0;L;;;;;N;;;;; +13A02;EGYPTIAN HIEROGLYPH-13A02;Lo;0;L;;;;;N;;;;; +13A03;EGYPTIAN HIEROGLYPH-13A03;Lo;0;L;;;;;N;;;;; +13A04;EGYPTIAN HIEROGLYPH-13A04;Lo;0;L;;;;;N;;;;; +13A05;EGYPTIAN HIEROGLYPH-13A05;Lo;0;L;;;;;N;;;;; +13A06;EGYPTIAN HIEROGLYPH-13A06;Lo;0;L;;;;;N;;;;; +13A07;EGYPTIAN HIEROGLYPH-13A07;Lo;0;L;;;;;N;;;;; +13A08;EGYPTIAN HIEROGLYPH-13A08;Lo;0;L;;;;;N;;;;; +13A09;EGYPTIAN HIEROGLYPH-13A09;Lo;0;L;;;;;N;;;;; +13A0A;EGYPTIAN HIEROGLYPH-13A0A;Lo;0;L;;;;;N;;;;; +13A0B;EGYPTIAN HIEROGLYPH-13A0B;Lo;0;L;;;;;N;;;;; +13A0C;EGYPTIAN HIEROGLYPH-13A0C;Lo;0;L;;;;;N;;;;; +13A0D;EGYPTIAN HIEROGLYPH-13A0D;Lo;0;L;;;;;N;;;;; +13A0E;EGYPTIAN HIEROGLYPH-13A0E;Lo;0;L;;;;;N;;;;; +13A0F;EGYPTIAN HIEROGLYPH-13A0F;Lo;0;L;;;;;N;;;;; +13A10;EGYPTIAN HIEROGLYPH-13A10;Lo;0;L;;;;;N;;;;; +13A11;EGYPTIAN HIEROGLYPH-13A11;Lo;0;L;;;;;N;;;;; +13A12;EGYPTIAN HIEROGLYPH-13A12;Lo;0;L;;;;;N;;;;; +13A13;EGYPTIAN HIEROGLYPH-13A13;Lo;0;L;;;;;N;;;;; +13A14;EGYPTIAN HIEROGLYPH-13A14;Lo;0;L;;;;;N;;;;; +13A15;EGYPTIAN HIEROGLYPH-13A15;Lo;0;L;;;;;N;;;;; +13A16;EGYPTIAN HIEROGLYPH-13A16;Lo;0;L;;;;;N;;;;; +13A17;EGYPTIAN HIEROGLYPH-13A17;Lo;0;L;;;;;N;;;;; +13A18;EGYPTIAN HIEROGLYPH-13A18;Lo;0;L;;;;;N;;;;; +13A19;EGYPTIAN HIEROGLYPH-13A19;Lo;0;L;;;;;N;;;;; +13A1A;EGYPTIAN HIEROGLYPH-13A1A;Lo;0;L;;;;;N;;;;; +13A1B;EGYPTIAN HIEROGLYPH-13A1B;Lo;0;L;;;;;N;;;;; +13A1C;EGYPTIAN HIEROGLYPH-13A1C;Lo;0;L;;;;;N;;;;; +13A1D;EGYPTIAN HIEROGLYPH-13A1D;Lo;0;L;;;;;N;;;;; +13A1E;EGYPTIAN HIEROGLYPH-13A1E;Lo;0;L;;;;;N;;;;; +13A1F;EGYPTIAN HIEROGLYPH-13A1F;Lo;0;L;;;;;N;;;;; +13A20;EGYPTIAN HIEROGLYPH-13A20;Lo;0;L;;;;;N;;;;; +13A21;EGYPTIAN HIEROGLYPH-13A21;Lo;0;L;;;;;N;;;;; +13A22;EGYPTIAN HIEROGLYPH-13A22;Lo;0;L;;;;;N;;;;; +13A23;EGYPTIAN HIEROGLYPH-13A23;Lo;0;L;;;;;N;;;;; +13A24;EGYPTIAN HIEROGLYPH-13A24;Lo;0;L;;;;;N;;;;; +13A25;EGYPTIAN HIEROGLYPH-13A25;Lo;0;L;;;;;N;;;;; +13A26;EGYPTIAN HIEROGLYPH-13A26;Lo;0;L;;;;;N;;;;; +13A27;EGYPTIAN HIEROGLYPH-13A27;Lo;0;L;;;;;N;;;;; +13A28;EGYPTIAN HIEROGLYPH-13A28;Lo;0;L;;;;;N;;;;; +13A29;EGYPTIAN HIEROGLYPH-13A29;Lo;0;L;;;;;N;;;;; +13A2A;EGYPTIAN HIEROGLYPH-13A2A;Lo;0;L;;;;;N;;;;; +13A2B;EGYPTIAN HIEROGLYPH-13A2B;Lo;0;L;;;;;N;;;;; +13A2C;EGYPTIAN HIEROGLYPH-13A2C;Lo;0;L;;;;;N;;;;; +13A2D;EGYPTIAN HIEROGLYPH-13A2D;Lo;0;L;;;;;N;;;;; +13A2E;EGYPTIAN HIEROGLYPH-13A2E;Lo;0;L;;;;;N;;;;; +13A2F;EGYPTIAN HIEROGLYPH-13A2F;Lo;0;L;;;;;N;;;;; +13A30;EGYPTIAN HIEROGLYPH-13A30;Lo;0;L;;;;;N;;;;; +13A31;EGYPTIAN HIEROGLYPH-13A31;Lo;0;L;;;;;N;;;;; +13A32;EGYPTIAN HIEROGLYPH-13A32;Lo;0;L;;;;;N;;;;; +13A33;EGYPTIAN HIEROGLYPH-13A33;Lo;0;L;;;;;N;;;;; +13A34;EGYPTIAN HIEROGLYPH-13A34;Lo;0;L;;;;;N;;;;; +13A35;EGYPTIAN HIEROGLYPH-13A35;Lo;0;L;;;;;N;;;;; +13A36;EGYPTIAN HIEROGLYPH-13A36;Lo;0;L;;;;;N;;;;; +13A37;EGYPTIAN HIEROGLYPH-13A37;Lo;0;L;;;;;N;;;;; +13A38;EGYPTIAN HIEROGLYPH-13A38;Lo;0;L;;;;;N;;;;; +13A39;EGYPTIAN HIEROGLYPH-13A39;Lo;0;L;;;;;N;;;;; +13A3A;EGYPTIAN HIEROGLYPH-13A3A;Lo;0;L;;;;;N;;;;; +13A3B;EGYPTIAN HIEROGLYPH-13A3B;Lo;0;L;;;;;N;;;;; +13A3C;EGYPTIAN HIEROGLYPH-13A3C;Lo;0;L;;;;;N;;;;; +13A3D;EGYPTIAN HIEROGLYPH-13A3D;Lo;0;L;;;;;N;;;;; +13A3E;EGYPTIAN HIEROGLYPH-13A3E;Lo;0;L;;;;;N;;;;; +13A3F;EGYPTIAN HIEROGLYPH-13A3F;Lo;0;L;;;;;N;;;;; +13A40;EGYPTIAN HIEROGLYPH-13A40;Lo;0;L;;;;;N;;;;; +13A41;EGYPTIAN HIEROGLYPH-13A41;Lo;0;L;;;;;N;;;;; +13A42;EGYPTIAN HIEROGLYPH-13A42;Lo;0;L;;;;;N;;;;; +13A43;EGYPTIAN HIEROGLYPH-13A43;Lo;0;L;;;;;N;;;;; +13A44;EGYPTIAN HIEROGLYPH-13A44;Lo;0;L;;;;;N;;;;; +13A45;EGYPTIAN HIEROGLYPH-13A45;Lo;0;L;;;;;N;;;;; +13A46;EGYPTIAN HIEROGLYPH-13A46;Lo;0;L;;;;;N;;;;; +13A47;EGYPTIAN HIEROGLYPH-13A47;Lo;0;L;;;;;N;;;;; +13A48;EGYPTIAN HIEROGLYPH-13A48;Lo;0;L;;;;;N;;;;; +13A49;EGYPTIAN HIEROGLYPH-13A49;Lo;0;L;;;;;N;;;;; +13A4A;EGYPTIAN HIEROGLYPH-13A4A;Lo;0;L;;;;;N;;;;; +13A4B;EGYPTIAN HIEROGLYPH-13A4B;Lo;0;L;;;;;N;;;;; +13A4C;EGYPTIAN HIEROGLYPH-13A4C;Lo;0;L;;;;;N;;;;; +13A4D;EGYPTIAN HIEROGLYPH-13A4D;Lo;0;L;;;;;N;;;;; +13A4E;EGYPTIAN HIEROGLYPH-13A4E;Lo;0;L;;;;;N;;;;; +13A4F;EGYPTIAN HIEROGLYPH-13A4F;Lo;0;L;;;;;N;;;;; +13A50;EGYPTIAN HIEROGLYPH-13A50;Lo;0;L;;;;;N;;;;; +13A51;EGYPTIAN HIEROGLYPH-13A51;Lo;0;L;;;;;N;;;;; +13A52;EGYPTIAN HIEROGLYPH-13A52;Lo;0;L;;;;;N;;;;; +13A53;EGYPTIAN HIEROGLYPH-13A53;Lo;0;L;;;;;N;;;;; +13A54;EGYPTIAN HIEROGLYPH-13A54;Lo;0;L;;;;;N;;;;; +13A55;EGYPTIAN HIEROGLYPH-13A55;Lo;0;L;;;;;N;;;;; +13A56;EGYPTIAN HIEROGLYPH-13A56;Lo;0;L;;;;;N;;;;; +13A57;EGYPTIAN HIEROGLYPH-13A57;Lo;0;L;;;;;N;;;;; +13A58;EGYPTIAN HIEROGLYPH-13A58;Lo;0;L;;;;;N;;;;; +13A59;EGYPTIAN HIEROGLYPH-13A59;Lo;0;L;;;;;N;;;;; +13A5A;EGYPTIAN HIEROGLYPH-13A5A;Lo;0;L;;;;;N;;;;; +13A5B;EGYPTIAN HIEROGLYPH-13A5B;Lo;0;L;;;;;N;;;;; +13A5C;EGYPTIAN HIEROGLYPH-13A5C;Lo;0;L;;;;;N;;;;; +13A5D;EGYPTIAN HIEROGLYPH-13A5D;Lo;0;L;;;;;N;;;;; +13A5E;EGYPTIAN HIEROGLYPH-13A5E;Lo;0;L;;;;;N;;;;; +13A5F;EGYPTIAN HIEROGLYPH-13A5F;Lo;0;L;;;;;N;;;;; +13A60;EGYPTIAN HIEROGLYPH-13A60;Lo;0;L;;;;;N;;;;; +13A61;EGYPTIAN HIEROGLYPH-13A61;Lo;0;L;;;;;N;;;;; +13A62;EGYPTIAN HIEROGLYPH-13A62;Lo;0;L;;;;;N;;;;; +13A63;EGYPTIAN HIEROGLYPH-13A63;Lo;0;L;;;;;N;;;;; +13A64;EGYPTIAN HIEROGLYPH-13A64;Lo;0;L;;;;;N;;;;; +13A65;EGYPTIAN HIEROGLYPH-13A65;Lo;0;L;;;;;N;;;;; +13A66;EGYPTIAN HIEROGLYPH-13A66;Lo;0;L;;;;;N;;;;; +13A67;EGYPTIAN HIEROGLYPH-13A67;Lo;0;L;;;;;N;;;;; +13A68;EGYPTIAN HIEROGLYPH-13A68;Lo;0;L;;;;;N;;;;; +13A69;EGYPTIAN HIEROGLYPH-13A69;Lo;0;L;;;;;N;;;;; +13A6A;EGYPTIAN HIEROGLYPH-13A6A;Lo;0;L;;;;;N;;;;; +13A6B;EGYPTIAN HIEROGLYPH-13A6B;Lo;0;L;;;;;N;;;;; +13A6C;EGYPTIAN HIEROGLYPH-13A6C;Lo;0;L;;;;;N;;;;; +13A6D;EGYPTIAN HIEROGLYPH-13A6D;Lo;0;L;;;;;N;;;;; +13A6E;EGYPTIAN HIEROGLYPH-13A6E;Lo;0;L;;;;;N;;;;; +13A6F;EGYPTIAN HIEROGLYPH-13A6F;Lo;0;L;;;;;N;;;;; +13A70;EGYPTIAN HIEROGLYPH-13A70;Lo;0;L;;;;;N;;;;; +13A71;EGYPTIAN HIEROGLYPH-13A71;Lo;0;L;;;;;N;;;;; +13A72;EGYPTIAN HIEROGLYPH-13A72;Lo;0;L;;;;;N;;;;; +13A73;EGYPTIAN HIEROGLYPH-13A73;Lo;0;L;;;;;N;;;;; +13A74;EGYPTIAN HIEROGLYPH-13A74;Lo;0;L;;;;;N;;;;; +13A75;EGYPTIAN HIEROGLYPH-13A75;Lo;0;L;;;;;N;;;;; +13A76;EGYPTIAN HIEROGLYPH-13A76;Lo;0;L;;;;;N;;;;; +13A77;EGYPTIAN HIEROGLYPH-13A77;Lo;0;L;;;;;N;;;;; +13A78;EGYPTIAN HIEROGLYPH-13A78;Lo;0;L;;;;;N;;;;; +13A79;EGYPTIAN HIEROGLYPH-13A79;Lo;0;L;;;;;N;;;;; +13A7A;EGYPTIAN HIEROGLYPH-13A7A;Lo;0;L;;;;;N;;;;; +13A7B;EGYPTIAN HIEROGLYPH-13A7B;Lo;0;L;;;;;N;;;;; +13A7C;EGYPTIAN HIEROGLYPH-13A7C;Lo;0;L;;;;;N;;;;; +13A7D;EGYPTIAN HIEROGLYPH-13A7D;Lo;0;L;;;;;N;;;;; +13A7E;EGYPTIAN HIEROGLYPH-13A7E;Lo;0;L;;;;;N;;;;; +13A7F;EGYPTIAN HIEROGLYPH-13A7F;Lo;0;L;;;;;N;;;;; +13A80;EGYPTIAN HIEROGLYPH-13A80;Lo;0;L;;;;;N;;;;; +13A81;EGYPTIAN HIEROGLYPH-13A81;Lo;0;L;;;;;N;;;;; +13A82;EGYPTIAN HIEROGLYPH-13A82;Lo;0;L;;;;;N;;;;; +13A83;EGYPTIAN HIEROGLYPH-13A83;Lo;0;L;;;;;N;;;;; +13A84;EGYPTIAN HIEROGLYPH-13A84;Lo;0;L;;;;;N;;;;; +13A85;EGYPTIAN HIEROGLYPH-13A85;Lo;0;L;;;;;N;;;;; +13A86;EGYPTIAN HIEROGLYPH-13A86;Lo;0;L;;;;;N;;;;; +13A87;EGYPTIAN HIEROGLYPH-13A87;Lo;0;L;;;;;N;;;;; +13A88;EGYPTIAN HIEROGLYPH-13A88;Lo;0;L;;;;;N;;;;; +13A89;EGYPTIAN HIEROGLYPH-13A89;Lo;0;L;;;;;N;;;;; +13A8A;EGYPTIAN HIEROGLYPH-13A8A;Lo;0;L;;;;;N;;;;; +13A8B;EGYPTIAN HIEROGLYPH-13A8B;Lo;0;L;;;;;N;;;;; +13A8C;EGYPTIAN HIEROGLYPH-13A8C;Lo;0;L;;;;;N;;;;; +13A8D;EGYPTIAN HIEROGLYPH-13A8D;Lo;0;L;;;;;N;;;;; +13A8E;EGYPTIAN HIEROGLYPH-13A8E;Lo;0;L;;;;;N;;;;; +13A8F;EGYPTIAN HIEROGLYPH-13A8F;Lo;0;L;;;;;N;;;;; +13A90;EGYPTIAN HIEROGLYPH-13A90;Lo;0;L;;;;;N;;;;; +13A91;EGYPTIAN HIEROGLYPH-13A91;Lo;0;L;;;;;N;;;;; +13A92;EGYPTIAN HIEROGLYPH-13A92;Lo;0;L;;;;;N;;;;; +13A93;EGYPTIAN HIEROGLYPH-13A93;Lo;0;L;;;;;N;;;;; +13A94;EGYPTIAN HIEROGLYPH-13A94;Lo;0;L;;;;;N;;;;; +13A95;EGYPTIAN HIEROGLYPH-13A95;Lo;0;L;;;;;N;;;;; +13A96;EGYPTIAN HIEROGLYPH-13A96;Lo;0;L;;;;;N;;;;; +13A97;EGYPTIAN HIEROGLYPH-13A97;Lo;0;L;;;;;N;;;;; +13A98;EGYPTIAN HIEROGLYPH-13A98;Lo;0;L;;;;;N;;;;; +13A99;EGYPTIAN HIEROGLYPH-13A99;Lo;0;L;;;;;N;;;;; +13A9A;EGYPTIAN HIEROGLYPH-13A9A;Lo;0;L;;;;;N;;;;; +13A9B;EGYPTIAN HIEROGLYPH-13A9B;Lo;0;L;;;;;N;;;;; +13A9C;EGYPTIAN HIEROGLYPH-13A9C;Lo;0;L;;;;;N;;;;; +13A9D;EGYPTIAN HIEROGLYPH-13A9D;Lo;0;L;;;;;N;;;;; +13A9E;EGYPTIAN HIEROGLYPH-13A9E;Lo;0;L;;;;;N;;;;; +13A9F;EGYPTIAN HIEROGLYPH-13A9F;Lo;0;L;;;;;N;;;;; +13AA0;EGYPTIAN HIEROGLYPH-13AA0;Lo;0;L;;;;;N;;;;; +13AA1;EGYPTIAN HIEROGLYPH-13AA1;Lo;0;L;;;;;N;;;;; +13AA2;EGYPTIAN HIEROGLYPH-13AA2;Lo;0;L;;;;;N;;;;; +13AA3;EGYPTIAN HIEROGLYPH-13AA3;Lo;0;L;;;;;N;;;;; +13AA4;EGYPTIAN HIEROGLYPH-13AA4;Lo;0;L;;;;;N;;;;; +13AA5;EGYPTIAN HIEROGLYPH-13AA5;Lo;0;L;;;;;N;;;;; +13AA6;EGYPTIAN HIEROGLYPH-13AA6;Lo;0;L;;;;;N;;;;; +13AA7;EGYPTIAN HIEROGLYPH-13AA7;Lo;0;L;;;;;N;;;;; +13AA8;EGYPTIAN HIEROGLYPH-13AA8;Lo;0;L;;;;;N;;;;; +13AA9;EGYPTIAN HIEROGLYPH-13AA9;Lo;0;L;;;;;N;;;;; +13AAA;EGYPTIAN HIEROGLYPH-13AAA;Lo;0;L;;;;;N;;;;; +13AAB;EGYPTIAN HIEROGLYPH-13AAB;Lo;0;L;;;;;N;;;;; +13AAC;EGYPTIAN HIEROGLYPH-13AAC;Lo;0;L;;;;;N;;;;; +13AAD;EGYPTIAN HIEROGLYPH-13AAD;Lo;0;L;;;;;N;;;;; +13AAE;EGYPTIAN HIEROGLYPH-13AAE;Lo;0;L;;;;;N;;;;; +13AAF;EGYPTIAN HIEROGLYPH-13AAF;Lo;0;L;;;;;N;;;;; +13AB0;EGYPTIAN HIEROGLYPH-13AB0;Lo;0;L;;;;;N;;;;; +13AB1;EGYPTIAN HIEROGLYPH-13AB1;Lo;0;L;;;;;N;;;;; +13AB2;EGYPTIAN HIEROGLYPH-13AB2;Lo;0;L;;;;;N;;;;; +13AB3;EGYPTIAN HIEROGLYPH-13AB3;Lo;0;L;;;;;N;;;;; +13AB4;EGYPTIAN HIEROGLYPH-13AB4;Lo;0;L;;;;;N;;;;; +13AB5;EGYPTIAN HIEROGLYPH-13AB5;Lo;0;L;;;;;N;;;;; +13AB6;EGYPTIAN HIEROGLYPH-13AB6;Lo;0;L;;;;;N;;;;; +13AB7;EGYPTIAN HIEROGLYPH-13AB7;Lo;0;L;;;;;N;;;;; +13AB8;EGYPTIAN HIEROGLYPH-13AB8;Lo;0;L;;;;;N;;;;; +13AB9;EGYPTIAN HIEROGLYPH-13AB9;Lo;0;L;;;;;N;;;;; +13ABA;EGYPTIAN HIEROGLYPH-13ABA;Lo;0;L;;;;;N;;;;; +13ABB;EGYPTIAN HIEROGLYPH-13ABB;Lo;0;L;;;;;N;;;;; +13ABC;EGYPTIAN HIEROGLYPH-13ABC;Lo;0;L;;;;;N;;;;; +13ABD;EGYPTIAN HIEROGLYPH-13ABD;Lo;0;L;;;;;N;;;;; +13ABE;EGYPTIAN HIEROGLYPH-13ABE;Lo;0;L;;;;;N;;;;; +13ABF;EGYPTIAN HIEROGLYPH-13ABF;Lo;0;L;;;;;N;;;;; +13AC0;EGYPTIAN HIEROGLYPH-13AC0;Lo;0;L;;;;;N;;;;; +13AC1;EGYPTIAN HIEROGLYPH-13AC1;Lo;0;L;;;;;N;;;;; +13AC2;EGYPTIAN HIEROGLYPH-13AC2;Lo;0;L;;;;;N;;;;; +13AC3;EGYPTIAN HIEROGLYPH-13AC3;Lo;0;L;;;;;N;;;;; +13AC4;EGYPTIAN HIEROGLYPH-13AC4;Lo;0;L;;;;;N;;;;; +13AC5;EGYPTIAN HIEROGLYPH-13AC5;Lo;0;L;;;;;N;;;;; +13AC6;EGYPTIAN HIEROGLYPH-13AC6;Lo;0;L;;;;;N;;;;; +13AC7;EGYPTIAN HIEROGLYPH-13AC7;Lo;0;L;;;;;N;;;;; +13AC8;EGYPTIAN HIEROGLYPH-13AC8;Lo;0;L;;;;;N;;;;; +13AC9;EGYPTIAN HIEROGLYPH-13AC9;Lo;0;L;;;;;N;;;;; +13ACA;EGYPTIAN HIEROGLYPH-13ACA;Lo;0;L;;;;;N;;;;; +13ACB;EGYPTIAN HIEROGLYPH-13ACB;Lo;0;L;;;;;N;;;;; +13ACC;EGYPTIAN HIEROGLYPH-13ACC;Lo;0;L;;;;;N;;;;; +13ACD;EGYPTIAN HIEROGLYPH-13ACD;Lo;0;L;;;;;N;;;;; +13ACE;EGYPTIAN HIEROGLYPH-13ACE;Lo;0;L;;;;;N;;;;; +13ACF;EGYPTIAN HIEROGLYPH-13ACF;Lo;0;L;;;;;N;;;;; +13AD0;EGYPTIAN HIEROGLYPH-13AD0;Lo;0;L;;;;;N;;;;; +13AD1;EGYPTIAN HIEROGLYPH-13AD1;Lo;0;L;;;;;N;;;;; +13AD2;EGYPTIAN HIEROGLYPH-13AD2;Lo;0;L;;;;;N;;;;; +13AD3;EGYPTIAN HIEROGLYPH-13AD3;Lo;0;L;;;;;N;;;;; +13AD4;EGYPTIAN HIEROGLYPH-13AD4;Lo;0;L;;;;;N;;;;; +13AD5;EGYPTIAN HIEROGLYPH-13AD5;Lo;0;L;;;;;N;;;;; +13AD6;EGYPTIAN HIEROGLYPH-13AD6;Lo;0;L;;;;;N;;;;; +13AD7;EGYPTIAN HIEROGLYPH-13AD7;Lo;0;L;;;;;N;;;;; +13AD8;EGYPTIAN HIEROGLYPH-13AD8;Lo;0;L;;;;;N;;;;; +13AD9;EGYPTIAN HIEROGLYPH-13AD9;Lo;0;L;;;;;N;;;;; +13ADA;EGYPTIAN HIEROGLYPH-13ADA;Lo;0;L;;;;;N;;;;; +13ADB;EGYPTIAN HIEROGLYPH-13ADB;Lo;0;L;;;;;N;;;;; +13ADC;EGYPTIAN HIEROGLYPH-13ADC;Lo;0;L;;;;;N;;;;; +13ADD;EGYPTIAN HIEROGLYPH-13ADD;Lo;0;L;;;;;N;;;;; +13ADE;EGYPTIAN HIEROGLYPH-13ADE;Lo;0;L;;;;;N;;;;; +13ADF;EGYPTIAN HIEROGLYPH-13ADF;Lo;0;L;;;;;N;;;;; +13AE0;EGYPTIAN HIEROGLYPH-13AE0;Lo;0;L;;;;;N;;;;; +13AE1;EGYPTIAN HIEROGLYPH-13AE1;Lo;0;L;;;;;N;;;;; +13AE2;EGYPTIAN HIEROGLYPH-13AE2;Lo;0;L;;;;;N;;;;; +13AE3;EGYPTIAN HIEROGLYPH-13AE3;Lo;0;L;;;;;N;;;;; +13AE4;EGYPTIAN HIEROGLYPH-13AE4;Lo;0;L;;;;;N;;;;; +13AE5;EGYPTIAN HIEROGLYPH-13AE5;Lo;0;L;;;;;N;;;;; +13AE6;EGYPTIAN HIEROGLYPH-13AE6;Lo;0;L;;;;;N;;;;; +13AE7;EGYPTIAN HIEROGLYPH-13AE7;Lo;0;L;;;;;N;;;;; +13AE8;EGYPTIAN HIEROGLYPH-13AE8;Lo;0;L;;;;;N;;;;; +13AE9;EGYPTIAN HIEROGLYPH-13AE9;Lo;0;L;;;;;N;;;;; +13AEA;EGYPTIAN HIEROGLYPH-13AEA;Lo;0;L;;;;;N;;;;; +13AEB;EGYPTIAN HIEROGLYPH-13AEB;Lo;0;L;;;;;N;;;;; +13AEC;EGYPTIAN HIEROGLYPH-13AEC;Lo;0;L;;;;;N;;;;; +13AED;EGYPTIAN HIEROGLYPH-13AED;Lo;0;L;;;;;N;;;;; +13AEE;EGYPTIAN HIEROGLYPH-13AEE;Lo;0;L;;;;;N;;;;; +13AEF;EGYPTIAN HIEROGLYPH-13AEF;Lo;0;L;;;;;N;;;;; +13AF0;EGYPTIAN HIEROGLYPH-13AF0;Lo;0;L;;;;;N;;;;; +13AF1;EGYPTIAN HIEROGLYPH-13AF1;Lo;0;L;;;;;N;;;;; +13AF2;EGYPTIAN HIEROGLYPH-13AF2;Lo;0;L;;;;;N;;;;; +13AF3;EGYPTIAN HIEROGLYPH-13AF3;Lo;0;L;;;;;N;;;;; +13AF4;EGYPTIAN HIEROGLYPH-13AF4;Lo;0;L;;;;;N;;;;; +13AF5;EGYPTIAN HIEROGLYPH-13AF5;Lo;0;L;;;;;N;;;;; +13AF6;EGYPTIAN HIEROGLYPH-13AF6;Lo;0;L;;;;;N;;;;; +13AF7;EGYPTIAN HIEROGLYPH-13AF7;Lo;0;L;;;;;N;;;;; +13AF8;EGYPTIAN HIEROGLYPH-13AF8;Lo;0;L;;;;;N;;;;; +13AF9;EGYPTIAN HIEROGLYPH-13AF9;Lo;0;L;;;;;N;;;;; +13AFA;EGYPTIAN HIEROGLYPH-13AFA;Lo;0;L;;;;;N;;;;; +13AFB;EGYPTIAN HIEROGLYPH-13AFB;Lo;0;L;;;;;N;;;;; +13AFC;EGYPTIAN HIEROGLYPH-13AFC;Lo;0;L;;;;;N;;;;; +13AFD;EGYPTIAN HIEROGLYPH-13AFD;Lo;0;L;;;;;N;;;;; +13AFE;EGYPTIAN HIEROGLYPH-13AFE;Lo;0;L;;;;;N;;;;; +13AFF;EGYPTIAN HIEROGLYPH-13AFF;Lo;0;L;;;;;N;;;;; +13B00;EGYPTIAN HIEROGLYPH-13B00;Lo;0;L;;;;;N;;;;; +13B01;EGYPTIAN HIEROGLYPH-13B01;Lo;0;L;;;;;N;;;;; +13B02;EGYPTIAN HIEROGLYPH-13B02;Lo;0;L;;;;;N;;;;; +13B03;EGYPTIAN HIEROGLYPH-13B03;Lo;0;L;;;;;N;;;;; +13B04;EGYPTIAN HIEROGLYPH-13B04;Lo;0;L;;;;;N;;;;; +13B05;EGYPTIAN HIEROGLYPH-13B05;Lo;0;L;;;;;N;;;;; +13B06;EGYPTIAN HIEROGLYPH-13B06;Lo;0;L;;;;;N;;;;; +13B07;EGYPTIAN HIEROGLYPH-13B07;Lo;0;L;;;;;N;;;;; +13B08;EGYPTIAN HIEROGLYPH-13B08;Lo;0;L;;;;;N;;;;; +13B09;EGYPTIAN HIEROGLYPH-13B09;Lo;0;L;;;;;N;;;;; +13B0A;EGYPTIAN HIEROGLYPH-13B0A;Lo;0;L;;;;;N;;;;; +13B0B;EGYPTIAN HIEROGLYPH-13B0B;Lo;0;L;;;;;N;;;;; +13B0C;EGYPTIAN HIEROGLYPH-13B0C;Lo;0;L;;;;;N;;;;; +13B0D;EGYPTIAN HIEROGLYPH-13B0D;Lo;0;L;;;;;N;;;;; +13B0E;EGYPTIAN HIEROGLYPH-13B0E;Lo;0;L;;;;;N;;;;; +13B0F;EGYPTIAN HIEROGLYPH-13B0F;Lo;0;L;;;;;N;;;;; +13B10;EGYPTIAN HIEROGLYPH-13B10;Lo;0;L;;;;;N;;;;; +13B11;EGYPTIAN HIEROGLYPH-13B11;Lo;0;L;;;;;N;;;;; +13B12;EGYPTIAN HIEROGLYPH-13B12;Lo;0;L;;;;;N;;;;; +13B13;EGYPTIAN HIEROGLYPH-13B13;Lo;0;L;;;;;N;;;;; +13B14;EGYPTIAN HIEROGLYPH-13B14;Lo;0;L;;;;;N;;;;; +13B15;EGYPTIAN HIEROGLYPH-13B15;Lo;0;L;;;;;N;;;;; +13B16;EGYPTIAN HIEROGLYPH-13B16;Lo;0;L;;;;;N;;;;; +13B17;EGYPTIAN HIEROGLYPH-13B17;Lo;0;L;;;;;N;;;;; +13B18;EGYPTIAN HIEROGLYPH-13B18;Lo;0;L;;;;;N;;;;; +13B19;EGYPTIAN HIEROGLYPH-13B19;Lo;0;L;;;;;N;;;;; +13B1A;EGYPTIAN HIEROGLYPH-13B1A;Lo;0;L;;;;;N;;;;; +13B1B;EGYPTIAN HIEROGLYPH-13B1B;Lo;0;L;;;;;N;;;;; +13B1C;EGYPTIAN HIEROGLYPH-13B1C;Lo;0;L;;;;;N;;;;; +13B1D;EGYPTIAN HIEROGLYPH-13B1D;Lo;0;L;;;;;N;;;;; +13B1E;EGYPTIAN HIEROGLYPH-13B1E;Lo;0;L;;;;;N;;;;; +13B1F;EGYPTIAN HIEROGLYPH-13B1F;Lo;0;L;;;;;N;;;;; +13B20;EGYPTIAN HIEROGLYPH-13B20;Lo;0;L;;;;;N;;;;; +13B21;EGYPTIAN HIEROGLYPH-13B21;Lo;0;L;;;;;N;;;;; +13B22;EGYPTIAN HIEROGLYPH-13B22;Lo;0;L;;;;;N;;;;; +13B23;EGYPTIAN HIEROGLYPH-13B23;Lo;0;L;;;;;N;;;;; +13B24;EGYPTIAN HIEROGLYPH-13B24;Lo;0;L;;;;;N;;;;; +13B25;EGYPTIAN HIEROGLYPH-13B25;Lo;0;L;;;;;N;;;;; +13B26;EGYPTIAN HIEROGLYPH-13B26;Lo;0;L;;;;;N;;;;; +13B27;EGYPTIAN HIEROGLYPH-13B27;Lo;0;L;;;;;N;;;;; +13B28;EGYPTIAN HIEROGLYPH-13B28;Lo;0;L;;;;;N;;;;; +13B29;EGYPTIAN HIEROGLYPH-13B29;Lo;0;L;;;;;N;;;;; +13B2A;EGYPTIAN HIEROGLYPH-13B2A;Lo;0;L;;;;;N;;;;; +13B2B;EGYPTIAN HIEROGLYPH-13B2B;Lo;0;L;;;;;N;;;;; +13B2C;EGYPTIAN HIEROGLYPH-13B2C;Lo;0;L;;;;;N;;;;; +13B2D;EGYPTIAN HIEROGLYPH-13B2D;Lo;0;L;;;;;N;;;;; +13B2E;EGYPTIAN HIEROGLYPH-13B2E;Lo;0;L;;;;;N;;;;; +13B2F;EGYPTIAN HIEROGLYPH-13B2F;Lo;0;L;;;;;N;;;;; +13B30;EGYPTIAN HIEROGLYPH-13B30;Lo;0;L;;;;;N;;;;; +13B31;EGYPTIAN HIEROGLYPH-13B31;Lo;0;L;;;;;N;;;;; +13B32;EGYPTIAN HIEROGLYPH-13B32;Lo;0;L;;;;;N;;;;; +13B33;EGYPTIAN HIEROGLYPH-13B33;Lo;0;L;;;;;N;;;;; +13B34;EGYPTIAN HIEROGLYPH-13B34;Lo;0;L;;;;;N;;;;; +13B35;EGYPTIAN HIEROGLYPH-13B35;Lo;0;L;;;;;N;;;;; +13B36;EGYPTIAN HIEROGLYPH-13B36;Lo;0;L;;;;;N;;;;; +13B37;EGYPTIAN HIEROGLYPH-13B37;Lo;0;L;;;;;N;;;;; +13B38;EGYPTIAN HIEROGLYPH-13B38;Lo;0;L;;;;;N;;;;; +13B39;EGYPTIAN HIEROGLYPH-13B39;Lo;0;L;;;;;N;;;;; +13B3A;EGYPTIAN HIEROGLYPH-13B3A;Lo;0;L;;;;;N;;;;; +13B3B;EGYPTIAN HIEROGLYPH-13B3B;Lo;0;L;;;;;N;;;;; +13B3C;EGYPTIAN HIEROGLYPH-13B3C;Lo;0;L;;;;;N;;;;; +13B3D;EGYPTIAN HIEROGLYPH-13B3D;Lo;0;L;;;;;N;;;;; +13B3E;EGYPTIAN HIEROGLYPH-13B3E;Lo;0;L;;;;;N;;;;; +13B3F;EGYPTIAN HIEROGLYPH-13B3F;Lo;0;L;;;;;N;;;;; +13B40;EGYPTIAN HIEROGLYPH-13B40;Lo;0;L;;;;;N;;;;; +13B41;EGYPTIAN HIEROGLYPH-13B41;Lo;0;L;;;;;N;;;;; +13B42;EGYPTIAN HIEROGLYPH-13B42;Lo;0;L;;;;;N;;;;; +13B43;EGYPTIAN HIEROGLYPH-13B43;Lo;0;L;;;;;N;;;;; +13B44;EGYPTIAN HIEROGLYPH-13B44;Lo;0;L;;;;;N;;;;; +13B45;EGYPTIAN HIEROGLYPH-13B45;Lo;0;L;;;;;N;;;;; +13B46;EGYPTIAN HIEROGLYPH-13B46;Lo;0;L;;;;;N;;;;; +13B47;EGYPTIAN HIEROGLYPH-13B47;Lo;0;L;;;;;N;;;;; +13B48;EGYPTIAN HIEROGLYPH-13B48;Lo;0;L;;;;;N;;;;; +13B49;EGYPTIAN HIEROGLYPH-13B49;Lo;0;L;;;;;N;;;;; +13B4A;EGYPTIAN HIEROGLYPH-13B4A;Lo;0;L;;;;;N;;;;; +13B4B;EGYPTIAN HIEROGLYPH-13B4B;Lo;0;L;;;;;N;;;;; +13B4C;EGYPTIAN HIEROGLYPH-13B4C;Lo;0;L;;;;;N;;;;; +13B4D;EGYPTIAN HIEROGLYPH-13B4D;Lo;0;L;;;;;N;;;;; +13B4E;EGYPTIAN HIEROGLYPH-13B4E;Lo;0;L;;;;;N;;;;; +13B4F;EGYPTIAN HIEROGLYPH-13B4F;Lo;0;L;;;;;N;;;;; +13B50;EGYPTIAN HIEROGLYPH-13B50;Lo;0;L;;;;;N;;;;; +13B51;EGYPTIAN HIEROGLYPH-13B51;Lo;0;L;;;;;N;;;;; +13B52;EGYPTIAN HIEROGLYPH-13B52;Lo;0;L;;;;;N;;;;; +13B53;EGYPTIAN HIEROGLYPH-13B53;Lo;0;L;;;;;N;;;;; +13B54;EGYPTIAN HIEROGLYPH-13B54;Lo;0;L;;;;;N;;;;; +13B55;EGYPTIAN HIEROGLYPH-13B55;Lo;0;L;;;;;N;;;;; +13B56;EGYPTIAN HIEROGLYPH-13B56;Lo;0;L;;;;;N;;;;; +13B57;EGYPTIAN HIEROGLYPH-13B57;Lo;0;L;;;;;N;;;;; +13B58;EGYPTIAN HIEROGLYPH-13B58;Lo;0;L;;;;;N;;;;; +13B59;EGYPTIAN HIEROGLYPH-13B59;Lo;0;L;;;;;N;;;;; +13B5A;EGYPTIAN HIEROGLYPH-13B5A;Lo;0;L;;;;;N;;;;; +13B5B;EGYPTIAN HIEROGLYPH-13B5B;Lo;0;L;;;;;N;;;;; +13B5C;EGYPTIAN HIEROGLYPH-13B5C;Lo;0;L;;;;;N;;;;; +13B5D;EGYPTIAN HIEROGLYPH-13B5D;Lo;0;L;;;;;N;;;;; +13B5E;EGYPTIAN HIEROGLYPH-13B5E;Lo;0;L;;;;;N;;;;; +13B5F;EGYPTIAN HIEROGLYPH-13B5F;Lo;0;L;;;;;N;;;;; +13B60;EGYPTIAN HIEROGLYPH-13B60;Lo;0;L;;;;;N;;;;; +13B61;EGYPTIAN HIEROGLYPH-13B61;Lo;0;L;;;;;N;;;;; +13B62;EGYPTIAN HIEROGLYPH-13B62;Lo;0;L;;;;;N;;;;; +13B63;EGYPTIAN HIEROGLYPH-13B63;Lo;0;L;;;;;N;;;;; +13B64;EGYPTIAN HIEROGLYPH-13B64;Lo;0;L;;;;;N;;;;; +13B65;EGYPTIAN HIEROGLYPH-13B65;Lo;0;L;;;;;N;;;;; +13B66;EGYPTIAN HIEROGLYPH-13B66;Lo;0;L;;;;;N;;;;; +13B67;EGYPTIAN HIEROGLYPH-13B67;Lo;0;L;;;;;N;;;;; +13B68;EGYPTIAN HIEROGLYPH-13B68;Lo;0;L;;;;;N;;;;; +13B69;EGYPTIAN HIEROGLYPH-13B69;Lo;0;L;;;;;N;;;;; +13B6A;EGYPTIAN HIEROGLYPH-13B6A;Lo;0;L;;;;;N;;;;; +13B6B;EGYPTIAN HIEROGLYPH-13B6B;Lo;0;L;;;;;N;;;;; +13B6C;EGYPTIAN HIEROGLYPH-13B6C;Lo;0;L;;;;;N;;;;; +13B6D;EGYPTIAN HIEROGLYPH-13B6D;Lo;0;L;;;;;N;;;;; +13B6E;EGYPTIAN HIEROGLYPH-13B6E;Lo;0;L;;;;;N;;;;; +13B6F;EGYPTIAN HIEROGLYPH-13B6F;Lo;0;L;;;;;N;;;;; +13B70;EGYPTIAN HIEROGLYPH-13B70;Lo;0;L;;;;;N;;;;; +13B71;EGYPTIAN HIEROGLYPH-13B71;Lo;0;L;;;;;N;;;;; +13B72;EGYPTIAN HIEROGLYPH-13B72;Lo;0;L;;;;;N;;;;; +13B73;EGYPTIAN HIEROGLYPH-13B73;Lo;0;L;;;;;N;;;;; +13B74;EGYPTIAN HIEROGLYPH-13B74;Lo;0;L;;;;;N;;;;; +13B75;EGYPTIAN HIEROGLYPH-13B75;Lo;0;L;;;;;N;;;;; +13B76;EGYPTIAN HIEROGLYPH-13B76;Lo;0;L;;;;;N;;;;; +13B77;EGYPTIAN HIEROGLYPH-13B77;Lo;0;L;;;;;N;;;;; +13B78;EGYPTIAN HIEROGLYPH-13B78;Lo;0;L;;;;;N;;;;; +13B79;EGYPTIAN HIEROGLYPH-13B79;Lo;0;L;;;;;N;;;;; +13B7A;EGYPTIAN HIEROGLYPH-13B7A;Lo;0;L;;;;;N;;;;; +13B7B;EGYPTIAN HIEROGLYPH-13B7B;Lo;0;L;;;;;N;;;;; +13B7C;EGYPTIAN HIEROGLYPH-13B7C;Lo;0;L;;;;;N;;;;; +13B7D;EGYPTIAN HIEROGLYPH-13B7D;Lo;0;L;;;;;N;;;;; +13B7E;EGYPTIAN HIEROGLYPH-13B7E;Lo;0;L;;;;;N;;;;; +13B7F;EGYPTIAN HIEROGLYPH-13B7F;Lo;0;L;;;;;N;;;;; +13B80;EGYPTIAN HIEROGLYPH-13B80;Lo;0;L;;;;;N;;;;; +13B81;EGYPTIAN HIEROGLYPH-13B81;Lo;0;L;;;;;N;;;;; +13B82;EGYPTIAN HIEROGLYPH-13B82;Lo;0;L;;;;;N;;;;; +13B83;EGYPTIAN HIEROGLYPH-13B83;Lo;0;L;;;;;N;;;;; +13B84;EGYPTIAN HIEROGLYPH-13B84;Lo;0;L;;;;;N;;;;; +13B85;EGYPTIAN HIEROGLYPH-13B85;Lo;0;L;;;;;N;;;;; +13B86;EGYPTIAN HIEROGLYPH-13B86;Lo;0;L;;;;;N;;;;; +13B87;EGYPTIAN HIEROGLYPH-13B87;Lo;0;L;;;;;N;;;;; +13B88;EGYPTIAN HIEROGLYPH-13B88;Lo;0;L;;;;;N;;;;; +13B89;EGYPTIAN HIEROGLYPH-13B89;Lo;0;L;;;;;N;;;;; +13B8A;EGYPTIAN HIEROGLYPH-13B8A;Lo;0;L;;;;;N;;;;; +13B8B;EGYPTIAN HIEROGLYPH-13B8B;Lo;0;L;;;;;N;;;;; +13B8C;EGYPTIAN HIEROGLYPH-13B8C;Lo;0;L;;;;;N;;;;; +13B8D;EGYPTIAN HIEROGLYPH-13B8D;Lo;0;L;;;;;N;;;;; +13B8E;EGYPTIAN HIEROGLYPH-13B8E;Lo;0;L;;;;;N;;;;; +13B8F;EGYPTIAN HIEROGLYPH-13B8F;Lo;0;L;;;;;N;;;;; +13B90;EGYPTIAN HIEROGLYPH-13B90;Lo;0;L;;;;;N;;;;; +13B91;EGYPTIAN HIEROGLYPH-13B91;Lo;0;L;;;;;N;;;;; +13B92;EGYPTIAN HIEROGLYPH-13B92;Lo;0;L;;;;;N;;;;; +13B93;EGYPTIAN HIEROGLYPH-13B93;Lo;0;L;;;;;N;;;;; +13B94;EGYPTIAN HIEROGLYPH-13B94;Lo;0;L;;;;;N;;;;; +13B95;EGYPTIAN HIEROGLYPH-13B95;Lo;0;L;;;;;N;;;;; +13B96;EGYPTIAN HIEROGLYPH-13B96;Lo;0;L;;;;;N;;;;; +13B97;EGYPTIAN HIEROGLYPH-13B97;Lo;0;L;;;;;N;;;;; +13B98;EGYPTIAN HIEROGLYPH-13B98;Lo;0;L;;;;;N;;;;; +13B99;EGYPTIAN HIEROGLYPH-13B99;Lo;0;L;;;;;N;;;;; +13B9A;EGYPTIAN HIEROGLYPH-13B9A;Lo;0;L;;;;;N;;;;; +13B9B;EGYPTIAN HIEROGLYPH-13B9B;Lo;0;L;;;;;N;;;;; +13B9C;EGYPTIAN HIEROGLYPH-13B9C;Lo;0;L;;;;;N;;;;; +13B9D;EGYPTIAN HIEROGLYPH-13B9D;Lo;0;L;;;;;N;;;;; +13B9E;EGYPTIAN HIEROGLYPH-13B9E;Lo;0;L;;;;;N;;;;; +13B9F;EGYPTIAN HIEROGLYPH-13B9F;Lo;0;L;;;;;N;;;;; +13BA0;EGYPTIAN HIEROGLYPH-13BA0;Lo;0;L;;;;;N;;;;; +13BA1;EGYPTIAN HIEROGLYPH-13BA1;Lo;0;L;;;;;N;;;;; +13BA2;EGYPTIAN HIEROGLYPH-13BA2;Lo;0;L;;;;;N;;;;; +13BA3;EGYPTIAN HIEROGLYPH-13BA3;Lo;0;L;;;;;N;;;;; +13BA4;EGYPTIAN HIEROGLYPH-13BA4;Lo;0;L;;;;;N;;;;; +13BA5;EGYPTIAN HIEROGLYPH-13BA5;Lo;0;L;;;;;N;;;;; +13BA6;EGYPTIAN HIEROGLYPH-13BA6;Lo;0;L;;;;;N;;;;; +13BA7;EGYPTIAN HIEROGLYPH-13BA7;Lo;0;L;;;;;N;;;;; +13BA8;EGYPTIAN HIEROGLYPH-13BA8;Lo;0;L;;;;;N;;;;; +13BA9;EGYPTIAN HIEROGLYPH-13BA9;Lo;0;L;;;;;N;;;;; +13BAA;EGYPTIAN HIEROGLYPH-13BAA;Lo;0;L;;;;;N;;;;; +13BAB;EGYPTIAN HIEROGLYPH-13BAB;Lo;0;L;;;;;N;;;;; +13BAC;EGYPTIAN HIEROGLYPH-13BAC;Lo;0;L;;;;;N;;;;; +13BAD;EGYPTIAN HIEROGLYPH-13BAD;Lo;0;L;;;;;N;;;;; +13BAE;EGYPTIAN HIEROGLYPH-13BAE;Lo;0;L;;;;;N;;;;; +13BAF;EGYPTIAN HIEROGLYPH-13BAF;Lo;0;L;;;;;N;;;;; +13BB0;EGYPTIAN HIEROGLYPH-13BB0;Lo;0;L;;;;;N;;;;; +13BB1;EGYPTIAN HIEROGLYPH-13BB1;Lo;0;L;;;;;N;;;;; +13BB2;EGYPTIAN HIEROGLYPH-13BB2;Lo;0;L;;;;;N;;;;; +13BB3;EGYPTIAN HIEROGLYPH-13BB3;Lo;0;L;;;;;N;;;;; +13BB4;EGYPTIAN HIEROGLYPH-13BB4;Lo;0;L;;;;;N;;;;; +13BB5;EGYPTIAN HIEROGLYPH-13BB5;Lo;0;L;;;;;N;;;;; +13BB6;EGYPTIAN HIEROGLYPH-13BB6;Lo;0;L;;;;;N;;;;; +13BB7;EGYPTIAN HIEROGLYPH-13BB7;Lo;0;L;;;;;N;;;;; +13BB8;EGYPTIAN HIEROGLYPH-13BB8;Lo;0;L;;;;;N;;;;; +13BB9;EGYPTIAN HIEROGLYPH-13BB9;Lo;0;L;;;;;N;;;;; +13BBA;EGYPTIAN HIEROGLYPH-13BBA;Lo;0;L;;;;;N;;;;; +13BBB;EGYPTIAN HIEROGLYPH-13BBB;Lo;0;L;;;;;N;;;;; +13BBC;EGYPTIAN HIEROGLYPH-13BBC;Lo;0;L;;;;;N;;;;; +13BBD;EGYPTIAN HIEROGLYPH-13BBD;Lo;0;L;;;;;N;;;;; +13BBE;EGYPTIAN HIEROGLYPH-13BBE;Lo;0;L;;;;;N;;;;; +13BBF;EGYPTIAN HIEROGLYPH-13BBF;Lo;0;L;;;;;N;;;;; +13BC0;EGYPTIAN HIEROGLYPH-13BC0;Lo;0;L;;;;;N;;;;; +13BC1;EGYPTIAN HIEROGLYPH-13BC1;Lo;0;L;;;;;N;;;;; +13BC2;EGYPTIAN HIEROGLYPH-13BC2;Lo;0;L;;;;;N;;;;; +13BC3;EGYPTIAN HIEROGLYPH-13BC3;Lo;0;L;;;;;N;;;;; +13BC4;EGYPTIAN HIEROGLYPH-13BC4;Lo;0;L;;;;;N;;;;; +13BC5;EGYPTIAN HIEROGLYPH-13BC5;Lo;0;L;;;;;N;;;;; +13BC6;EGYPTIAN HIEROGLYPH-13BC6;Lo;0;L;;;;;N;;;;; +13BC7;EGYPTIAN HIEROGLYPH-13BC7;Lo;0;L;;;;;N;;;;; +13BC8;EGYPTIAN HIEROGLYPH-13BC8;Lo;0;L;;;;;N;;;;; +13BC9;EGYPTIAN HIEROGLYPH-13BC9;Lo;0;L;;;;;N;;;;; +13BCA;EGYPTIAN HIEROGLYPH-13BCA;Lo;0;L;;;;;N;;;;; +13BCB;EGYPTIAN HIEROGLYPH-13BCB;Lo;0;L;;;;;N;;;;; +13BCC;EGYPTIAN HIEROGLYPH-13BCC;Lo;0;L;;;;;N;;;;; +13BCD;EGYPTIAN HIEROGLYPH-13BCD;Lo;0;L;;;;;N;;;;; +13BCE;EGYPTIAN HIEROGLYPH-13BCE;Lo;0;L;;;;;N;;;;; +13BCF;EGYPTIAN HIEROGLYPH-13BCF;Lo;0;L;;;;;N;;;;; +13BD0;EGYPTIAN HIEROGLYPH-13BD0;Lo;0;L;;;;;N;;;;; +13BD1;EGYPTIAN HIEROGLYPH-13BD1;Lo;0;L;;;;;N;;;;; +13BD2;EGYPTIAN HIEROGLYPH-13BD2;Lo;0;L;;;;;N;;;;; +13BD3;EGYPTIAN HIEROGLYPH-13BD3;Lo;0;L;;;;;N;;;;; +13BD4;EGYPTIAN HIEROGLYPH-13BD4;Lo;0;L;;;;;N;;;;; +13BD5;EGYPTIAN HIEROGLYPH-13BD5;Lo;0;L;;;;;N;;;;; +13BD6;EGYPTIAN HIEROGLYPH-13BD6;Lo;0;L;;;;;N;;;;; +13BD7;EGYPTIAN HIEROGLYPH-13BD7;Lo;0;L;;;;;N;;;;; +13BD8;EGYPTIAN HIEROGLYPH-13BD8;Lo;0;L;;;;;N;;;;; +13BD9;EGYPTIAN HIEROGLYPH-13BD9;Lo;0;L;;;;;N;;;;; +13BDA;EGYPTIAN HIEROGLYPH-13BDA;Lo;0;L;;;;;N;;;;; +13BDB;EGYPTIAN HIEROGLYPH-13BDB;Lo;0;L;;;;;N;;;;; +13BDC;EGYPTIAN HIEROGLYPH-13BDC;Lo;0;L;;;;;N;;;;; +13BDD;EGYPTIAN HIEROGLYPH-13BDD;Lo;0;L;;;;;N;;;;; +13BDE;EGYPTIAN HIEROGLYPH-13BDE;Lo;0;L;;;;;N;;;;; +13BDF;EGYPTIAN HIEROGLYPH-13BDF;Lo;0;L;;;;;N;;;;; +13BE0;EGYPTIAN HIEROGLYPH-13BE0;Lo;0;L;;;;;N;;;;; +13BE1;EGYPTIAN HIEROGLYPH-13BE1;Lo;0;L;;;;;N;;;;; +13BE2;EGYPTIAN HIEROGLYPH-13BE2;Lo;0;L;;;;;N;;;;; +13BE3;EGYPTIAN HIEROGLYPH-13BE3;Lo;0;L;;;;;N;;;;; +13BE4;EGYPTIAN HIEROGLYPH-13BE4;Lo;0;L;;;;;N;;;;; +13BE5;EGYPTIAN HIEROGLYPH-13BE5;Lo;0;L;;;;;N;;;;; +13BE6;EGYPTIAN HIEROGLYPH-13BE6;Lo;0;L;;;;;N;;;;; +13BE7;EGYPTIAN HIEROGLYPH-13BE7;Lo;0;L;;;;;N;;;;; +13BE8;EGYPTIAN HIEROGLYPH-13BE8;Lo;0;L;;;;;N;;;;; +13BE9;EGYPTIAN HIEROGLYPH-13BE9;Lo;0;L;;;;;N;;;;; +13BEA;EGYPTIAN HIEROGLYPH-13BEA;Lo;0;L;;;;;N;;;;; +13BEB;EGYPTIAN HIEROGLYPH-13BEB;Lo;0;L;;;;;N;;;;; +13BEC;EGYPTIAN HIEROGLYPH-13BEC;Lo;0;L;;;;;N;;;;; +13BED;EGYPTIAN HIEROGLYPH-13BED;Lo;0;L;;;;;N;;;;; +13BEE;EGYPTIAN HIEROGLYPH-13BEE;Lo;0;L;;;;;N;;;;; +13BEF;EGYPTIAN HIEROGLYPH-13BEF;Lo;0;L;;;;;N;;;;; +13BF0;EGYPTIAN HIEROGLYPH-13BF0;Lo;0;L;;;;;N;;;;; +13BF1;EGYPTIAN HIEROGLYPH-13BF1;Lo;0;L;;;;;N;;;;; +13BF2;EGYPTIAN HIEROGLYPH-13BF2;Lo;0;L;;;;;N;;;;; +13BF3;EGYPTIAN HIEROGLYPH-13BF3;Lo;0;L;;;;;N;;;;; +13BF4;EGYPTIAN HIEROGLYPH-13BF4;Lo;0;L;;;;;N;;;;; +13BF5;EGYPTIAN HIEROGLYPH-13BF5;Lo;0;L;;;;;N;;;;; +13BF6;EGYPTIAN HIEROGLYPH-13BF6;Lo;0;L;;;;;N;;;;; +13BF7;EGYPTIAN HIEROGLYPH-13BF7;Lo;0;L;;;;;N;;;;; +13BF8;EGYPTIAN HIEROGLYPH-13BF8;Lo;0;L;;;;;N;;;;; +13BF9;EGYPTIAN HIEROGLYPH-13BF9;Lo;0;L;;;;;N;;;;; +13BFA;EGYPTIAN HIEROGLYPH-13BFA;Lo;0;L;;;;;N;;;;; +13BFB;EGYPTIAN HIEROGLYPH-13BFB;Lo;0;L;;;;;N;;;;; +13BFC;EGYPTIAN HIEROGLYPH-13BFC;Lo;0;L;;;;;N;;;;; +13BFD;EGYPTIAN HIEROGLYPH-13BFD;Lo;0;L;;;;;N;;;;; +13BFE;EGYPTIAN HIEROGLYPH-13BFE;Lo;0;L;;;;;N;;;;; +13BFF;EGYPTIAN HIEROGLYPH-13BFF;Lo;0;L;;;;;N;;;;; +13C00;EGYPTIAN HIEROGLYPH-13C00;Lo;0;L;;;;;N;;;;; +13C01;EGYPTIAN HIEROGLYPH-13C01;Lo;0;L;;;;;N;;;;; +13C02;EGYPTIAN HIEROGLYPH-13C02;Lo;0;L;;;;;N;;;;; +13C03;EGYPTIAN HIEROGLYPH-13C03;Lo;0;L;;;;;N;;;;; +13C04;EGYPTIAN HIEROGLYPH-13C04;Lo;0;L;;;;;N;;;;; +13C05;EGYPTIAN HIEROGLYPH-13C05;Lo;0;L;;;;;N;;;;; +13C06;EGYPTIAN HIEROGLYPH-13C06;Lo;0;L;;;;;N;;;;; +13C07;EGYPTIAN HIEROGLYPH-13C07;Lo;0;L;;;;;N;;;;; +13C08;EGYPTIAN HIEROGLYPH-13C08;Lo;0;L;;;;;N;;;;; +13C09;EGYPTIAN HIEROGLYPH-13C09;Lo;0;L;;;;;N;;;;; +13C0A;EGYPTIAN HIEROGLYPH-13C0A;Lo;0;L;;;;;N;;;;; +13C0B;EGYPTIAN HIEROGLYPH-13C0B;Lo;0;L;;;;;N;;;;; +13C0C;EGYPTIAN HIEROGLYPH-13C0C;Lo;0;L;;;;;N;;;;; +13C0D;EGYPTIAN HIEROGLYPH-13C0D;Lo;0;L;;;;;N;;;;; +13C0E;EGYPTIAN HIEROGLYPH-13C0E;Lo;0;L;;;;;N;;;;; +13C0F;EGYPTIAN HIEROGLYPH-13C0F;Lo;0;L;;;;;N;;;;; +13C10;EGYPTIAN HIEROGLYPH-13C10;Lo;0;L;;;;;N;;;;; +13C11;EGYPTIAN HIEROGLYPH-13C11;Lo;0;L;;;;;N;;;;; +13C12;EGYPTIAN HIEROGLYPH-13C12;Lo;0;L;;;;;N;;;;; +13C13;EGYPTIAN HIEROGLYPH-13C13;Lo;0;L;;;;;N;;;;; +13C14;EGYPTIAN HIEROGLYPH-13C14;Lo;0;L;;;;;N;;;;; +13C15;EGYPTIAN HIEROGLYPH-13C15;Lo;0;L;;;;;N;;;;; +13C16;EGYPTIAN HIEROGLYPH-13C16;Lo;0;L;;;;;N;;;;; +13C17;EGYPTIAN HIEROGLYPH-13C17;Lo;0;L;;;;;N;;;;; +13C18;EGYPTIAN HIEROGLYPH-13C18;Lo;0;L;;;;;N;;;;; +13C19;EGYPTIAN HIEROGLYPH-13C19;Lo;0;L;;;;;N;;;;; +13C1A;EGYPTIAN HIEROGLYPH-13C1A;Lo;0;L;;;;;N;;;;; +13C1B;EGYPTIAN HIEROGLYPH-13C1B;Lo;0;L;;;;;N;;;;; +13C1C;EGYPTIAN HIEROGLYPH-13C1C;Lo;0;L;;;;;N;;;;; +13C1D;EGYPTIAN HIEROGLYPH-13C1D;Lo;0;L;;;;;N;;;;; +13C1E;EGYPTIAN HIEROGLYPH-13C1E;Lo;0;L;;;;;N;;;;; +13C1F;EGYPTIAN HIEROGLYPH-13C1F;Lo;0;L;;;;;N;;;;; +13C20;EGYPTIAN HIEROGLYPH-13C20;Lo;0;L;;;;;N;;;;; +13C21;EGYPTIAN HIEROGLYPH-13C21;Lo;0;L;;;;;N;;;;; +13C22;EGYPTIAN HIEROGLYPH-13C22;Lo;0;L;;;;;N;;;;; +13C23;EGYPTIAN HIEROGLYPH-13C23;Lo;0;L;;;;;N;;;;; +13C24;EGYPTIAN HIEROGLYPH-13C24;Lo;0;L;;;;;N;;;;; +13C25;EGYPTIAN HIEROGLYPH-13C25;Lo;0;L;;;;;N;;;;; +13C26;EGYPTIAN HIEROGLYPH-13C26;Lo;0;L;;;;;N;;;;; +13C27;EGYPTIAN HIEROGLYPH-13C27;Lo;0;L;;;;;N;;;;; +13C28;EGYPTIAN HIEROGLYPH-13C28;Lo;0;L;;;;;N;;;;; +13C29;EGYPTIAN HIEROGLYPH-13C29;Lo;0;L;;;;;N;;;;; +13C2A;EGYPTIAN HIEROGLYPH-13C2A;Lo;0;L;;;;;N;;;;; +13C2B;EGYPTIAN HIEROGLYPH-13C2B;Lo;0;L;;;;;N;;;;; +13C2C;EGYPTIAN HIEROGLYPH-13C2C;Lo;0;L;;;;;N;;;;; +13C2D;EGYPTIAN HIEROGLYPH-13C2D;Lo;0;L;;;;;N;;;;; +13C2E;EGYPTIAN HIEROGLYPH-13C2E;Lo;0;L;;;;;N;;;;; +13C2F;EGYPTIAN HIEROGLYPH-13C2F;Lo;0;L;;;;;N;;;;; +13C30;EGYPTIAN HIEROGLYPH-13C30;Lo;0;L;;;;;N;;;;; +13C31;EGYPTIAN HIEROGLYPH-13C31;Lo;0;L;;;;;N;;;;; +13C32;EGYPTIAN HIEROGLYPH-13C32;Lo;0;L;;;;;N;;;;; +13C33;EGYPTIAN HIEROGLYPH-13C33;Lo;0;L;;;;;N;;;;; +13C34;EGYPTIAN HIEROGLYPH-13C34;Lo;0;L;;;;;N;;;;; +13C35;EGYPTIAN HIEROGLYPH-13C35;Lo;0;L;;;;;N;;;;; +13C36;EGYPTIAN HIEROGLYPH-13C36;Lo;0;L;;;;;N;;;;; +13C37;EGYPTIAN HIEROGLYPH-13C37;Lo;0;L;;;;;N;;;;; +13C38;EGYPTIAN HIEROGLYPH-13C38;Lo;0;L;;;;;N;;;;; +13C39;EGYPTIAN HIEROGLYPH-13C39;Lo;0;L;;;;;N;;;;; +13C3A;EGYPTIAN HIEROGLYPH-13C3A;Lo;0;L;;;;;N;;;;; +13C3B;EGYPTIAN HIEROGLYPH-13C3B;Lo;0;L;;;;;N;;;;; +13C3C;EGYPTIAN HIEROGLYPH-13C3C;Lo;0;L;;;;;N;;;;; +13C3D;EGYPTIAN HIEROGLYPH-13C3D;Lo;0;L;;;;;N;;;;; +13C3E;EGYPTIAN HIEROGLYPH-13C3E;Lo;0;L;;;;;N;;;;; +13C3F;EGYPTIAN HIEROGLYPH-13C3F;Lo;0;L;;;;;N;;;;; +13C40;EGYPTIAN HIEROGLYPH-13C40;Lo;0;L;;;;;N;;;;; +13C41;EGYPTIAN HIEROGLYPH-13C41;Lo;0;L;;;;;N;;;;; +13C42;EGYPTIAN HIEROGLYPH-13C42;Lo;0;L;;;;;N;;;;; +13C43;EGYPTIAN HIEROGLYPH-13C43;Lo;0;L;;;;;N;;;;; +13C44;EGYPTIAN HIEROGLYPH-13C44;Lo;0;L;;;;;N;;;;; +13C45;EGYPTIAN HIEROGLYPH-13C45;Lo;0;L;;;;;N;;;;; +13C46;EGYPTIAN HIEROGLYPH-13C46;Lo;0;L;;;;;N;;;;; +13C47;EGYPTIAN HIEROGLYPH-13C47;Lo;0;L;;;;;N;;;;; +13C48;EGYPTIAN HIEROGLYPH-13C48;Lo;0;L;;;;;N;;;;; +13C49;EGYPTIAN HIEROGLYPH-13C49;Lo;0;L;;;;;N;;;;; +13C4A;EGYPTIAN HIEROGLYPH-13C4A;Lo;0;L;;;;;N;;;;; +13C4B;EGYPTIAN HIEROGLYPH-13C4B;Lo;0;L;;;;;N;;;;; +13C4C;EGYPTIAN HIEROGLYPH-13C4C;Lo;0;L;;;;;N;;;;; +13C4D;EGYPTIAN HIEROGLYPH-13C4D;Lo;0;L;;;;;N;;;;; +13C4E;EGYPTIAN HIEROGLYPH-13C4E;Lo;0;L;;;;;N;;;;; +13C4F;EGYPTIAN HIEROGLYPH-13C4F;Lo;0;L;;;;;N;;;;; +13C50;EGYPTIAN HIEROGLYPH-13C50;Lo;0;L;;;;;N;;;;; +13C51;EGYPTIAN HIEROGLYPH-13C51;Lo;0;L;;;;;N;;;;; +13C52;EGYPTIAN HIEROGLYPH-13C52;Lo;0;L;;;;;N;;;;; +13C53;EGYPTIAN HIEROGLYPH-13C53;Lo;0;L;;;;;N;;;;; +13C54;EGYPTIAN HIEROGLYPH-13C54;Lo;0;L;;;;;N;;;;; +13C55;EGYPTIAN HIEROGLYPH-13C55;Lo;0;L;;;;;N;;;;; +13C56;EGYPTIAN HIEROGLYPH-13C56;Lo;0;L;;;;;N;;;;; +13C57;EGYPTIAN HIEROGLYPH-13C57;Lo;0;L;;;;;N;;;;; +13C58;EGYPTIAN HIEROGLYPH-13C58;Lo;0;L;;;;;N;;;;; +13C59;EGYPTIAN HIEROGLYPH-13C59;Lo;0;L;;;;;N;;;;; +13C5A;EGYPTIAN HIEROGLYPH-13C5A;Lo;0;L;;;;;N;;;;; +13C5B;EGYPTIAN HIEROGLYPH-13C5B;Lo;0;L;;;;;N;;;;; +13C5C;EGYPTIAN HIEROGLYPH-13C5C;Lo;0;L;;;;;N;;;;; +13C5D;EGYPTIAN HIEROGLYPH-13C5D;Lo;0;L;;;;;N;;;;; +13C5E;EGYPTIAN HIEROGLYPH-13C5E;Lo;0;L;;;;;N;;;;; +13C5F;EGYPTIAN HIEROGLYPH-13C5F;Lo;0;L;;;;;N;;;;; +13C60;EGYPTIAN HIEROGLYPH-13C60;Lo;0;L;;;;;N;;;;; +13C61;EGYPTIAN HIEROGLYPH-13C61;Lo;0;L;;;;;N;;;;; +13C62;EGYPTIAN HIEROGLYPH-13C62;Lo;0;L;;;;;N;;;;; +13C63;EGYPTIAN HIEROGLYPH-13C63;Lo;0;L;;;;;N;;;;; +13C64;EGYPTIAN HIEROGLYPH-13C64;Lo;0;L;;;;;N;;;;; +13C65;EGYPTIAN HIEROGLYPH-13C65;Lo;0;L;;;;;N;;;;; +13C66;EGYPTIAN HIEROGLYPH-13C66;Lo;0;L;;;;;N;;;;; +13C67;EGYPTIAN HIEROGLYPH-13C67;Lo;0;L;;;;;N;;;;; +13C68;EGYPTIAN HIEROGLYPH-13C68;Lo;0;L;;;;;N;;;;; +13C69;EGYPTIAN HIEROGLYPH-13C69;Lo;0;L;;;;;N;;;;; +13C6A;EGYPTIAN HIEROGLYPH-13C6A;Lo;0;L;;;;;N;;;;; +13C6B;EGYPTIAN HIEROGLYPH-13C6B;Lo;0;L;;;;;N;;;;; +13C6C;EGYPTIAN HIEROGLYPH-13C6C;Lo;0;L;;;;;N;;;;; +13C6D;EGYPTIAN HIEROGLYPH-13C6D;Lo;0;L;;;;;N;;;;; +13C6E;EGYPTIAN HIEROGLYPH-13C6E;Lo;0;L;;;;;N;;;;; +13C6F;EGYPTIAN HIEROGLYPH-13C6F;Lo;0;L;;;;;N;;;;; +13C70;EGYPTIAN HIEROGLYPH-13C70;Lo;0;L;;;;;N;;;;; +13C71;EGYPTIAN HIEROGLYPH-13C71;Lo;0;L;;;;;N;;;;; +13C72;EGYPTIAN HIEROGLYPH-13C72;Lo;0;L;;;;;N;;;;; +13C73;EGYPTIAN HIEROGLYPH-13C73;Lo;0;L;;;;;N;;;;; +13C74;EGYPTIAN HIEROGLYPH-13C74;Lo;0;L;;;;;N;;;;; +13C75;EGYPTIAN HIEROGLYPH-13C75;Lo;0;L;;;;;N;;;;; +13C76;EGYPTIAN HIEROGLYPH-13C76;Lo;0;L;;;;;N;;;;; +13C77;EGYPTIAN HIEROGLYPH-13C77;Lo;0;L;;;;;N;;;;; +13C78;EGYPTIAN HIEROGLYPH-13C78;Lo;0;L;;;;;N;;;;; +13C79;EGYPTIAN HIEROGLYPH-13C79;Lo;0;L;;;;;N;;;;; +13C7A;EGYPTIAN HIEROGLYPH-13C7A;Lo;0;L;;;;;N;;;;; +13C7B;EGYPTIAN HIEROGLYPH-13C7B;Lo;0;L;;;;;N;;;;; +13C7C;EGYPTIAN HIEROGLYPH-13C7C;Lo;0;L;;;;;N;;;;; +13C7D;EGYPTIAN HIEROGLYPH-13C7D;Lo;0;L;;;;;N;;;;; +13C7E;EGYPTIAN HIEROGLYPH-13C7E;Lo;0;L;;;;;N;;;;; +13C7F;EGYPTIAN HIEROGLYPH-13C7F;Lo;0;L;;;;;N;;;;; +13C80;EGYPTIAN HIEROGLYPH-13C80;Lo;0;L;;;;;N;;;;; +13C81;EGYPTIAN HIEROGLYPH-13C81;Lo;0;L;;;;;N;;;;; +13C82;EGYPTIAN HIEROGLYPH-13C82;Lo;0;L;;;;;N;;;;; +13C83;EGYPTIAN HIEROGLYPH-13C83;Lo;0;L;;;;;N;;;;; +13C84;EGYPTIAN HIEROGLYPH-13C84;Lo;0;L;;;;;N;;;;; +13C85;EGYPTIAN HIEROGLYPH-13C85;Lo;0;L;;;;;N;;;;; +13C86;EGYPTIAN HIEROGLYPH-13C86;Lo;0;L;;;;;N;;;;; +13C87;EGYPTIAN HIEROGLYPH-13C87;Lo;0;L;;;;;N;;;;; +13C88;EGYPTIAN HIEROGLYPH-13C88;Lo;0;L;;;;;N;;;;; +13C89;EGYPTIAN HIEROGLYPH-13C89;Lo;0;L;;;;;N;;;;; +13C8A;EGYPTIAN HIEROGLYPH-13C8A;Lo;0;L;;;;;N;;;;; +13C8B;EGYPTIAN HIEROGLYPH-13C8B;Lo;0;L;;;;;N;;;;; +13C8C;EGYPTIAN HIEROGLYPH-13C8C;Lo;0;L;;;;;N;;;;; +13C8D;EGYPTIAN HIEROGLYPH-13C8D;Lo;0;L;;;;;N;;;;; +13C8E;EGYPTIAN HIEROGLYPH-13C8E;Lo;0;L;;;;;N;;;;; +13C8F;EGYPTIAN HIEROGLYPH-13C8F;Lo;0;L;;;;;N;;;;; +13C90;EGYPTIAN HIEROGLYPH-13C90;Lo;0;L;;;;;N;;;;; +13C91;EGYPTIAN HIEROGLYPH-13C91;Lo;0;L;;;;;N;;;;; +13C92;EGYPTIAN HIEROGLYPH-13C92;Lo;0;L;;;;;N;;;;; +13C93;EGYPTIAN HIEROGLYPH-13C93;Lo;0;L;;;;;N;;;;; +13C94;EGYPTIAN HIEROGLYPH-13C94;Lo;0;L;;;;;N;;;;; +13C95;EGYPTIAN HIEROGLYPH-13C95;Lo;0;L;;;;;N;;;;; +13C96;EGYPTIAN HIEROGLYPH-13C96;Lo;0;L;;;;;N;;;;; +13C97;EGYPTIAN HIEROGLYPH-13C97;Lo;0;L;;;;;N;;;;; +13C98;EGYPTIAN HIEROGLYPH-13C98;Lo;0;L;;;;;N;;;;; +13C99;EGYPTIAN HIEROGLYPH-13C99;Lo;0;L;;;;;N;;;;; +13C9A;EGYPTIAN HIEROGLYPH-13C9A;Lo;0;L;;;;;N;;;;; +13C9B;EGYPTIAN HIEROGLYPH-13C9B;Lo;0;L;;;;;N;;;;; +13C9C;EGYPTIAN HIEROGLYPH-13C9C;Lo;0;L;;;;;N;;;;; +13C9D;EGYPTIAN HIEROGLYPH-13C9D;Lo;0;L;;;;;N;;;;; +13C9E;EGYPTIAN HIEROGLYPH-13C9E;Lo;0;L;;;;;N;;;;; +13C9F;EGYPTIAN HIEROGLYPH-13C9F;Lo;0;L;;;;;N;;;;; +13CA0;EGYPTIAN HIEROGLYPH-13CA0;Lo;0;L;;;;;N;;;;; +13CA1;EGYPTIAN HIEROGLYPH-13CA1;Lo;0;L;;;;;N;;;;; +13CA2;EGYPTIAN HIEROGLYPH-13CA2;Lo;0;L;;;;;N;;;;; +13CA3;EGYPTIAN HIEROGLYPH-13CA3;Lo;0;L;;;;;N;;;;; +13CA4;EGYPTIAN HIEROGLYPH-13CA4;Lo;0;L;;;;;N;;;;; +13CA5;EGYPTIAN HIEROGLYPH-13CA5;Lo;0;L;;;;;N;;;;; +13CA6;EGYPTIAN HIEROGLYPH-13CA6;Lo;0;L;;;;;N;;;;; +13CA7;EGYPTIAN HIEROGLYPH-13CA7;Lo;0;L;;;;;N;;;;; +13CA8;EGYPTIAN HIEROGLYPH-13CA8;Lo;0;L;;;;;N;;;;; +13CA9;EGYPTIAN HIEROGLYPH-13CA9;Lo;0;L;;;;;N;;;;; +13CAA;EGYPTIAN HIEROGLYPH-13CAA;Lo;0;L;;;;;N;;;;; +13CAB;EGYPTIAN HIEROGLYPH-13CAB;Lo;0;L;;;;;N;;;;; +13CAC;EGYPTIAN HIEROGLYPH-13CAC;Lo;0;L;;;;;N;;;;; +13CAD;EGYPTIAN HIEROGLYPH-13CAD;Lo;0;L;;;;;N;;;;; +13CAE;EGYPTIAN HIEROGLYPH-13CAE;Lo;0;L;;;;;N;;;;; +13CAF;EGYPTIAN HIEROGLYPH-13CAF;Lo;0;L;;;;;N;;;;; +13CB0;EGYPTIAN HIEROGLYPH-13CB0;Lo;0;L;;;;;N;;;;; +13CB1;EGYPTIAN HIEROGLYPH-13CB1;Lo;0;L;;;;;N;;;;; +13CB2;EGYPTIAN HIEROGLYPH-13CB2;Lo;0;L;;;;;N;;;;; +13CB3;EGYPTIAN HIEROGLYPH-13CB3;Lo;0;L;;;;;N;;;;; +13CB4;EGYPTIAN HIEROGLYPH-13CB4;Lo;0;L;;;;;N;;;;; +13CB5;EGYPTIAN HIEROGLYPH-13CB5;Lo;0;L;;;;;N;;;;; +13CB6;EGYPTIAN HIEROGLYPH-13CB6;Lo;0;L;;;;;N;;;;; +13CB7;EGYPTIAN HIEROGLYPH-13CB7;Lo;0;L;;;;;N;;;;; +13CB8;EGYPTIAN HIEROGLYPH-13CB8;Lo;0;L;;;;;N;;;;; +13CB9;EGYPTIAN HIEROGLYPH-13CB9;Lo;0;L;;;;;N;;;;; +13CBA;EGYPTIAN HIEROGLYPH-13CBA;Lo;0;L;;;;;N;;;;; +13CBB;EGYPTIAN HIEROGLYPH-13CBB;Lo;0;L;;;;;N;;;;; +13CBC;EGYPTIAN HIEROGLYPH-13CBC;Lo;0;L;;;;;N;;;;; +13CBD;EGYPTIAN HIEROGLYPH-13CBD;Lo;0;L;;;;;N;;;;; +13CBE;EGYPTIAN HIEROGLYPH-13CBE;Lo;0;L;;;;;N;;;;; +13CBF;EGYPTIAN HIEROGLYPH-13CBF;Lo;0;L;;;;;N;;;;; +13CC0;EGYPTIAN HIEROGLYPH-13CC0;Lo;0;L;;;;;N;;;;; +13CC1;EGYPTIAN HIEROGLYPH-13CC1;Lo;0;L;;;;;N;;;;; +13CC2;EGYPTIAN HIEROGLYPH-13CC2;Lo;0;L;;;;;N;;;;; +13CC3;EGYPTIAN HIEROGLYPH-13CC3;Lo;0;L;;;;;N;;;;; +13CC4;EGYPTIAN HIEROGLYPH-13CC4;Lo;0;L;;;;;N;;;;; +13CC5;EGYPTIAN HIEROGLYPH-13CC5;Lo;0;L;;;;;N;;;;; +13CC6;EGYPTIAN HIEROGLYPH-13CC6;Lo;0;L;;;;;N;;;;; +13CC7;EGYPTIAN HIEROGLYPH-13CC7;Lo;0;L;;;;;N;;;;; +13CC8;EGYPTIAN HIEROGLYPH-13CC8;Lo;0;L;;;;;N;;;;; +13CC9;EGYPTIAN HIEROGLYPH-13CC9;Lo;0;L;;;;;N;;;;; +13CCA;EGYPTIAN HIEROGLYPH-13CCA;Lo;0;L;;;;;N;;;;; +13CCB;EGYPTIAN HIEROGLYPH-13CCB;Lo;0;L;;;;;N;;;;; +13CCC;EGYPTIAN HIEROGLYPH-13CCC;Lo;0;L;;;;;N;;;;; +13CCD;EGYPTIAN HIEROGLYPH-13CCD;Lo;0;L;;;;;N;;;;; +13CCE;EGYPTIAN HIEROGLYPH-13CCE;Lo;0;L;;;;;N;;;;; +13CCF;EGYPTIAN HIEROGLYPH-13CCF;Lo;0;L;;;;;N;;;;; +13CD0;EGYPTIAN HIEROGLYPH-13CD0;Lo;0;L;;;;;N;;;;; +13CD1;EGYPTIAN HIEROGLYPH-13CD1;Lo;0;L;;;;;N;;;;; +13CD2;EGYPTIAN HIEROGLYPH-13CD2;Lo;0;L;;;;;N;;;;; +13CD3;EGYPTIAN HIEROGLYPH-13CD3;Lo;0;L;;;;;N;;;;; +13CD4;EGYPTIAN HIEROGLYPH-13CD4;Lo;0;L;;;;;N;;;;; +13CD5;EGYPTIAN HIEROGLYPH-13CD5;Lo;0;L;;;;;N;;;;; +13CD6;EGYPTIAN HIEROGLYPH-13CD6;Lo;0;L;;;;;N;;;;; +13CD7;EGYPTIAN HIEROGLYPH-13CD7;Lo;0;L;;;;;N;;;;; +13CD8;EGYPTIAN HIEROGLYPH-13CD8;Lo;0;L;;;;;N;;;;; +13CD9;EGYPTIAN HIEROGLYPH-13CD9;Lo;0;L;;;;;N;;;;; +13CDA;EGYPTIAN HIEROGLYPH-13CDA;Lo;0;L;;;;;N;;;;; +13CDB;EGYPTIAN HIEROGLYPH-13CDB;Lo;0;L;;;;;N;;;;; +13CDC;EGYPTIAN HIEROGLYPH-13CDC;Lo;0;L;;;;;N;;;;; +13CDD;EGYPTIAN HIEROGLYPH-13CDD;Lo;0;L;;;;;N;;;;; +13CDE;EGYPTIAN HIEROGLYPH-13CDE;Lo;0;L;;;;;N;;;;; +13CDF;EGYPTIAN HIEROGLYPH-13CDF;Lo;0;L;;;;;N;;;;; +13CE0;EGYPTIAN HIEROGLYPH-13CE0;Lo;0;L;;;;;N;;;;; +13CE1;EGYPTIAN HIEROGLYPH-13CE1;Lo;0;L;;;;;N;;;;; +13CE2;EGYPTIAN HIEROGLYPH-13CE2;Lo;0;L;;;;;N;;;;; +13CE3;EGYPTIAN HIEROGLYPH-13CE3;Lo;0;L;;;;;N;;;;; +13CE4;EGYPTIAN HIEROGLYPH-13CE4;Lo;0;L;;;;;N;;;;; +13CE5;EGYPTIAN HIEROGLYPH-13CE5;Lo;0;L;;;;;N;;;;; +13CE6;EGYPTIAN HIEROGLYPH-13CE6;Lo;0;L;;;;;N;;;;; +13CE7;EGYPTIAN HIEROGLYPH-13CE7;Lo;0;L;;;;;N;;;;; +13CE8;EGYPTIAN HIEROGLYPH-13CE8;Lo;0;L;;;;;N;;;;; +13CE9;EGYPTIAN HIEROGLYPH-13CE9;Lo;0;L;;;;;N;;;;; +13CEA;EGYPTIAN HIEROGLYPH-13CEA;Lo;0;L;;;;;N;;;;; +13CEB;EGYPTIAN HIEROGLYPH-13CEB;Lo;0;L;;;;;N;;;;; +13CEC;EGYPTIAN HIEROGLYPH-13CEC;Lo;0;L;;;;;N;;;;; +13CED;EGYPTIAN HIEROGLYPH-13CED;Lo;0;L;;;;;N;;;;; +13CEE;EGYPTIAN HIEROGLYPH-13CEE;Lo;0;L;;;;;N;;;;; +13CEF;EGYPTIAN HIEROGLYPH-13CEF;Lo;0;L;;;;;N;;;;; +13CF0;EGYPTIAN HIEROGLYPH-13CF0;Lo;0;L;;;;;N;;;;; +13CF1;EGYPTIAN HIEROGLYPH-13CF1;Lo;0;L;;;;;N;;;;; +13CF2;EGYPTIAN HIEROGLYPH-13CF2;Lo;0;L;;;;;N;;;;; +13CF3;EGYPTIAN HIEROGLYPH-13CF3;Lo;0;L;;;;;N;;;;; +13CF4;EGYPTIAN HIEROGLYPH-13CF4;Lo;0;L;;;;;N;;;;; +13CF5;EGYPTIAN HIEROGLYPH-13CF5;Lo;0;L;;;;;N;;;;; +13CF6;EGYPTIAN HIEROGLYPH-13CF6;Lo;0;L;;;;;N;;;;; +13CF7;EGYPTIAN HIEROGLYPH-13CF7;Lo;0;L;;;;;N;;;;; +13CF8;EGYPTIAN HIEROGLYPH-13CF8;Lo;0;L;;;;;N;;;;; +13CF9;EGYPTIAN HIEROGLYPH-13CF9;Lo;0;L;;;;;N;;;;; +13CFA;EGYPTIAN HIEROGLYPH-13CFA;Lo;0;L;;;;;N;;;;; +13CFB;EGYPTIAN HIEROGLYPH-13CFB;Lo;0;L;;;;;N;;;;; +13CFC;EGYPTIAN HIEROGLYPH-13CFC;Lo;0;L;;;;;N;;;;; +13CFD;EGYPTIAN HIEROGLYPH-13CFD;Lo;0;L;;;;;N;;;;; +13CFE;EGYPTIAN HIEROGLYPH-13CFE;Lo;0;L;;;;;N;;;;; +13CFF;EGYPTIAN HIEROGLYPH-13CFF;Lo;0;L;;;;;N;;;;; +13D00;EGYPTIAN HIEROGLYPH-13D00;Lo;0;L;;;;;N;;;;; +13D01;EGYPTIAN HIEROGLYPH-13D01;Lo;0;L;;;;;N;;;;; +13D02;EGYPTIAN HIEROGLYPH-13D02;Lo;0;L;;;;;N;;;;; +13D03;EGYPTIAN HIEROGLYPH-13D03;Lo;0;L;;;;;N;;;;; +13D04;EGYPTIAN HIEROGLYPH-13D04;Lo;0;L;;;;;N;;;;; +13D05;EGYPTIAN HIEROGLYPH-13D05;Lo;0;L;;;;;N;;;;; +13D06;EGYPTIAN HIEROGLYPH-13D06;Lo;0;L;;;;;N;;;;; +13D07;EGYPTIAN HIEROGLYPH-13D07;Lo;0;L;;;;;N;;;;; +13D08;EGYPTIAN HIEROGLYPH-13D08;Lo;0;L;;;;;N;;;;; +13D09;EGYPTIAN HIEROGLYPH-13D09;Lo;0;L;;;;;N;;;;; +13D0A;EGYPTIAN HIEROGLYPH-13D0A;Lo;0;L;;;;;N;;;;; +13D0B;EGYPTIAN HIEROGLYPH-13D0B;Lo;0;L;;;;;N;;;;; +13D0C;EGYPTIAN HIEROGLYPH-13D0C;Lo;0;L;;;;;N;;;;; +13D0D;EGYPTIAN HIEROGLYPH-13D0D;Lo;0;L;;;;;N;;;;; +13D0E;EGYPTIAN HIEROGLYPH-13D0E;Lo;0;L;;;;;N;;;;; +13D0F;EGYPTIAN HIEROGLYPH-13D0F;Lo;0;L;;;;;N;;;;; +13D10;EGYPTIAN HIEROGLYPH-13D10;Lo;0;L;;;;;N;;;;; +13D11;EGYPTIAN HIEROGLYPH-13D11;Lo;0;L;;;;;N;;;;; +13D12;EGYPTIAN HIEROGLYPH-13D12;Lo;0;L;;;;;N;;;;; +13D13;EGYPTIAN HIEROGLYPH-13D13;Lo;0;L;;;;;N;;;;; +13D14;EGYPTIAN HIEROGLYPH-13D14;Lo;0;L;;;;;N;;;;; +13D15;EGYPTIAN HIEROGLYPH-13D15;Lo;0;L;;;;;N;;;;; +13D16;EGYPTIAN HIEROGLYPH-13D16;Lo;0;L;;;;;N;;;;; +13D17;EGYPTIAN HIEROGLYPH-13D17;Lo;0;L;;;;;N;;;;; +13D18;EGYPTIAN HIEROGLYPH-13D18;Lo;0;L;;;;;N;;;;; +13D19;EGYPTIAN HIEROGLYPH-13D19;Lo;0;L;;;;;N;;;;; +13D1A;EGYPTIAN HIEROGLYPH-13D1A;Lo;0;L;;;;;N;;;;; +13D1B;EGYPTIAN HIEROGLYPH-13D1B;Lo;0;L;;;;;N;;;;; +13D1C;EGYPTIAN HIEROGLYPH-13D1C;Lo;0;L;;;;;N;;;;; +13D1D;EGYPTIAN HIEROGLYPH-13D1D;Lo;0;L;;;;;N;;;;; +13D1E;EGYPTIAN HIEROGLYPH-13D1E;Lo;0;L;;;;;N;;;;; +13D1F;EGYPTIAN HIEROGLYPH-13D1F;Lo;0;L;;;;;N;;;;; +13D20;EGYPTIAN HIEROGLYPH-13D20;Lo;0;L;;;;;N;;;;; +13D21;EGYPTIAN HIEROGLYPH-13D21;Lo;0;L;;;;;N;;;;; +13D22;EGYPTIAN HIEROGLYPH-13D22;Lo;0;L;;;;;N;;;;; +13D23;EGYPTIAN HIEROGLYPH-13D23;Lo;0;L;;;;;N;;;;; +13D24;EGYPTIAN HIEROGLYPH-13D24;Lo;0;L;;;;;N;;;;; +13D25;EGYPTIAN HIEROGLYPH-13D25;Lo;0;L;;;;;N;;;;; +13D26;EGYPTIAN HIEROGLYPH-13D26;Lo;0;L;;;;;N;;;;; +13D27;EGYPTIAN HIEROGLYPH-13D27;Lo;0;L;;;;;N;;;;; +13D28;EGYPTIAN HIEROGLYPH-13D28;Lo;0;L;;;;;N;;;;; +13D29;EGYPTIAN HIEROGLYPH-13D29;Lo;0;L;;;;;N;;;;; +13D2A;EGYPTIAN HIEROGLYPH-13D2A;Lo;0;L;;;;;N;;;;; +13D2B;EGYPTIAN HIEROGLYPH-13D2B;Lo;0;L;;;;;N;;;;; +13D2C;EGYPTIAN HIEROGLYPH-13D2C;Lo;0;L;;;;;N;;;;; +13D2D;EGYPTIAN HIEROGLYPH-13D2D;Lo;0;L;;;;;N;;;;; +13D2E;EGYPTIAN HIEROGLYPH-13D2E;Lo;0;L;;;;;N;;;;; +13D2F;EGYPTIAN HIEROGLYPH-13D2F;Lo;0;L;;;;;N;;;;; +13D30;EGYPTIAN HIEROGLYPH-13D30;Lo;0;L;;;;;N;;;;; +13D31;EGYPTIAN HIEROGLYPH-13D31;Lo;0;L;;;;;N;;;;; +13D32;EGYPTIAN HIEROGLYPH-13D32;Lo;0;L;;;;;N;;;;; +13D33;EGYPTIAN HIEROGLYPH-13D33;Lo;0;L;;;;;N;;;;; +13D34;EGYPTIAN HIEROGLYPH-13D34;Lo;0;L;;;;;N;;;;; +13D35;EGYPTIAN HIEROGLYPH-13D35;Lo;0;L;;;;;N;;;;; +13D36;EGYPTIAN HIEROGLYPH-13D36;Lo;0;L;;;;;N;;;;; +13D37;EGYPTIAN HIEROGLYPH-13D37;Lo;0;L;;;;;N;;;;; +13D38;EGYPTIAN HIEROGLYPH-13D38;Lo;0;L;;;;;N;;;;; +13D39;EGYPTIAN HIEROGLYPH-13D39;Lo;0;L;;;;;N;;;;; +13D3A;EGYPTIAN HIEROGLYPH-13D3A;Lo;0;L;;;;;N;;;;; +13D3B;EGYPTIAN HIEROGLYPH-13D3B;Lo;0;L;;;;;N;;;;; +13D3C;EGYPTIAN HIEROGLYPH-13D3C;Lo;0;L;;;;;N;;;;; +13D3D;EGYPTIAN HIEROGLYPH-13D3D;Lo;0;L;;;;;N;;;;; +13D3E;EGYPTIAN HIEROGLYPH-13D3E;Lo;0;L;;;;;N;;;;; +13D3F;EGYPTIAN HIEROGLYPH-13D3F;Lo;0;L;;;;;N;;;;; +13D40;EGYPTIAN HIEROGLYPH-13D40;Lo;0;L;;;;;N;;;;; +13D41;EGYPTIAN HIEROGLYPH-13D41;Lo;0;L;;;;;N;;;;; +13D42;EGYPTIAN HIEROGLYPH-13D42;Lo;0;L;;;;;N;;;;; +13D43;EGYPTIAN HIEROGLYPH-13D43;Lo;0;L;;;;;N;;;;; +13D44;EGYPTIAN HIEROGLYPH-13D44;Lo;0;L;;;;;N;;;;; +13D45;EGYPTIAN HIEROGLYPH-13D45;Lo;0;L;;;;;N;;;;; +13D46;EGYPTIAN HIEROGLYPH-13D46;Lo;0;L;;;;;N;;;;; +13D47;EGYPTIAN HIEROGLYPH-13D47;Lo;0;L;;;;;N;;;;; +13D48;EGYPTIAN HIEROGLYPH-13D48;Lo;0;L;;;;;N;;;;; +13D49;EGYPTIAN HIEROGLYPH-13D49;Lo;0;L;;;;;N;;;;; +13D4A;EGYPTIAN HIEROGLYPH-13D4A;Lo;0;L;;;;;N;;;;; +13D4B;EGYPTIAN HIEROGLYPH-13D4B;Lo;0;L;;;;;N;;;;; +13D4C;EGYPTIAN HIEROGLYPH-13D4C;Lo;0;L;;;;;N;;;;; +13D4D;EGYPTIAN HIEROGLYPH-13D4D;Lo;0;L;;;;;N;;;;; +13D4E;EGYPTIAN HIEROGLYPH-13D4E;Lo;0;L;;;;;N;;;;; +13D4F;EGYPTIAN HIEROGLYPH-13D4F;Lo;0;L;;;;;N;;;;; +13D50;EGYPTIAN HIEROGLYPH-13D50;Lo;0;L;;;;;N;;;;; +13D51;EGYPTIAN HIEROGLYPH-13D51;Lo;0;L;;;;;N;;;;; +13D52;EGYPTIAN HIEROGLYPH-13D52;Lo;0;L;;;;;N;;;;; +13D53;EGYPTIAN HIEROGLYPH-13D53;Lo;0;L;;;;;N;;;;; +13D54;EGYPTIAN HIEROGLYPH-13D54;Lo;0;L;;;;;N;;;;; +13D55;EGYPTIAN HIEROGLYPH-13D55;Lo;0;L;;;;;N;;;;; +13D56;EGYPTIAN HIEROGLYPH-13D56;Lo;0;L;;;;;N;;;;; +13D57;EGYPTIAN HIEROGLYPH-13D57;Lo;0;L;;;;;N;;;;; +13D58;EGYPTIAN HIEROGLYPH-13D58;Lo;0;L;;;;;N;;;;; +13D59;EGYPTIAN HIEROGLYPH-13D59;Lo;0;L;;;;;N;;;;; +13D5A;EGYPTIAN HIEROGLYPH-13D5A;Lo;0;L;;;;;N;;;;; +13D5B;EGYPTIAN HIEROGLYPH-13D5B;Lo;0;L;;;;;N;;;;; +13D5C;EGYPTIAN HIEROGLYPH-13D5C;Lo;0;L;;;;;N;;;;; +13D5D;EGYPTIAN HIEROGLYPH-13D5D;Lo;0;L;;;;;N;;;;; +13D5E;EGYPTIAN HIEROGLYPH-13D5E;Lo;0;L;;;;;N;;;;; +13D5F;EGYPTIAN HIEROGLYPH-13D5F;Lo;0;L;;;;;N;;;;; +13D60;EGYPTIAN HIEROGLYPH-13D60;Lo;0;L;;;;;N;;;;; +13D61;EGYPTIAN HIEROGLYPH-13D61;Lo;0;L;;;;;N;;;;; +13D62;EGYPTIAN HIEROGLYPH-13D62;Lo;0;L;;;;;N;;;;; +13D63;EGYPTIAN HIEROGLYPH-13D63;Lo;0;L;;;;;N;;;;; +13D64;EGYPTIAN HIEROGLYPH-13D64;Lo;0;L;;;;;N;;;;; +13D65;EGYPTIAN HIEROGLYPH-13D65;Lo;0;L;;;;;N;;;;; +13D66;EGYPTIAN HIEROGLYPH-13D66;Lo;0;L;;;;;N;;;;; +13D67;EGYPTIAN HIEROGLYPH-13D67;Lo;0;L;;;;;N;;;;; +13D68;EGYPTIAN HIEROGLYPH-13D68;Lo;0;L;;;;;N;;;;; +13D69;EGYPTIAN HIEROGLYPH-13D69;Lo;0;L;;;;;N;;;;; +13D6A;EGYPTIAN HIEROGLYPH-13D6A;Lo;0;L;;;;;N;;;;; +13D6B;EGYPTIAN HIEROGLYPH-13D6B;Lo;0;L;;;;;N;;;;; +13D6C;EGYPTIAN HIEROGLYPH-13D6C;Lo;0;L;;;;;N;;;;; +13D6D;EGYPTIAN HIEROGLYPH-13D6D;Lo;0;L;;;;;N;;;;; +13D6E;EGYPTIAN HIEROGLYPH-13D6E;Lo;0;L;;;;;N;;;;; +13D6F;EGYPTIAN HIEROGLYPH-13D6F;Lo;0;L;;;;;N;;;;; +13D70;EGYPTIAN HIEROGLYPH-13D70;Lo;0;L;;;;;N;;;;; +13D71;EGYPTIAN HIEROGLYPH-13D71;Lo;0;L;;;;;N;;;;; +13D72;EGYPTIAN HIEROGLYPH-13D72;Lo;0;L;;;;;N;;;;; +13D73;EGYPTIAN HIEROGLYPH-13D73;Lo;0;L;;;;;N;;;;; +13D74;EGYPTIAN HIEROGLYPH-13D74;Lo;0;L;;;;;N;;;;; +13D75;EGYPTIAN HIEROGLYPH-13D75;Lo;0;L;;;;;N;;;;; +13D76;EGYPTIAN HIEROGLYPH-13D76;Lo;0;L;;;;;N;;;;; +13D77;EGYPTIAN HIEROGLYPH-13D77;Lo;0;L;;;;;N;;;;; +13D78;EGYPTIAN HIEROGLYPH-13D78;Lo;0;L;;;;;N;;;;; +13D79;EGYPTIAN HIEROGLYPH-13D79;Lo;0;L;;;;;N;;;;; +13D7A;EGYPTIAN HIEROGLYPH-13D7A;Lo;0;L;;;;;N;;;;; +13D7B;EGYPTIAN HIEROGLYPH-13D7B;Lo;0;L;;;;;N;;;;; +13D7C;EGYPTIAN HIEROGLYPH-13D7C;Lo;0;L;;;;;N;;;;; +13D7D;EGYPTIAN HIEROGLYPH-13D7D;Lo;0;L;;;;;N;;;;; +13D7E;EGYPTIAN HIEROGLYPH-13D7E;Lo;0;L;;;;;N;;;;; +13D7F;EGYPTIAN HIEROGLYPH-13D7F;Lo;0;L;;;;;N;;;;; +13D80;EGYPTIAN HIEROGLYPH-13D80;Lo;0;L;;;;;N;;;;; +13D81;EGYPTIAN HIEROGLYPH-13D81;Lo;0;L;;;;;N;;;;; +13D82;EGYPTIAN HIEROGLYPH-13D82;Lo;0;L;;;;;N;;;;; +13D83;EGYPTIAN HIEROGLYPH-13D83;Lo;0;L;;;;;N;;;;; +13D84;EGYPTIAN HIEROGLYPH-13D84;Lo;0;L;;;;;N;;;;; +13D85;EGYPTIAN HIEROGLYPH-13D85;Lo;0;L;;;;;N;;;;; +13D86;EGYPTIAN HIEROGLYPH-13D86;Lo;0;L;;;;;N;;;;; +13D87;EGYPTIAN HIEROGLYPH-13D87;Lo;0;L;;;;;N;;;;; +13D88;EGYPTIAN HIEROGLYPH-13D88;Lo;0;L;;;;;N;;;;; +13D89;EGYPTIAN HIEROGLYPH-13D89;Lo;0;L;;;;;N;;;;; +13D8A;EGYPTIAN HIEROGLYPH-13D8A;Lo;0;L;;;;;N;;;;; +13D8B;EGYPTIAN HIEROGLYPH-13D8B;Lo;0;L;;;;;N;;;;; +13D8C;EGYPTIAN HIEROGLYPH-13D8C;Lo;0;L;;;;;N;;;;; +13D8D;EGYPTIAN HIEROGLYPH-13D8D;Lo;0;L;;;;;N;;;;; +13D8E;EGYPTIAN HIEROGLYPH-13D8E;Lo;0;L;;;;;N;;;;; +13D8F;EGYPTIAN HIEROGLYPH-13D8F;Lo;0;L;;;;;N;;;;; +13D90;EGYPTIAN HIEROGLYPH-13D90;Lo;0;L;;;;;N;;;;; +13D91;EGYPTIAN HIEROGLYPH-13D91;Lo;0;L;;;;;N;;;;; +13D92;EGYPTIAN HIEROGLYPH-13D92;Lo;0;L;;;;;N;;;;; +13D93;EGYPTIAN HIEROGLYPH-13D93;Lo;0;L;;;;;N;;;;; +13D94;EGYPTIAN HIEROGLYPH-13D94;Lo;0;L;;;;;N;;;;; +13D95;EGYPTIAN HIEROGLYPH-13D95;Lo;0;L;;;;;N;;;;; +13D96;EGYPTIAN HIEROGLYPH-13D96;Lo;0;L;;;;;N;;;;; +13D97;EGYPTIAN HIEROGLYPH-13D97;Lo;0;L;;;;;N;;;;; +13D98;EGYPTIAN HIEROGLYPH-13D98;Lo;0;L;;;;;N;;;;; +13D99;EGYPTIAN HIEROGLYPH-13D99;Lo;0;L;;;;;N;;;;; +13D9A;EGYPTIAN HIEROGLYPH-13D9A;Lo;0;L;;;;;N;;;;; +13D9B;EGYPTIAN HIEROGLYPH-13D9B;Lo;0;L;;;;;N;;;;; +13D9C;EGYPTIAN HIEROGLYPH-13D9C;Lo;0;L;;;;;N;;;;; +13D9D;EGYPTIAN HIEROGLYPH-13D9D;Lo;0;L;;;;;N;;;;; +13D9E;EGYPTIAN HIEROGLYPH-13D9E;Lo;0;L;;;;;N;;;;; +13D9F;EGYPTIAN HIEROGLYPH-13D9F;Lo;0;L;;;;;N;;;;; +13DA0;EGYPTIAN HIEROGLYPH-13DA0;Lo;0;L;;;;;N;;;;; +13DA1;EGYPTIAN HIEROGLYPH-13DA1;Lo;0;L;;;;;N;;;;; +13DA2;EGYPTIAN HIEROGLYPH-13DA2;Lo;0;L;;;;;N;;;;; +13DA3;EGYPTIAN HIEROGLYPH-13DA3;Lo;0;L;;;;;N;;;;; +13DA4;EGYPTIAN HIEROGLYPH-13DA4;Lo;0;L;;;;;N;;;;; +13DA5;EGYPTIAN HIEROGLYPH-13DA5;Lo;0;L;;;;;N;;;;; +13DA6;EGYPTIAN HIEROGLYPH-13DA6;Lo;0;L;;;;;N;;;;; +13DA7;EGYPTIAN HIEROGLYPH-13DA7;Lo;0;L;;;;;N;;;;; +13DA8;EGYPTIAN HIEROGLYPH-13DA8;Lo;0;L;;;;;N;;;;; +13DA9;EGYPTIAN HIEROGLYPH-13DA9;Lo;0;L;;;;;N;;;;; +13DAA;EGYPTIAN HIEROGLYPH-13DAA;Lo;0;L;;;;;N;;;;; +13DAB;EGYPTIAN HIEROGLYPH-13DAB;Lo;0;L;;;;;N;;;;; +13DAC;EGYPTIAN HIEROGLYPH-13DAC;Lo;0;L;;;;;N;;;;; +13DAD;EGYPTIAN HIEROGLYPH-13DAD;Lo;0;L;;;;;N;;;;; +13DAE;EGYPTIAN HIEROGLYPH-13DAE;Lo;0;L;;;;;N;;;;; +13DAF;EGYPTIAN HIEROGLYPH-13DAF;Lo;0;L;;;;;N;;;;; +13DB0;EGYPTIAN HIEROGLYPH-13DB0;Lo;0;L;;;;;N;;;;; +13DB1;EGYPTIAN HIEROGLYPH-13DB1;Lo;0;L;;;;;N;;;;; +13DB2;EGYPTIAN HIEROGLYPH-13DB2;Lo;0;L;;;;;N;;;;; +13DB3;EGYPTIAN HIEROGLYPH-13DB3;Lo;0;L;;;;;N;;;;; +13DB4;EGYPTIAN HIEROGLYPH-13DB4;Lo;0;L;;;;;N;;;;; +13DB5;EGYPTIAN HIEROGLYPH-13DB5;Lo;0;L;;;;;N;;;;; +13DB6;EGYPTIAN HIEROGLYPH-13DB6;Lo;0;L;;;;;N;;;;; +13DB7;EGYPTIAN HIEROGLYPH-13DB7;Lo;0;L;;;;;N;;;;; +13DB8;EGYPTIAN HIEROGLYPH-13DB8;Lo;0;L;;;;;N;;;;; +13DB9;EGYPTIAN HIEROGLYPH-13DB9;Lo;0;L;;;;;N;;;;; +13DBA;EGYPTIAN HIEROGLYPH-13DBA;Lo;0;L;;;;;N;;;;; +13DBB;EGYPTIAN HIEROGLYPH-13DBB;Lo;0;L;;;;;N;;;;; +13DBC;EGYPTIAN HIEROGLYPH-13DBC;Lo;0;L;;;;;N;;;;; +13DBD;EGYPTIAN HIEROGLYPH-13DBD;Lo;0;L;;;;;N;;;;; +13DBE;EGYPTIAN HIEROGLYPH-13DBE;Lo;0;L;;;;;N;;;;; +13DBF;EGYPTIAN HIEROGLYPH-13DBF;Lo;0;L;;;;;N;;;;; +13DC0;EGYPTIAN HIEROGLYPH-13DC0;Lo;0;L;;;;;N;;;;; +13DC1;EGYPTIAN HIEROGLYPH-13DC1;Lo;0;L;;;;;N;;;;; +13DC2;EGYPTIAN HIEROGLYPH-13DC2;Lo;0;L;;;;;N;;;;; +13DC3;EGYPTIAN HIEROGLYPH-13DC3;Lo;0;L;;;;;N;;;;; +13DC4;EGYPTIAN HIEROGLYPH-13DC4;Lo;0;L;;;;;N;;;;; +13DC5;EGYPTIAN HIEROGLYPH-13DC5;Lo;0;L;;;;;N;;;;; +13DC6;EGYPTIAN HIEROGLYPH-13DC6;Lo;0;L;;;;;N;;;;; +13DC7;EGYPTIAN HIEROGLYPH-13DC7;Lo;0;L;;;;;N;;;;; +13DC8;EGYPTIAN HIEROGLYPH-13DC8;Lo;0;L;;;;;N;;;;; +13DC9;EGYPTIAN HIEROGLYPH-13DC9;Lo;0;L;;;;;N;;;;; +13DCA;EGYPTIAN HIEROGLYPH-13DCA;Lo;0;L;;;;;N;;;;; +13DCB;EGYPTIAN HIEROGLYPH-13DCB;Lo;0;L;;;;;N;;;;; +13DCC;EGYPTIAN HIEROGLYPH-13DCC;Lo;0;L;;;;;N;;;;; +13DCD;EGYPTIAN HIEROGLYPH-13DCD;Lo;0;L;;;;;N;;;;; +13DCE;EGYPTIAN HIEROGLYPH-13DCE;Lo;0;L;;;;;N;;;;; +13DCF;EGYPTIAN HIEROGLYPH-13DCF;Lo;0;L;;;;;N;;;;; +13DD0;EGYPTIAN HIEROGLYPH-13DD0;Lo;0;L;;;;;N;;;;; +13DD1;EGYPTIAN HIEROGLYPH-13DD1;Lo;0;L;;;;;N;;;;; +13DD2;EGYPTIAN HIEROGLYPH-13DD2;Lo;0;L;;;;;N;;;;; +13DD3;EGYPTIAN HIEROGLYPH-13DD3;Lo;0;L;;;;;N;;;;; +13DD4;EGYPTIAN HIEROGLYPH-13DD4;Lo;0;L;;;;;N;;;;; +13DD5;EGYPTIAN HIEROGLYPH-13DD5;Lo;0;L;;;;;N;;;;; +13DD6;EGYPTIAN HIEROGLYPH-13DD6;Lo;0;L;;;;;N;;;;; +13DD7;EGYPTIAN HIEROGLYPH-13DD7;Lo;0;L;;;;;N;;;;; +13DD8;EGYPTIAN HIEROGLYPH-13DD8;Lo;0;L;;;;;N;;;;; +13DD9;EGYPTIAN HIEROGLYPH-13DD9;Lo;0;L;;;;;N;;;;; +13DDA;EGYPTIAN HIEROGLYPH-13DDA;Lo;0;L;;;;;N;;;;; +13DDB;EGYPTIAN HIEROGLYPH-13DDB;Lo;0;L;;;;;N;;;;; +13DDC;EGYPTIAN HIEROGLYPH-13DDC;Lo;0;L;;;;;N;;;;; +13DDD;EGYPTIAN HIEROGLYPH-13DDD;Lo;0;L;;;;;N;;;;; +13DDE;EGYPTIAN HIEROGLYPH-13DDE;Lo;0;L;;;;;N;;;;; +13DDF;EGYPTIAN HIEROGLYPH-13DDF;Lo;0;L;;;;;N;;;;; +13DE0;EGYPTIAN HIEROGLYPH-13DE0;Lo;0;L;;;;;N;;;;; +13DE1;EGYPTIAN HIEROGLYPH-13DE1;Lo;0;L;;;;;N;;;;; +13DE2;EGYPTIAN HIEROGLYPH-13DE2;Lo;0;L;;;;;N;;;;; +13DE3;EGYPTIAN HIEROGLYPH-13DE3;Lo;0;L;;;;;N;;;;; +13DE4;EGYPTIAN HIEROGLYPH-13DE4;Lo;0;L;;;;;N;;;;; +13DE5;EGYPTIAN HIEROGLYPH-13DE5;Lo;0;L;;;;;N;;;;; +13DE6;EGYPTIAN HIEROGLYPH-13DE6;Lo;0;L;;;;;N;;;;; +13DE7;EGYPTIAN HIEROGLYPH-13DE7;Lo;0;L;;;;;N;;;;; +13DE8;EGYPTIAN HIEROGLYPH-13DE8;Lo;0;L;;;;;N;;;;; +13DE9;EGYPTIAN HIEROGLYPH-13DE9;Lo;0;L;;;;;N;;;;; +13DEA;EGYPTIAN HIEROGLYPH-13DEA;Lo;0;L;;;;;N;;;;; +13DEB;EGYPTIAN HIEROGLYPH-13DEB;Lo;0;L;;;;;N;;;;; +13DEC;EGYPTIAN HIEROGLYPH-13DEC;Lo;0;L;;;;;N;;;;; +13DED;EGYPTIAN HIEROGLYPH-13DED;Lo;0;L;;;;;N;;;;; +13DEE;EGYPTIAN HIEROGLYPH-13DEE;Lo;0;L;;;;;N;;;;; +13DEF;EGYPTIAN HIEROGLYPH-13DEF;Lo;0;L;;;;;N;;;;; +13DF0;EGYPTIAN HIEROGLYPH-13DF0;Lo;0;L;;;;;N;;;;; +13DF1;EGYPTIAN HIEROGLYPH-13DF1;Lo;0;L;;;;;N;;;;; +13DF2;EGYPTIAN HIEROGLYPH-13DF2;Lo;0;L;;;;;N;;;;; +13DF3;EGYPTIAN HIEROGLYPH-13DF3;Lo;0;L;;;;;N;;;;; +13DF4;EGYPTIAN HIEROGLYPH-13DF4;Lo;0;L;;;;;N;;;;; +13DF5;EGYPTIAN HIEROGLYPH-13DF5;Lo;0;L;;;;;N;;;;; +13DF6;EGYPTIAN HIEROGLYPH-13DF6;Lo;0;L;;;;;N;;;;; +13DF7;EGYPTIAN HIEROGLYPH-13DF7;Lo;0;L;;;;;N;;;;; +13DF8;EGYPTIAN HIEROGLYPH-13DF8;Lo;0;L;;;;;N;;;;; +13DF9;EGYPTIAN HIEROGLYPH-13DF9;Lo;0;L;;;;;N;;;;; +13DFA;EGYPTIAN HIEROGLYPH-13DFA;Lo;0;L;;;;;N;;;;; +13DFB;EGYPTIAN HIEROGLYPH-13DFB;Lo;0;L;;;;;N;;;;; +13DFC;EGYPTIAN HIEROGLYPH-13DFC;Lo;0;L;;;;;N;;;;; +13DFD;EGYPTIAN HIEROGLYPH-13DFD;Lo;0;L;;;;;N;;;;; +13DFE;EGYPTIAN HIEROGLYPH-13DFE;Lo;0;L;;;;;N;;;;; +13DFF;EGYPTIAN HIEROGLYPH-13DFF;Lo;0;L;;;;;N;;;;; +13E00;EGYPTIAN HIEROGLYPH-13E00;Lo;0;L;;;;;N;;;;; +13E01;EGYPTIAN HIEROGLYPH-13E01;Lo;0;L;;;;;N;;;;; +13E02;EGYPTIAN HIEROGLYPH-13E02;Lo;0;L;;;;;N;;;;; +13E03;EGYPTIAN HIEROGLYPH-13E03;Lo;0;L;;;;;N;;;;; +13E04;EGYPTIAN HIEROGLYPH-13E04;Lo;0;L;;;;;N;;;;; +13E05;EGYPTIAN HIEROGLYPH-13E05;Lo;0;L;;;;;N;;;;; +13E06;EGYPTIAN HIEROGLYPH-13E06;Lo;0;L;;;;;N;;;;; +13E07;EGYPTIAN HIEROGLYPH-13E07;Lo;0;L;;;;;N;;;;; +13E08;EGYPTIAN HIEROGLYPH-13E08;Lo;0;L;;;;;N;;;;; +13E09;EGYPTIAN HIEROGLYPH-13E09;Lo;0;L;;;;;N;;;;; +13E0A;EGYPTIAN HIEROGLYPH-13E0A;Lo;0;L;;;;;N;;;;; +13E0B;EGYPTIAN HIEROGLYPH-13E0B;Lo;0;L;;;;;N;;;;; +13E0C;EGYPTIAN HIEROGLYPH-13E0C;Lo;0;L;;;;;N;;;;; +13E0D;EGYPTIAN HIEROGLYPH-13E0D;Lo;0;L;;;;;N;;;;; +13E0E;EGYPTIAN HIEROGLYPH-13E0E;Lo;0;L;;;;;N;;;;; +13E0F;EGYPTIAN HIEROGLYPH-13E0F;Lo;0;L;;;;;N;;;;; +13E10;EGYPTIAN HIEROGLYPH-13E10;Lo;0;L;;;;;N;;;;; +13E11;EGYPTIAN HIEROGLYPH-13E11;Lo;0;L;;;;;N;;;;; +13E12;EGYPTIAN HIEROGLYPH-13E12;Lo;0;L;;;;;N;;;;; +13E13;EGYPTIAN HIEROGLYPH-13E13;Lo;0;L;;;;;N;;;;; +13E14;EGYPTIAN HIEROGLYPH-13E14;Lo;0;L;;;;;N;;;;; +13E15;EGYPTIAN HIEROGLYPH-13E15;Lo;0;L;;;;;N;;;;; +13E16;EGYPTIAN HIEROGLYPH-13E16;Lo;0;L;;;;;N;;;;; +13E17;EGYPTIAN HIEROGLYPH-13E17;Lo;0;L;;;;;N;;;;; +13E18;EGYPTIAN HIEROGLYPH-13E18;Lo;0;L;;;;;N;;;;; +13E19;EGYPTIAN HIEROGLYPH-13E19;Lo;0;L;;;;;N;;;;; +13E1A;EGYPTIAN HIEROGLYPH-13E1A;Lo;0;L;;;;;N;;;;; +13E1B;EGYPTIAN HIEROGLYPH-13E1B;Lo;0;L;;;;;N;;;;; +13E1C;EGYPTIAN HIEROGLYPH-13E1C;Lo;0;L;;;;;N;;;;; +13E1D;EGYPTIAN HIEROGLYPH-13E1D;Lo;0;L;;;;;N;;;;; +13E1E;EGYPTIAN HIEROGLYPH-13E1E;Lo;0;L;;;;;N;;;;; +13E1F;EGYPTIAN HIEROGLYPH-13E1F;Lo;0;L;;;;;N;;;;; +13E20;EGYPTIAN HIEROGLYPH-13E20;Lo;0;L;;;;;N;;;;; +13E21;EGYPTIAN HIEROGLYPH-13E21;Lo;0;L;;;;;N;;;;; +13E22;EGYPTIAN HIEROGLYPH-13E22;Lo;0;L;;;;;N;;;;; +13E23;EGYPTIAN HIEROGLYPH-13E23;Lo;0;L;;;;;N;;;;; +13E24;EGYPTIAN HIEROGLYPH-13E24;Lo;0;L;;;;;N;;;;; +13E25;EGYPTIAN HIEROGLYPH-13E25;Lo;0;L;;;;;N;;;;; +13E26;EGYPTIAN HIEROGLYPH-13E26;Lo;0;L;;;;;N;;;;; +13E27;EGYPTIAN HIEROGLYPH-13E27;Lo;0;L;;;;;N;;;;; +13E28;EGYPTIAN HIEROGLYPH-13E28;Lo;0;L;;;;;N;;;;; +13E29;EGYPTIAN HIEROGLYPH-13E29;Lo;0;L;;;;;N;;;;; +13E2A;EGYPTIAN HIEROGLYPH-13E2A;Lo;0;L;;;;;N;;;;; +13E2B;EGYPTIAN HIEROGLYPH-13E2B;Lo;0;L;;;;;N;;;;; +13E2C;EGYPTIAN HIEROGLYPH-13E2C;Lo;0;L;;;;;N;;;;; +13E2D;EGYPTIAN HIEROGLYPH-13E2D;Lo;0;L;;;;;N;;;;; +13E2E;EGYPTIAN HIEROGLYPH-13E2E;Lo;0;L;;;;;N;;;;; +13E2F;EGYPTIAN HIEROGLYPH-13E2F;Lo;0;L;;;;;N;;;;; +13E30;EGYPTIAN HIEROGLYPH-13E30;Lo;0;L;;;;;N;;;;; +13E31;EGYPTIAN HIEROGLYPH-13E31;Lo;0;L;;;;;N;;;;; +13E32;EGYPTIAN HIEROGLYPH-13E32;Lo;0;L;;;;;N;;;;; +13E33;EGYPTIAN HIEROGLYPH-13E33;Lo;0;L;;;;;N;;;;; +13E34;EGYPTIAN HIEROGLYPH-13E34;Lo;0;L;;;;;N;;;;; +13E35;EGYPTIAN HIEROGLYPH-13E35;Lo;0;L;;;;;N;;;;; +13E36;EGYPTIAN HIEROGLYPH-13E36;Lo;0;L;;;;;N;;;;; +13E37;EGYPTIAN HIEROGLYPH-13E37;Lo;0;L;;;;;N;;;;; +13E38;EGYPTIAN HIEROGLYPH-13E38;Lo;0;L;;;;;N;;;;; +13E39;EGYPTIAN HIEROGLYPH-13E39;Lo;0;L;;;;;N;;;;; +13E3A;EGYPTIAN HIEROGLYPH-13E3A;Lo;0;L;;;;;N;;;;; +13E3B;EGYPTIAN HIEROGLYPH-13E3B;Lo;0;L;;;;;N;;;;; +13E3C;EGYPTIAN HIEROGLYPH-13E3C;Lo;0;L;;;;;N;;;;; +13E3D;EGYPTIAN HIEROGLYPH-13E3D;Lo;0;L;;;;;N;;;;; +13E3E;EGYPTIAN HIEROGLYPH-13E3E;Lo;0;L;;;;;N;;;;; +13E3F;EGYPTIAN HIEROGLYPH-13E3F;Lo;0;L;;;;;N;;;;; +13E40;EGYPTIAN HIEROGLYPH-13E40;Lo;0;L;;;;;N;;;;; +13E41;EGYPTIAN HIEROGLYPH-13E41;Lo;0;L;;;;;N;;;;; +13E42;EGYPTIAN HIEROGLYPH-13E42;Lo;0;L;;;;;N;;;;; +13E43;EGYPTIAN HIEROGLYPH-13E43;Lo;0;L;;;;;N;;;;; +13E44;EGYPTIAN HIEROGLYPH-13E44;Lo;0;L;;;;;N;;;;; +13E45;EGYPTIAN HIEROGLYPH-13E45;Lo;0;L;;;;;N;;;;; +13E46;EGYPTIAN HIEROGLYPH-13E46;Lo;0;L;;;;;N;;;;; +13E47;EGYPTIAN HIEROGLYPH-13E47;Lo;0;L;;;;;N;;;;; +13E48;EGYPTIAN HIEROGLYPH-13E48;Lo;0;L;;;;;N;;;;; +13E49;EGYPTIAN HIEROGLYPH-13E49;Lo;0;L;;;;;N;;;;; +13E4A;EGYPTIAN HIEROGLYPH-13E4A;Lo;0;L;;;;;N;;;;; +13E4B;EGYPTIAN HIEROGLYPH-13E4B;Lo;0;L;;;;;N;;;;; +13E4C;EGYPTIAN HIEROGLYPH-13E4C;Lo;0;L;;;;;N;;;;; +13E4D;EGYPTIAN HIEROGLYPH-13E4D;Lo;0;L;;;;;N;;;;; +13E4E;EGYPTIAN HIEROGLYPH-13E4E;Lo;0;L;;;;;N;;;;; +13E4F;EGYPTIAN HIEROGLYPH-13E4F;Lo;0;L;;;;;N;;;;; +13E50;EGYPTIAN HIEROGLYPH-13E50;Lo;0;L;;;;;N;;;;; +13E51;EGYPTIAN HIEROGLYPH-13E51;Lo;0;L;;;;;N;;;;; +13E52;EGYPTIAN HIEROGLYPH-13E52;Lo;0;L;;;;;N;;;;; +13E53;EGYPTIAN HIEROGLYPH-13E53;Lo;0;L;;;;;N;;;;; +13E54;EGYPTIAN HIEROGLYPH-13E54;Lo;0;L;;;;;N;;;;; +13E55;EGYPTIAN HIEROGLYPH-13E55;Lo;0;L;;;;;N;;;;; +13E56;EGYPTIAN HIEROGLYPH-13E56;Lo;0;L;;;;;N;;;;; +13E57;EGYPTIAN HIEROGLYPH-13E57;Lo;0;L;;;;;N;;;;; +13E58;EGYPTIAN HIEROGLYPH-13E58;Lo;0;L;;;;;N;;;;; +13E59;EGYPTIAN HIEROGLYPH-13E59;Lo;0;L;;;;;N;;;;; +13E5A;EGYPTIAN HIEROGLYPH-13E5A;Lo;0;L;;;;;N;;;;; +13E5B;EGYPTIAN HIEROGLYPH-13E5B;Lo;0;L;;;;;N;;;;; +13E5C;EGYPTIAN HIEROGLYPH-13E5C;Lo;0;L;;;;;N;;;;; +13E5D;EGYPTIAN HIEROGLYPH-13E5D;Lo;0;L;;;;;N;;;;; +13E5E;EGYPTIAN HIEROGLYPH-13E5E;Lo;0;L;;;;;N;;;;; +13E5F;EGYPTIAN HIEROGLYPH-13E5F;Lo;0;L;;;;;N;;;;; +13E60;EGYPTIAN HIEROGLYPH-13E60;Lo;0;L;;;;;N;;;;; +13E61;EGYPTIAN HIEROGLYPH-13E61;Lo;0;L;;;;;N;;;;; +13E62;EGYPTIAN HIEROGLYPH-13E62;Lo;0;L;;;;;N;;;;; +13E63;EGYPTIAN HIEROGLYPH-13E63;Lo;0;L;;;;;N;;;;; +13E64;EGYPTIAN HIEROGLYPH-13E64;Lo;0;L;;;;;N;;;;; +13E65;EGYPTIAN HIEROGLYPH-13E65;Lo;0;L;;;;;N;;;;; +13E66;EGYPTIAN HIEROGLYPH-13E66;Lo;0;L;;;;;N;;;;; +13E67;EGYPTIAN HIEROGLYPH-13E67;Lo;0;L;;;;;N;;;;; +13E68;EGYPTIAN HIEROGLYPH-13E68;Lo;0;L;;;;;N;;;;; +13E69;EGYPTIAN HIEROGLYPH-13E69;Lo;0;L;;;;;N;;;;; +13E6A;EGYPTIAN HIEROGLYPH-13E6A;Lo;0;L;;;;;N;;;;; +13E6B;EGYPTIAN HIEROGLYPH-13E6B;Lo;0;L;;;;;N;;;;; +13E6C;EGYPTIAN HIEROGLYPH-13E6C;Lo;0;L;;;;;N;;;;; +13E6D;EGYPTIAN HIEROGLYPH-13E6D;Lo;0;L;;;;;N;;;;; +13E6E;EGYPTIAN HIEROGLYPH-13E6E;Lo;0;L;;;;;N;;;;; +13E6F;EGYPTIAN HIEROGLYPH-13E6F;Lo;0;L;;;;;N;;;;; +13E70;EGYPTIAN HIEROGLYPH-13E70;Lo;0;L;;;;;N;;;;; +13E71;EGYPTIAN HIEROGLYPH-13E71;Lo;0;L;;;;;N;;;;; +13E72;EGYPTIAN HIEROGLYPH-13E72;Lo;0;L;;;;;N;;;;; +13E73;EGYPTIAN HIEROGLYPH-13E73;Lo;0;L;;;;;N;;;;; +13E74;EGYPTIAN HIEROGLYPH-13E74;Lo;0;L;;;;;N;;;;; +13E75;EGYPTIAN HIEROGLYPH-13E75;Lo;0;L;;;;;N;;;;; +13E76;EGYPTIAN HIEROGLYPH-13E76;Lo;0;L;;;;;N;;;;; +13E77;EGYPTIAN HIEROGLYPH-13E77;Lo;0;L;;;;;N;;;;; +13E78;EGYPTIAN HIEROGLYPH-13E78;Lo;0;L;;;;;N;;;;; +13E79;EGYPTIAN HIEROGLYPH-13E79;Lo;0;L;;;;;N;;;;; +13E7A;EGYPTIAN HIEROGLYPH-13E7A;Lo;0;L;;;;;N;;;;; +13E7B;EGYPTIAN HIEROGLYPH-13E7B;Lo;0;L;;;;;N;;;;; +13E7C;EGYPTIAN HIEROGLYPH-13E7C;Lo;0;L;;;;;N;;;;; +13E7D;EGYPTIAN HIEROGLYPH-13E7D;Lo;0;L;;;;;N;;;;; +13E7E;EGYPTIAN HIEROGLYPH-13E7E;Lo;0;L;;;;;N;;;;; +13E7F;EGYPTIAN HIEROGLYPH-13E7F;Lo;0;L;;;;;N;;;;; +13E80;EGYPTIAN HIEROGLYPH-13E80;Lo;0;L;;;;;N;;;;; +13E81;EGYPTIAN HIEROGLYPH-13E81;Lo;0;L;;;;;N;;;;; +13E82;EGYPTIAN HIEROGLYPH-13E82;Lo;0;L;;;;;N;;;;; +13E83;EGYPTIAN HIEROGLYPH-13E83;Lo;0;L;;;;;N;;;;; +13E84;EGYPTIAN HIEROGLYPH-13E84;Lo;0;L;;;;;N;;;;; +13E85;EGYPTIAN HIEROGLYPH-13E85;Lo;0;L;;;;;N;;;;; +13E86;EGYPTIAN HIEROGLYPH-13E86;Lo;0;L;;;;;N;;;;; +13E87;EGYPTIAN HIEROGLYPH-13E87;Lo;0;L;;;;;N;;;;; +13E88;EGYPTIAN HIEROGLYPH-13E88;Lo;0;L;;;;;N;;;;; +13E89;EGYPTIAN HIEROGLYPH-13E89;Lo;0;L;;;;;N;;;;; +13E8A;EGYPTIAN HIEROGLYPH-13E8A;Lo;0;L;;;;;N;;;;; +13E8B;EGYPTIAN HIEROGLYPH-13E8B;Lo;0;L;;;;;N;;;;; +13E8C;EGYPTIAN HIEROGLYPH-13E8C;Lo;0;L;;;;;N;;;;; +13E8D;EGYPTIAN HIEROGLYPH-13E8D;Lo;0;L;;;;;N;;;;; +13E8E;EGYPTIAN HIEROGLYPH-13E8E;Lo;0;L;;;;;N;;;;; +13E8F;EGYPTIAN HIEROGLYPH-13E8F;Lo;0;L;;;;;N;;;;; +13E90;EGYPTIAN HIEROGLYPH-13E90;Lo;0;L;;;;;N;;;;; +13E91;EGYPTIAN HIEROGLYPH-13E91;Lo;0;L;;;;;N;;;;; +13E92;EGYPTIAN HIEROGLYPH-13E92;Lo;0;L;;;;;N;;;;; +13E93;EGYPTIAN HIEROGLYPH-13E93;Lo;0;L;;;;;N;;;;; +13E94;EGYPTIAN HIEROGLYPH-13E94;Lo;0;L;;;;;N;;;;; +13E95;EGYPTIAN HIEROGLYPH-13E95;Lo;0;L;;;;;N;;;;; +13E96;EGYPTIAN HIEROGLYPH-13E96;Lo;0;L;;;;;N;;;;; +13E97;EGYPTIAN HIEROGLYPH-13E97;Lo;0;L;;;;;N;;;;; +13E98;EGYPTIAN HIEROGLYPH-13E98;Lo;0;L;;;;;N;;;;; +13E99;EGYPTIAN HIEROGLYPH-13E99;Lo;0;L;;;;;N;;;;; +13E9A;EGYPTIAN HIEROGLYPH-13E9A;Lo;0;L;;;;;N;;;;; +13E9B;EGYPTIAN HIEROGLYPH-13E9B;Lo;0;L;;;;;N;;;;; +13E9C;EGYPTIAN HIEROGLYPH-13E9C;Lo;0;L;;;;;N;;;;; +13E9D;EGYPTIAN HIEROGLYPH-13E9D;Lo;0;L;;;;;N;;;;; +13E9E;EGYPTIAN HIEROGLYPH-13E9E;Lo;0;L;;;;;N;;;;; +13E9F;EGYPTIAN HIEROGLYPH-13E9F;Lo;0;L;;;;;N;;;;; +13EA0;EGYPTIAN HIEROGLYPH-13EA0;Lo;0;L;;;;;N;;;;; +13EA1;EGYPTIAN HIEROGLYPH-13EA1;Lo;0;L;;;;;N;;;;; +13EA2;EGYPTIAN HIEROGLYPH-13EA2;Lo;0;L;;;;;N;;;;; +13EA3;EGYPTIAN HIEROGLYPH-13EA3;Lo;0;L;;;;;N;;;;; +13EA4;EGYPTIAN HIEROGLYPH-13EA4;Lo;0;L;;;;;N;;;;; +13EA5;EGYPTIAN HIEROGLYPH-13EA5;Lo;0;L;;;;;N;;;;; +13EA6;EGYPTIAN HIEROGLYPH-13EA6;Lo;0;L;;;;;N;;;;; +13EA7;EGYPTIAN HIEROGLYPH-13EA7;Lo;0;L;;;;;N;;;;; +13EA8;EGYPTIAN HIEROGLYPH-13EA8;Lo;0;L;;;;;N;;;;; +13EA9;EGYPTIAN HIEROGLYPH-13EA9;Lo;0;L;;;;;N;;;;; +13EAA;EGYPTIAN HIEROGLYPH-13EAA;Lo;0;L;;;;;N;;;;; +13EAB;EGYPTIAN HIEROGLYPH-13EAB;Lo;0;L;;;;;N;;;;; +13EAC;EGYPTIAN HIEROGLYPH-13EAC;Lo;0;L;;;;;N;;;;; +13EAD;EGYPTIAN HIEROGLYPH-13EAD;Lo;0;L;;;;;N;;;;; +13EAE;EGYPTIAN HIEROGLYPH-13EAE;Lo;0;L;;;;;N;;;;; +13EAF;EGYPTIAN HIEROGLYPH-13EAF;Lo;0;L;;;;;N;;;;; +13EB0;EGYPTIAN HIEROGLYPH-13EB0;Lo;0;L;;;;;N;;;;; +13EB1;EGYPTIAN HIEROGLYPH-13EB1;Lo;0;L;;;;;N;;;;; +13EB2;EGYPTIAN HIEROGLYPH-13EB2;Lo;0;L;;;;;N;;;;; +13EB3;EGYPTIAN HIEROGLYPH-13EB3;Lo;0;L;;;;;N;;;;; +13EB4;EGYPTIAN HIEROGLYPH-13EB4;Lo;0;L;;;;;N;;;;; +13EB5;EGYPTIAN HIEROGLYPH-13EB5;Lo;0;L;;;;;N;;;;; +13EB6;EGYPTIAN HIEROGLYPH-13EB6;Lo;0;L;;;;;N;;;;; +13EB7;EGYPTIAN HIEROGLYPH-13EB7;Lo;0;L;;;;;N;;;;; +13EB8;EGYPTIAN HIEROGLYPH-13EB8;Lo;0;L;;;;;N;;;;; +13EB9;EGYPTIAN HIEROGLYPH-13EB9;Lo;0;L;;;;;N;;;;; +13EBA;EGYPTIAN HIEROGLYPH-13EBA;Lo;0;L;;;;;N;;;;; +13EBB;EGYPTIAN HIEROGLYPH-13EBB;Lo;0;L;;;;;N;;;;; +13EBC;EGYPTIAN HIEROGLYPH-13EBC;Lo;0;L;;;;;N;;;;; +13EBD;EGYPTIAN HIEROGLYPH-13EBD;Lo;0;L;;;;;N;;;;; +13EBE;EGYPTIAN HIEROGLYPH-13EBE;Lo;0;L;;;;;N;;;;; +13EBF;EGYPTIAN HIEROGLYPH-13EBF;Lo;0;L;;;;;N;;;;; +13EC0;EGYPTIAN HIEROGLYPH-13EC0;Lo;0;L;;;;;N;;;;; +13EC1;EGYPTIAN HIEROGLYPH-13EC1;Lo;0;L;;;;;N;;;;; +13EC2;EGYPTIAN HIEROGLYPH-13EC2;Lo;0;L;;;;;N;;;;; +13EC3;EGYPTIAN HIEROGLYPH-13EC3;Lo;0;L;;;;;N;;;;; +13EC4;EGYPTIAN HIEROGLYPH-13EC4;Lo;0;L;;;;;N;;;;; +13EC5;EGYPTIAN HIEROGLYPH-13EC5;Lo;0;L;;;;;N;;;;; +13EC6;EGYPTIAN HIEROGLYPH-13EC6;Lo;0;L;;;;;N;;;;; +13EC7;EGYPTIAN HIEROGLYPH-13EC7;Lo;0;L;;;;;N;;;;; +13EC8;EGYPTIAN HIEROGLYPH-13EC8;Lo;0;L;;;;;N;;;;; +13EC9;EGYPTIAN HIEROGLYPH-13EC9;Lo;0;L;;;;;N;;;;; +13ECA;EGYPTIAN HIEROGLYPH-13ECA;Lo;0;L;;;;;N;;;;; +13ECB;EGYPTIAN HIEROGLYPH-13ECB;Lo;0;L;;;;;N;;;;; +13ECC;EGYPTIAN HIEROGLYPH-13ECC;Lo;0;L;;;;;N;;;;; +13ECD;EGYPTIAN HIEROGLYPH-13ECD;Lo;0;L;;;;;N;;;;; +13ECE;EGYPTIAN HIEROGLYPH-13ECE;Lo;0;L;;;;;N;;;;; +13ECF;EGYPTIAN HIEROGLYPH-13ECF;Lo;0;L;;;;;N;;;;; +13ED0;EGYPTIAN HIEROGLYPH-13ED0;Lo;0;L;;;;;N;;;;; +13ED1;EGYPTIAN HIEROGLYPH-13ED1;Lo;0;L;;;;;N;;;;; +13ED2;EGYPTIAN HIEROGLYPH-13ED2;Lo;0;L;;;;;N;;;;; +13ED3;EGYPTIAN HIEROGLYPH-13ED3;Lo;0;L;;;;;N;;;;; +13ED4;EGYPTIAN HIEROGLYPH-13ED4;Lo;0;L;;;;;N;;;;; +13ED5;EGYPTIAN HIEROGLYPH-13ED5;Lo;0;L;;;;;N;;;;; +13ED6;EGYPTIAN HIEROGLYPH-13ED6;Lo;0;L;;;;;N;;;;; +13ED7;EGYPTIAN HIEROGLYPH-13ED7;Lo;0;L;;;;;N;;;;; +13ED8;EGYPTIAN HIEROGLYPH-13ED8;Lo;0;L;;;;;N;;;;; +13ED9;EGYPTIAN HIEROGLYPH-13ED9;Lo;0;L;;;;;N;;;;; +13EDA;EGYPTIAN HIEROGLYPH-13EDA;Lo;0;L;;;;;N;;;;; +13EDB;EGYPTIAN HIEROGLYPH-13EDB;Lo;0;L;;;;;N;;;;; +13EDC;EGYPTIAN HIEROGLYPH-13EDC;Lo;0;L;;;;;N;;;;; +13EDD;EGYPTIAN HIEROGLYPH-13EDD;Lo;0;L;;;;;N;;;;; +13EDE;EGYPTIAN HIEROGLYPH-13EDE;Lo;0;L;;;;;N;;;;; +13EDF;EGYPTIAN HIEROGLYPH-13EDF;Lo;0;L;;;;;N;;;;; +13EE0;EGYPTIAN HIEROGLYPH-13EE0;Lo;0;L;;;;;N;;;;; +13EE1;EGYPTIAN HIEROGLYPH-13EE1;Lo;0;L;;;;;N;;;;; +13EE2;EGYPTIAN HIEROGLYPH-13EE2;Lo;0;L;;;;;N;;;;; +13EE3;EGYPTIAN HIEROGLYPH-13EE3;Lo;0;L;;;;;N;;;;; +13EE4;EGYPTIAN HIEROGLYPH-13EE4;Lo;0;L;;;;;N;;;;; +13EE5;EGYPTIAN HIEROGLYPH-13EE5;Lo;0;L;;;;;N;;;;; +13EE6;EGYPTIAN HIEROGLYPH-13EE6;Lo;0;L;;;;;N;;;;; +13EE7;EGYPTIAN HIEROGLYPH-13EE7;Lo;0;L;;;;;N;;;;; +13EE8;EGYPTIAN HIEROGLYPH-13EE8;Lo;0;L;;;;;N;;;;; +13EE9;EGYPTIAN HIEROGLYPH-13EE9;Lo;0;L;;;;;N;;;;; +13EEA;EGYPTIAN HIEROGLYPH-13EEA;Lo;0;L;;;;;N;;;;; +13EEB;EGYPTIAN HIEROGLYPH-13EEB;Lo;0;L;;;;;N;;;;; +13EEC;EGYPTIAN HIEROGLYPH-13EEC;Lo;0;L;;;;;N;;;;; +13EED;EGYPTIAN HIEROGLYPH-13EED;Lo;0;L;;;;;N;;;;; +13EEE;EGYPTIAN HIEROGLYPH-13EEE;Lo;0;L;;;;;N;;;;; +13EEF;EGYPTIAN HIEROGLYPH-13EEF;Lo;0;L;;;;;N;;;;; +13EF0;EGYPTIAN HIEROGLYPH-13EF0;Lo;0;L;;;;;N;;;;; +13EF1;EGYPTIAN HIEROGLYPH-13EF1;Lo;0;L;;;;;N;;;;; +13EF2;EGYPTIAN HIEROGLYPH-13EF2;Lo;0;L;;;;;N;;;;; +13EF3;EGYPTIAN HIEROGLYPH-13EF3;Lo;0;L;;;;;N;;;;; +13EF4;EGYPTIAN HIEROGLYPH-13EF4;Lo;0;L;;;;;N;;;;; +13EF5;EGYPTIAN HIEROGLYPH-13EF5;Lo;0;L;;;;;N;;;;; +13EF6;EGYPTIAN HIEROGLYPH-13EF6;Lo;0;L;;;;;N;;;;; +13EF7;EGYPTIAN HIEROGLYPH-13EF7;Lo;0;L;;;;;N;;;;; +13EF8;EGYPTIAN HIEROGLYPH-13EF8;Lo;0;L;;;;;N;;;;; +13EF9;EGYPTIAN HIEROGLYPH-13EF9;Lo;0;L;;;;;N;;;;; +13EFA;EGYPTIAN HIEROGLYPH-13EFA;Lo;0;L;;;;;N;;;;; +13EFB;EGYPTIAN HIEROGLYPH-13EFB;Lo;0;L;;;;;N;;;;; +13EFC;EGYPTIAN HIEROGLYPH-13EFC;Lo;0;L;;;;;N;;;;; +13EFD;EGYPTIAN HIEROGLYPH-13EFD;Lo;0;L;;;;;N;;;;; +13EFE;EGYPTIAN HIEROGLYPH-13EFE;Lo;0;L;;;;;N;;;;; +13EFF;EGYPTIAN HIEROGLYPH-13EFF;Lo;0;L;;;;;N;;;;; +13F00;EGYPTIAN HIEROGLYPH-13F00;Lo;0;L;;;;;N;;;;; +13F01;EGYPTIAN HIEROGLYPH-13F01;Lo;0;L;;;;;N;;;;; +13F02;EGYPTIAN HIEROGLYPH-13F02;Lo;0;L;;;;;N;;;;; +13F03;EGYPTIAN HIEROGLYPH-13F03;Lo;0;L;;;;;N;;;;; +13F04;EGYPTIAN HIEROGLYPH-13F04;Lo;0;L;;;;;N;;;;; +13F05;EGYPTIAN HIEROGLYPH-13F05;Lo;0;L;;;;;N;;;;; +13F06;EGYPTIAN HIEROGLYPH-13F06;Lo;0;L;;;;;N;;;;; +13F07;EGYPTIAN HIEROGLYPH-13F07;Lo;0;L;;;;;N;;;;; +13F08;EGYPTIAN HIEROGLYPH-13F08;Lo;0;L;;;;;N;;;;; +13F09;EGYPTIAN HIEROGLYPH-13F09;Lo;0;L;;;;;N;;;;; +13F0A;EGYPTIAN HIEROGLYPH-13F0A;Lo;0;L;;;;;N;;;;; +13F0B;EGYPTIAN HIEROGLYPH-13F0B;Lo;0;L;;;;;N;;;;; +13F0C;EGYPTIAN HIEROGLYPH-13F0C;Lo;0;L;;;;;N;;;;; +13F0D;EGYPTIAN HIEROGLYPH-13F0D;Lo;0;L;;;;;N;;;;; +13F0E;EGYPTIAN HIEROGLYPH-13F0E;Lo;0;L;;;;;N;;;;; +13F0F;EGYPTIAN HIEROGLYPH-13F0F;Lo;0;L;;;;;N;;;;; +13F10;EGYPTIAN HIEROGLYPH-13F10;Lo;0;L;;;;;N;;;;; +13F11;EGYPTIAN HIEROGLYPH-13F11;Lo;0;L;;;;;N;;;;; +13F12;EGYPTIAN HIEROGLYPH-13F12;Lo;0;L;;;;;N;;;;; +13F13;EGYPTIAN HIEROGLYPH-13F13;Lo;0;L;;;;;N;;;;; +13F14;EGYPTIAN HIEROGLYPH-13F14;Lo;0;L;;;;;N;;;;; +13F15;EGYPTIAN HIEROGLYPH-13F15;Lo;0;L;;;;;N;;;;; +13F16;EGYPTIAN HIEROGLYPH-13F16;Lo;0;L;;;;;N;;;;; +13F17;EGYPTIAN HIEROGLYPH-13F17;Lo;0;L;;;;;N;;;;; +13F18;EGYPTIAN HIEROGLYPH-13F18;Lo;0;L;;;;;N;;;;; +13F19;EGYPTIAN HIEROGLYPH-13F19;Lo;0;L;;;;;N;;;;; +13F1A;EGYPTIAN HIEROGLYPH-13F1A;Lo;0;L;;;;;N;;;;; +13F1B;EGYPTIAN HIEROGLYPH-13F1B;Lo;0;L;;;;;N;;;;; +13F1C;EGYPTIAN HIEROGLYPH-13F1C;Lo;0;L;;;;;N;;;;; +13F1D;EGYPTIAN HIEROGLYPH-13F1D;Lo;0;L;;;;;N;;;;; +13F1E;EGYPTIAN HIEROGLYPH-13F1E;Lo;0;L;;;;;N;;;;; +13F1F;EGYPTIAN HIEROGLYPH-13F1F;Lo;0;L;;;;;N;;;;; +13F20;EGYPTIAN HIEROGLYPH-13F20;Lo;0;L;;;;;N;;;;; +13F21;EGYPTIAN HIEROGLYPH-13F21;Lo;0;L;;;;;N;;;;; +13F22;EGYPTIAN HIEROGLYPH-13F22;Lo;0;L;;;;;N;;;;; +13F23;EGYPTIAN HIEROGLYPH-13F23;Lo;0;L;;;;;N;;;;; +13F24;EGYPTIAN HIEROGLYPH-13F24;Lo;0;L;;;;;N;;;;; +13F25;EGYPTIAN HIEROGLYPH-13F25;Lo;0;L;;;;;N;;;;; +13F26;EGYPTIAN HIEROGLYPH-13F26;Lo;0;L;;;;;N;;;;; +13F27;EGYPTIAN HIEROGLYPH-13F27;Lo;0;L;;;;;N;;;;; +13F28;EGYPTIAN HIEROGLYPH-13F28;Lo;0;L;;;;;N;;;;; +13F29;EGYPTIAN HIEROGLYPH-13F29;Lo;0;L;;;;;N;;;;; +13F2A;EGYPTIAN HIEROGLYPH-13F2A;Lo;0;L;;;;;N;;;;; +13F2B;EGYPTIAN HIEROGLYPH-13F2B;Lo;0;L;;;;;N;;;;; +13F2C;EGYPTIAN HIEROGLYPH-13F2C;Lo;0;L;;;;;N;;;;; +13F2D;EGYPTIAN HIEROGLYPH-13F2D;Lo;0;L;;;;;N;;;;; +13F2E;EGYPTIAN HIEROGLYPH-13F2E;Lo;0;L;;;;;N;;;;; +13F2F;EGYPTIAN HIEROGLYPH-13F2F;Lo;0;L;;;;;N;;;;; +13F30;EGYPTIAN HIEROGLYPH-13F30;Lo;0;L;;;;;N;;;;; +13F31;EGYPTIAN HIEROGLYPH-13F31;Lo;0;L;;;;;N;;;;; +13F32;EGYPTIAN HIEROGLYPH-13F32;Lo;0;L;;;;;N;;;;; +13F33;EGYPTIAN HIEROGLYPH-13F33;Lo;0;L;;;;;N;;;;; +13F34;EGYPTIAN HIEROGLYPH-13F34;Lo;0;L;;;;;N;;;;; +13F35;EGYPTIAN HIEROGLYPH-13F35;Lo;0;L;;;;;N;;;;; +13F36;EGYPTIAN HIEROGLYPH-13F36;Lo;0;L;;;;;N;;;;; +13F37;EGYPTIAN HIEROGLYPH-13F37;Lo;0;L;;;;;N;;;;; +13F38;EGYPTIAN HIEROGLYPH-13F38;Lo;0;L;;;;;N;;;;; +13F39;EGYPTIAN HIEROGLYPH-13F39;Lo;0;L;;;;;N;;;;; +13F3A;EGYPTIAN HIEROGLYPH-13F3A;Lo;0;L;;;;;N;;;;; +13F3B;EGYPTIAN HIEROGLYPH-13F3B;Lo;0;L;;;;;N;;;;; +13F3C;EGYPTIAN HIEROGLYPH-13F3C;Lo;0;L;;;;;N;;;;; +13F3D;EGYPTIAN HIEROGLYPH-13F3D;Lo;0;L;;;;;N;;;;; +13F3E;EGYPTIAN HIEROGLYPH-13F3E;Lo;0;L;;;;;N;;;;; +13F3F;EGYPTIAN HIEROGLYPH-13F3F;Lo;0;L;;;;;N;;;;; +13F40;EGYPTIAN HIEROGLYPH-13F40;Lo;0;L;;;;;N;;;;; +13F41;EGYPTIAN HIEROGLYPH-13F41;Lo;0;L;;;;;N;;;;; +13F42;EGYPTIAN HIEROGLYPH-13F42;Lo;0;L;;;;;N;;;;; +13F43;EGYPTIAN HIEROGLYPH-13F43;Lo;0;L;;;;;N;;;;; +13F44;EGYPTIAN HIEROGLYPH-13F44;Lo;0;L;;;;;N;;;;; +13F45;EGYPTIAN HIEROGLYPH-13F45;Lo;0;L;;;;;N;;;;; +13F46;EGYPTIAN HIEROGLYPH-13F46;Lo;0;L;;;;;N;;;;; +13F47;EGYPTIAN HIEROGLYPH-13F47;Lo;0;L;;;;;N;;;;; +13F48;EGYPTIAN HIEROGLYPH-13F48;Lo;0;L;;;;;N;;;;; +13F49;EGYPTIAN HIEROGLYPH-13F49;Lo;0;L;;;;;N;;;;; +13F4A;EGYPTIAN HIEROGLYPH-13F4A;Lo;0;L;;;;;N;;;;; +13F4B;EGYPTIAN HIEROGLYPH-13F4B;Lo;0;L;;;;;N;;;;; +13F4C;EGYPTIAN HIEROGLYPH-13F4C;Lo;0;L;;;;;N;;;;; +13F4D;EGYPTIAN HIEROGLYPH-13F4D;Lo;0;L;;;;;N;;;;; +13F4E;EGYPTIAN HIEROGLYPH-13F4E;Lo;0;L;;;;;N;;;;; +13F4F;EGYPTIAN HIEROGLYPH-13F4F;Lo;0;L;;;;;N;;;;; +13F50;EGYPTIAN HIEROGLYPH-13F50;Lo;0;L;;;;;N;;;;; +13F51;EGYPTIAN HIEROGLYPH-13F51;Lo;0;L;;;;;N;;;;; +13F52;EGYPTIAN HIEROGLYPH-13F52;Lo;0;L;;;;;N;;;;; +13F53;EGYPTIAN HIEROGLYPH-13F53;Lo;0;L;;;;;N;;;;; +13F54;EGYPTIAN HIEROGLYPH-13F54;Lo;0;L;;;;;N;;;;; +13F55;EGYPTIAN HIEROGLYPH-13F55;Lo;0;L;;;;;N;;;;; +13F56;EGYPTIAN HIEROGLYPH-13F56;Lo;0;L;;;;;N;;;;; +13F57;EGYPTIAN HIEROGLYPH-13F57;Lo;0;L;;;;;N;;;;; +13F58;EGYPTIAN HIEROGLYPH-13F58;Lo;0;L;;;;;N;;;;; +13F59;EGYPTIAN HIEROGLYPH-13F59;Lo;0;L;;;;;N;;;;; +13F5A;EGYPTIAN HIEROGLYPH-13F5A;Lo;0;L;;;;;N;;;;; +13F5B;EGYPTIAN HIEROGLYPH-13F5B;Lo;0;L;;;;;N;;;;; +13F5C;EGYPTIAN HIEROGLYPH-13F5C;Lo;0;L;;;;;N;;;;; +13F5D;EGYPTIAN HIEROGLYPH-13F5D;Lo;0;L;;;;;N;;;;; +13F5E;EGYPTIAN HIEROGLYPH-13F5E;Lo;0;L;;;;;N;;;;; +13F5F;EGYPTIAN HIEROGLYPH-13F5F;Lo;0;L;;;;;N;;;;; +13F60;EGYPTIAN HIEROGLYPH-13F60;Lo;0;L;;;;;N;;;;; +13F61;EGYPTIAN HIEROGLYPH-13F61;Lo;0;L;;;;;N;;;;; +13F62;EGYPTIAN HIEROGLYPH-13F62;Lo;0;L;;;;;N;;;;; +13F63;EGYPTIAN HIEROGLYPH-13F63;Lo;0;L;;;;;N;;;;; +13F64;EGYPTIAN HIEROGLYPH-13F64;Lo;0;L;;;;;N;;;;; +13F65;EGYPTIAN HIEROGLYPH-13F65;Lo;0;L;;;;;N;;;;; +13F66;EGYPTIAN HIEROGLYPH-13F66;Lo;0;L;;;;;N;;;;; +13F67;EGYPTIAN HIEROGLYPH-13F67;Lo;0;L;;;;;N;;;;; +13F68;EGYPTIAN HIEROGLYPH-13F68;Lo;0;L;;;;;N;;;;; +13F69;EGYPTIAN HIEROGLYPH-13F69;Lo;0;L;;;;;N;;;;; +13F6A;EGYPTIAN HIEROGLYPH-13F6A;Lo;0;L;;;;;N;;;;; +13F6B;EGYPTIAN HIEROGLYPH-13F6B;Lo;0;L;;;;;N;;;;; +13F6C;EGYPTIAN HIEROGLYPH-13F6C;Lo;0;L;;;;;N;;;;; +13F6D;EGYPTIAN HIEROGLYPH-13F6D;Lo;0;L;;;;;N;;;;; +13F6E;EGYPTIAN HIEROGLYPH-13F6E;Lo;0;L;;;;;N;;;;; +13F6F;EGYPTIAN HIEROGLYPH-13F6F;Lo;0;L;;;;;N;;;;; +13F70;EGYPTIAN HIEROGLYPH-13F70;Lo;0;L;;;;;N;;;;; +13F71;EGYPTIAN HIEROGLYPH-13F71;Lo;0;L;;;;;N;;;;; +13F72;EGYPTIAN HIEROGLYPH-13F72;Lo;0;L;;;;;N;;;;; +13F73;EGYPTIAN HIEROGLYPH-13F73;Lo;0;L;;;;;N;;;;; +13F74;EGYPTIAN HIEROGLYPH-13F74;Lo;0;L;;;;;N;;;;; +13F75;EGYPTIAN HIEROGLYPH-13F75;Lo;0;L;;;;;N;;;;; +13F76;EGYPTIAN HIEROGLYPH-13F76;Lo;0;L;;;;;N;;;;; +13F77;EGYPTIAN HIEROGLYPH-13F77;Lo;0;L;;;;;N;;;;; +13F78;EGYPTIAN HIEROGLYPH-13F78;Lo;0;L;;;;;N;;;;; +13F79;EGYPTIAN HIEROGLYPH-13F79;Lo;0;L;;;;;N;;;;; +13F7A;EGYPTIAN HIEROGLYPH-13F7A;Lo;0;L;;;;;N;;;;; +13F7B;EGYPTIAN HIEROGLYPH-13F7B;Lo;0;L;;;;;N;;;;; +13F7C;EGYPTIAN HIEROGLYPH-13F7C;Lo;0;L;;;;;N;;;;; +13F7D;EGYPTIAN HIEROGLYPH-13F7D;Lo;0;L;;;;;N;;;;; +13F7E;EGYPTIAN HIEROGLYPH-13F7E;Lo;0;L;;;;;N;;;;; +13F7F;EGYPTIAN HIEROGLYPH-13F7F;Lo;0;L;;;;;N;;;;; +13F80;EGYPTIAN HIEROGLYPH-13F80;Lo;0;L;;;;;N;;;;; +13F81;EGYPTIAN HIEROGLYPH-13F81;Lo;0;L;;;;;N;;;;; +13F82;EGYPTIAN HIEROGLYPH-13F82;Lo;0;L;;;;;N;;;;; +13F83;EGYPTIAN HIEROGLYPH-13F83;Lo;0;L;;;;;N;;;;; +13F84;EGYPTIAN HIEROGLYPH-13F84;Lo;0;L;;;;;N;;;;; +13F85;EGYPTIAN HIEROGLYPH-13F85;Lo;0;L;;;;;N;;;;; +13F86;EGYPTIAN HIEROGLYPH-13F86;Lo;0;L;;;;;N;;;;; +13F87;EGYPTIAN HIEROGLYPH-13F87;Lo;0;L;;;;;N;;;;; +13F88;EGYPTIAN HIEROGLYPH-13F88;Lo;0;L;;;;;N;;;;; +13F89;EGYPTIAN HIEROGLYPH-13F89;Lo;0;L;;;;;N;;;;; +13F8A;EGYPTIAN HIEROGLYPH-13F8A;Lo;0;L;;;;;N;;;;; +13F8B;EGYPTIAN HIEROGLYPH-13F8B;Lo;0;L;;;;;N;;;;; +13F8C;EGYPTIAN HIEROGLYPH-13F8C;Lo;0;L;;;;;N;;;;; +13F8D;EGYPTIAN HIEROGLYPH-13F8D;Lo;0;L;;;;;N;;;;; +13F8E;EGYPTIAN HIEROGLYPH-13F8E;Lo;0;L;;;;;N;;;;; +13F8F;EGYPTIAN HIEROGLYPH-13F8F;Lo;0;L;;;;;N;;;;; +13F90;EGYPTIAN HIEROGLYPH-13F90;Lo;0;L;;;;;N;;;;; +13F91;EGYPTIAN HIEROGLYPH-13F91;Lo;0;L;;;;;N;;;;; +13F92;EGYPTIAN HIEROGLYPH-13F92;Lo;0;L;;;;;N;;;;; +13F93;EGYPTIAN HIEROGLYPH-13F93;Lo;0;L;;;;;N;;;;; +13F94;EGYPTIAN HIEROGLYPH-13F94;Lo;0;L;;;;;N;;;;; +13F95;EGYPTIAN HIEROGLYPH-13F95;Lo;0;L;;;;;N;;;;; +13F96;EGYPTIAN HIEROGLYPH-13F96;Lo;0;L;;;;;N;;;;; +13F97;EGYPTIAN HIEROGLYPH-13F97;Lo;0;L;;;;;N;;;;; +13F98;EGYPTIAN HIEROGLYPH-13F98;Lo;0;L;;;;;N;;;;; +13F99;EGYPTIAN HIEROGLYPH-13F99;Lo;0;L;;;;;N;;;;; +13F9A;EGYPTIAN HIEROGLYPH-13F9A;Lo;0;L;;;;;N;;;;; +13F9B;EGYPTIAN HIEROGLYPH-13F9B;Lo;0;L;;;;;N;;;;; +13F9C;EGYPTIAN HIEROGLYPH-13F9C;Lo;0;L;;;;;N;;;;; +13F9D;EGYPTIAN HIEROGLYPH-13F9D;Lo;0;L;;;;;N;;;;; +13F9E;EGYPTIAN HIEROGLYPH-13F9E;Lo;0;L;;;;;N;;;;; +13F9F;EGYPTIAN HIEROGLYPH-13F9F;Lo;0;L;;;;;N;;;;; +13FA0;EGYPTIAN HIEROGLYPH-13FA0;Lo;0;L;;;;;N;;;;; +13FA1;EGYPTIAN HIEROGLYPH-13FA1;Lo;0;L;;;;;N;;;;; +13FA2;EGYPTIAN HIEROGLYPH-13FA2;Lo;0;L;;;;;N;;;;; +13FA3;EGYPTIAN HIEROGLYPH-13FA3;Lo;0;L;;;;;N;;;;; +13FA4;EGYPTIAN HIEROGLYPH-13FA4;Lo;0;L;;;;;N;;;;; +13FA5;EGYPTIAN HIEROGLYPH-13FA5;Lo;0;L;;;;;N;;;;; +13FA6;EGYPTIAN HIEROGLYPH-13FA6;Lo;0;L;;;;;N;;;;; +13FA7;EGYPTIAN HIEROGLYPH-13FA7;Lo;0;L;;;;;N;;;;; +13FA8;EGYPTIAN HIEROGLYPH-13FA8;Lo;0;L;;;;;N;;;;; +13FA9;EGYPTIAN HIEROGLYPH-13FA9;Lo;0;L;;;;;N;;;;; +13FAA;EGYPTIAN HIEROGLYPH-13FAA;Lo;0;L;;;;;N;;;;; +13FAB;EGYPTIAN HIEROGLYPH-13FAB;Lo;0;L;;;;;N;;;;; +13FAC;EGYPTIAN HIEROGLYPH-13FAC;Lo;0;L;;;;;N;;;;; +13FAD;EGYPTIAN HIEROGLYPH-13FAD;Lo;0;L;;;;;N;;;;; +13FAE;EGYPTIAN HIEROGLYPH-13FAE;Lo;0;L;;;;;N;;;;; +13FAF;EGYPTIAN HIEROGLYPH-13FAF;Lo;0;L;;;;;N;;;;; +13FB0;EGYPTIAN HIEROGLYPH-13FB0;Lo;0;L;;;;;N;;;;; +13FB1;EGYPTIAN HIEROGLYPH-13FB1;Lo;0;L;;;;;N;;;;; +13FB2;EGYPTIAN HIEROGLYPH-13FB2;Lo;0;L;;;;;N;;;;; +13FB3;EGYPTIAN HIEROGLYPH-13FB3;Lo;0;L;;;;;N;;;;; +13FB4;EGYPTIAN HIEROGLYPH-13FB4;Lo;0;L;;;;;N;;;;; +13FB5;EGYPTIAN HIEROGLYPH-13FB5;Lo;0;L;;;;;N;;;;; +13FB6;EGYPTIAN HIEROGLYPH-13FB6;Lo;0;L;;;;;N;;;;; +13FB7;EGYPTIAN HIEROGLYPH-13FB7;Lo;0;L;;;;;N;;;;; +13FB8;EGYPTIAN HIEROGLYPH-13FB8;Lo;0;L;;;;;N;;;;; +13FB9;EGYPTIAN HIEROGLYPH-13FB9;Lo;0;L;;;;;N;;;;; +13FBA;EGYPTIAN HIEROGLYPH-13FBA;Lo;0;L;;;;;N;;;;; +13FBB;EGYPTIAN HIEROGLYPH-13FBB;Lo;0;L;;;;;N;;;;; +13FBC;EGYPTIAN HIEROGLYPH-13FBC;Lo;0;L;;;;;N;;;;; +13FBD;EGYPTIAN HIEROGLYPH-13FBD;Lo;0;L;;;;;N;;;;; +13FBE;EGYPTIAN HIEROGLYPH-13FBE;Lo;0;L;;;;;N;;;;; +13FBF;EGYPTIAN HIEROGLYPH-13FBF;Lo;0;L;;;;;N;;;;; +13FC0;EGYPTIAN HIEROGLYPH-13FC0;Lo;0;L;;;;;N;;;;; +13FC1;EGYPTIAN HIEROGLYPH-13FC1;Lo;0;L;;;;;N;;;;; +13FC2;EGYPTIAN HIEROGLYPH-13FC2;Lo;0;L;;;;;N;;;;; +13FC3;EGYPTIAN HIEROGLYPH-13FC3;Lo;0;L;;;;;N;;;;; +13FC4;EGYPTIAN HIEROGLYPH-13FC4;Lo;0;L;;;;;N;;;;; +13FC5;EGYPTIAN HIEROGLYPH-13FC5;Lo;0;L;;;;;N;;;;; +13FC6;EGYPTIAN HIEROGLYPH-13FC6;Lo;0;L;;;;;N;;;;; +13FC7;EGYPTIAN HIEROGLYPH-13FC7;Lo;0;L;;;;;N;;;;; +13FC8;EGYPTIAN HIEROGLYPH-13FC8;Lo;0;L;;;;;N;;;;; +13FC9;EGYPTIAN HIEROGLYPH-13FC9;Lo;0;L;;;;;N;;;;; +13FCA;EGYPTIAN HIEROGLYPH-13FCA;Lo;0;L;;;;;N;;;;; +13FCB;EGYPTIAN HIEROGLYPH-13FCB;Lo;0;L;;;;;N;;;;; +13FCC;EGYPTIAN HIEROGLYPH-13FCC;Lo;0;L;;;;;N;;;;; +13FCD;EGYPTIAN HIEROGLYPH-13FCD;Lo;0;L;;;;;N;;;;; +13FCE;EGYPTIAN HIEROGLYPH-13FCE;Lo;0;L;;;;;N;;;;; +13FCF;EGYPTIAN HIEROGLYPH-13FCF;Lo;0;L;;;;;N;;;;; +13FD0;EGYPTIAN HIEROGLYPH-13FD0;Lo;0;L;;;;;N;;;;; +13FD1;EGYPTIAN HIEROGLYPH-13FD1;Lo;0;L;;;;;N;;;;; +13FD2;EGYPTIAN HIEROGLYPH-13FD2;Lo;0;L;;;;;N;;;;; +13FD3;EGYPTIAN HIEROGLYPH-13FD3;Lo;0;L;;;;;N;;;;; +13FD4;EGYPTIAN HIEROGLYPH-13FD4;Lo;0;L;;;;;N;;;;; +13FD5;EGYPTIAN HIEROGLYPH-13FD5;Lo;0;L;;;;;N;;;;; +13FD6;EGYPTIAN HIEROGLYPH-13FD6;Lo;0;L;;;;;N;;;;; +13FD7;EGYPTIAN HIEROGLYPH-13FD7;Lo;0;L;;;;;N;;;;; +13FD8;EGYPTIAN HIEROGLYPH-13FD8;Lo;0;L;;;;;N;;;;; +13FD9;EGYPTIAN HIEROGLYPH-13FD9;Lo;0;L;;;;;N;;;;; +13FDA;EGYPTIAN HIEROGLYPH-13FDA;Lo;0;L;;;;;N;;;;; +13FDB;EGYPTIAN HIEROGLYPH-13FDB;Lo;0;L;;;;;N;;;;; +13FDC;EGYPTIAN HIEROGLYPH-13FDC;Lo;0;L;;;;;N;;;;; +13FDD;EGYPTIAN HIEROGLYPH-13FDD;Lo;0;L;;;;;N;;;;; +13FDE;EGYPTIAN HIEROGLYPH-13FDE;Lo;0;L;;;;;N;;;;; +13FDF;EGYPTIAN HIEROGLYPH-13FDF;Lo;0;L;;;;;N;;;;; +13FE0;EGYPTIAN HIEROGLYPH-13FE0;Lo;0;L;;;;;N;;;;; +13FE1;EGYPTIAN HIEROGLYPH-13FE1;Lo;0;L;;;;;N;;;;; +13FE2;EGYPTIAN HIEROGLYPH-13FE2;Lo;0;L;;;;;N;;;;; +13FE3;EGYPTIAN HIEROGLYPH-13FE3;Lo;0;L;;;;;N;;;;; +13FE4;EGYPTIAN HIEROGLYPH-13FE4;Lo;0;L;;;;;N;;;;; +13FE5;EGYPTIAN HIEROGLYPH-13FE5;Lo;0;L;;;;;N;;;;; +13FE6;EGYPTIAN HIEROGLYPH-13FE6;Lo;0;L;;;;;N;;;;; +13FE7;EGYPTIAN HIEROGLYPH-13FE7;Lo;0;L;;;;;N;;;;; +13FE8;EGYPTIAN HIEROGLYPH-13FE8;Lo;0;L;;;;;N;;;;; +13FE9;EGYPTIAN HIEROGLYPH-13FE9;Lo;0;L;;;;;N;;;;; +13FEA;EGYPTIAN HIEROGLYPH-13FEA;Lo;0;L;;;;;N;;;;; +13FEB;EGYPTIAN HIEROGLYPH-13FEB;Lo;0;L;;;;;N;;;;; +13FEC;EGYPTIAN HIEROGLYPH-13FEC;Lo;0;L;;;;;N;;;;; +13FED;EGYPTIAN HIEROGLYPH-13FED;Lo;0;L;;;;;N;;;;; +13FEE;EGYPTIAN HIEROGLYPH-13FEE;Lo;0;L;;;;;N;;;;; +13FEF;EGYPTIAN HIEROGLYPH-13FEF;Lo;0;L;;;;;N;;;;; +13FF0;EGYPTIAN HIEROGLYPH-13FF0;Lo;0;L;;;;;N;;;;; +13FF1;EGYPTIAN HIEROGLYPH-13FF1;Lo;0;L;;;;;N;;;;; +13FF2;EGYPTIAN HIEROGLYPH-13FF2;Lo;0;L;;;;;N;;;;; +13FF3;EGYPTIAN HIEROGLYPH-13FF3;Lo;0;L;;;;;N;;;;; +13FF4;EGYPTIAN HIEROGLYPH-13FF4;Lo;0;L;;;;;N;;;;; +13FF5;EGYPTIAN HIEROGLYPH-13FF5;Lo;0;L;;;;;N;;;;; +13FF6;EGYPTIAN HIEROGLYPH-13FF6;Lo;0;L;;;;;N;;;;; +13FF7;EGYPTIAN HIEROGLYPH-13FF7;Lo;0;L;;;;;N;;;;; +13FF8;EGYPTIAN HIEROGLYPH-13FF8;Lo;0;L;;;;;N;;;;; +13FF9;EGYPTIAN HIEROGLYPH-13FF9;Lo;0;L;;;;;N;;;;; +13FFA;EGYPTIAN HIEROGLYPH-13FFA;Lo;0;L;;;;;N;;;;; +13FFB;EGYPTIAN HIEROGLYPH-13FFB;Lo;0;L;;;;;N;;;;; +13FFC;EGYPTIAN HIEROGLYPH-13FFC;Lo;0;L;;;;;N;;;;; +13FFD;EGYPTIAN HIEROGLYPH-13FFD;Lo;0;L;;;;;N;;;;; +13FFE;EGYPTIAN HIEROGLYPH-13FFE;Lo;0;L;;;;;N;;;;; +13FFF;EGYPTIAN HIEROGLYPH-13FFF;Lo;0;L;;;;;N;;;;; +14000;EGYPTIAN HIEROGLYPH-14000;Lo;0;L;;;;;N;;;;; +14001;EGYPTIAN HIEROGLYPH-14001;Lo;0;L;;;;;N;;;;; +14002;EGYPTIAN HIEROGLYPH-14002;Lo;0;L;;;;;N;;;;; +14003;EGYPTIAN HIEROGLYPH-14003;Lo;0;L;;;;;N;;;;; +14004;EGYPTIAN HIEROGLYPH-14004;Lo;0;L;;;;;N;;;;; +14005;EGYPTIAN HIEROGLYPH-14005;Lo;0;L;;;;;N;;;;; +14006;EGYPTIAN HIEROGLYPH-14006;Lo;0;L;;;;;N;;;;; +14007;EGYPTIAN HIEROGLYPH-14007;Lo;0;L;;;;;N;;;;; +14008;EGYPTIAN HIEROGLYPH-14008;Lo;0;L;;;;;N;;;;; +14009;EGYPTIAN HIEROGLYPH-14009;Lo;0;L;;;;;N;;;;; +1400A;EGYPTIAN HIEROGLYPH-1400A;Lo;0;L;;;;;N;;;;; +1400B;EGYPTIAN HIEROGLYPH-1400B;Lo;0;L;;;;;N;;;;; +1400C;EGYPTIAN HIEROGLYPH-1400C;Lo;0;L;;;;;N;;;;; +1400D;EGYPTIAN HIEROGLYPH-1400D;Lo;0;L;;;;;N;;;;; +1400E;EGYPTIAN HIEROGLYPH-1400E;Lo;0;L;;;;;N;;;;; +1400F;EGYPTIAN HIEROGLYPH-1400F;Lo;0;L;;;;;N;;;;; +14010;EGYPTIAN HIEROGLYPH-14010;Lo;0;L;;;;;N;;;;; +14011;EGYPTIAN HIEROGLYPH-14011;Lo;0;L;;;;;N;;;;; +14012;EGYPTIAN HIEROGLYPH-14012;Lo;0;L;;;;;N;;;;; +14013;EGYPTIAN HIEROGLYPH-14013;Lo;0;L;;;;;N;;;;; +14014;EGYPTIAN HIEROGLYPH-14014;Lo;0;L;;;;;N;;;;; +14015;EGYPTIAN HIEROGLYPH-14015;Lo;0;L;;;;;N;;;;; +14016;EGYPTIAN HIEROGLYPH-14016;Lo;0;L;;;;;N;;;;; +14017;EGYPTIAN HIEROGLYPH-14017;Lo;0;L;;;;;N;;;;; +14018;EGYPTIAN HIEROGLYPH-14018;Lo;0;L;;;;;N;;;;; +14019;EGYPTIAN HIEROGLYPH-14019;Lo;0;L;;;;;N;;;;; +1401A;EGYPTIAN HIEROGLYPH-1401A;Lo;0;L;;;;;N;;;;; +1401B;EGYPTIAN HIEROGLYPH-1401B;Lo;0;L;;;;;N;;;;; +1401C;EGYPTIAN HIEROGLYPH-1401C;Lo;0;L;;;;;N;;;;; +1401D;EGYPTIAN HIEROGLYPH-1401D;Lo;0;L;;;;;N;;;;; +1401E;EGYPTIAN HIEROGLYPH-1401E;Lo;0;L;;;;;N;;;;; +1401F;EGYPTIAN HIEROGLYPH-1401F;Lo;0;L;;;;;N;;;;; +14020;EGYPTIAN HIEROGLYPH-14020;Lo;0;L;;;;;N;;;;; +14021;EGYPTIAN HIEROGLYPH-14021;Lo;0;L;;;;;N;;;;; +14022;EGYPTIAN HIEROGLYPH-14022;Lo;0;L;;;;;N;;;;; +14023;EGYPTIAN HIEROGLYPH-14023;Lo;0;L;;;;;N;;;;; +14024;EGYPTIAN HIEROGLYPH-14024;Lo;0;L;;;;;N;;;;; +14025;EGYPTIAN HIEROGLYPH-14025;Lo;0;L;;;;;N;;;;; +14026;EGYPTIAN HIEROGLYPH-14026;Lo;0;L;;;;;N;;;;; +14027;EGYPTIAN HIEROGLYPH-14027;Lo;0;L;;;;;N;;;;; +14028;EGYPTIAN HIEROGLYPH-14028;Lo;0;L;;;;;N;;;;; +14029;EGYPTIAN HIEROGLYPH-14029;Lo;0;L;;;;;N;;;;; +1402A;EGYPTIAN HIEROGLYPH-1402A;Lo;0;L;;;;;N;;;;; +1402B;EGYPTIAN HIEROGLYPH-1402B;Lo;0;L;;;;;N;;;;; +1402C;EGYPTIAN HIEROGLYPH-1402C;Lo;0;L;;;;;N;;;;; +1402D;EGYPTIAN HIEROGLYPH-1402D;Lo;0;L;;;;;N;;;;; +1402E;EGYPTIAN HIEROGLYPH-1402E;Lo;0;L;;;;;N;;;;; +1402F;EGYPTIAN HIEROGLYPH-1402F;Lo;0;L;;;;;N;;;;; +14030;EGYPTIAN HIEROGLYPH-14030;Lo;0;L;;;;;N;;;;; +14031;EGYPTIAN HIEROGLYPH-14031;Lo;0;L;;;;;N;;;;; +14032;EGYPTIAN HIEROGLYPH-14032;Lo;0;L;;;;;N;;;;; +14033;EGYPTIAN HIEROGLYPH-14033;Lo;0;L;;;;;N;;;;; +14034;EGYPTIAN HIEROGLYPH-14034;Lo;0;L;;;;;N;;;;; +14035;EGYPTIAN HIEROGLYPH-14035;Lo;0;L;;;;;N;;;;; +14036;EGYPTIAN HIEROGLYPH-14036;Lo;0;L;;;;;N;;;;; +14037;EGYPTIAN HIEROGLYPH-14037;Lo;0;L;;;;;N;;;;; +14038;EGYPTIAN HIEROGLYPH-14038;Lo;0;L;;;;;N;;;;; +14039;EGYPTIAN HIEROGLYPH-14039;Lo;0;L;;;;;N;;;;; +1403A;EGYPTIAN HIEROGLYPH-1403A;Lo;0;L;;;;;N;;;;; +1403B;EGYPTIAN HIEROGLYPH-1403B;Lo;0;L;;;;;N;;;;; +1403C;EGYPTIAN HIEROGLYPH-1403C;Lo;0;L;;;;;N;;;;; +1403D;EGYPTIAN HIEROGLYPH-1403D;Lo;0;L;;;;;N;;;;; +1403E;EGYPTIAN HIEROGLYPH-1403E;Lo;0;L;;;;;N;;;;; +1403F;EGYPTIAN HIEROGLYPH-1403F;Lo;0;L;;;;;N;;;;; +14040;EGYPTIAN HIEROGLYPH-14040;Lo;0;L;;;;;N;;;;; +14041;EGYPTIAN HIEROGLYPH-14041;Lo;0;L;;;;;N;;;;; +14042;EGYPTIAN HIEROGLYPH-14042;Lo;0;L;;;;;N;;;;; +14043;EGYPTIAN HIEROGLYPH-14043;Lo;0;L;;;;;N;;;;; +14044;EGYPTIAN HIEROGLYPH-14044;Lo;0;L;;;;;N;;;;; +14045;EGYPTIAN HIEROGLYPH-14045;Lo;0;L;;;;;N;;;;; +14046;EGYPTIAN HIEROGLYPH-14046;Lo;0;L;;;;;N;;;;; +14047;EGYPTIAN HIEROGLYPH-14047;Lo;0;L;;;;;N;;;;; +14048;EGYPTIAN HIEROGLYPH-14048;Lo;0;L;;;;;N;;;;; +14049;EGYPTIAN HIEROGLYPH-14049;Lo;0;L;;;;;N;;;;; +1404A;EGYPTIAN HIEROGLYPH-1404A;Lo;0;L;;;;;N;;;;; +1404B;EGYPTIAN HIEROGLYPH-1404B;Lo;0;L;;;;;N;;;;; +1404C;EGYPTIAN HIEROGLYPH-1404C;Lo;0;L;;;;;N;;;;; +1404D;EGYPTIAN HIEROGLYPH-1404D;Lo;0;L;;;;;N;;;;; +1404E;EGYPTIAN HIEROGLYPH-1404E;Lo;0;L;;;;;N;;;;; +1404F;EGYPTIAN HIEROGLYPH-1404F;Lo;0;L;;;;;N;;;;; +14050;EGYPTIAN HIEROGLYPH-14050;Lo;0;L;;;;;N;;;;; +14051;EGYPTIAN HIEROGLYPH-14051;Lo;0;L;;;;;N;;;;; +14052;EGYPTIAN HIEROGLYPH-14052;Lo;0;L;;;;;N;;;;; +14053;EGYPTIAN HIEROGLYPH-14053;Lo;0;L;;;;;N;;;;; +14054;EGYPTIAN HIEROGLYPH-14054;Lo;0;L;;;;;N;;;;; +14055;EGYPTIAN HIEROGLYPH-14055;Lo;0;L;;;;;N;;;;; +14056;EGYPTIAN HIEROGLYPH-14056;Lo;0;L;;;;;N;;;;; +14057;EGYPTIAN HIEROGLYPH-14057;Lo;0;L;;;;;N;;;;; +14058;EGYPTIAN HIEROGLYPH-14058;Lo;0;L;;;;;N;;;;; +14059;EGYPTIAN HIEROGLYPH-14059;Lo;0;L;;;;;N;;;;; +1405A;EGYPTIAN HIEROGLYPH-1405A;Lo;0;L;;;;;N;;;;; +1405B;EGYPTIAN HIEROGLYPH-1405B;Lo;0;L;;;;;N;;;;; +1405C;EGYPTIAN HIEROGLYPH-1405C;Lo;0;L;;;;;N;;;;; +1405D;EGYPTIAN HIEROGLYPH-1405D;Lo;0;L;;;;;N;;;;; +1405E;EGYPTIAN HIEROGLYPH-1405E;Lo;0;L;;;;;N;;;;; +1405F;EGYPTIAN HIEROGLYPH-1405F;Lo;0;L;;;;;N;;;;; +14060;EGYPTIAN HIEROGLYPH-14060;Lo;0;L;;;;;N;;;;; +14061;EGYPTIAN HIEROGLYPH-14061;Lo;0;L;;;;;N;;;;; +14062;EGYPTIAN HIEROGLYPH-14062;Lo;0;L;;;;;N;;;;; +14063;EGYPTIAN HIEROGLYPH-14063;Lo;0;L;;;;;N;;;;; +14064;EGYPTIAN HIEROGLYPH-14064;Lo;0;L;;;;;N;;;;; +14065;EGYPTIAN HIEROGLYPH-14065;Lo;0;L;;;;;N;;;;; +14066;EGYPTIAN HIEROGLYPH-14066;Lo;0;L;;;;;N;;;;; +14067;EGYPTIAN HIEROGLYPH-14067;Lo;0;L;;;;;N;;;;; +14068;EGYPTIAN HIEROGLYPH-14068;Lo;0;L;;;;;N;;;;; +14069;EGYPTIAN HIEROGLYPH-14069;Lo;0;L;;;;;N;;;;; +1406A;EGYPTIAN HIEROGLYPH-1406A;Lo;0;L;;;;;N;;;;; +1406B;EGYPTIAN HIEROGLYPH-1406B;Lo;0;L;;;;;N;;;;; +1406C;EGYPTIAN HIEROGLYPH-1406C;Lo;0;L;;;;;N;;;;; +1406D;EGYPTIAN HIEROGLYPH-1406D;Lo;0;L;;;;;N;;;;; +1406E;EGYPTIAN HIEROGLYPH-1406E;Lo;0;L;;;;;N;;;;; +1406F;EGYPTIAN HIEROGLYPH-1406F;Lo;0;L;;;;;N;;;;; +14070;EGYPTIAN HIEROGLYPH-14070;Lo;0;L;;;;;N;;;;; +14071;EGYPTIAN HIEROGLYPH-14071;Lo;0;L;;;;;N;;;;; +14072;EGYPTIAN HIEROGLYPH-14072;Lo;0;L;;;;;N;;;;; +14073;EGYPTIAN HIEROGLYPH-14073;Lo;0;L;;;;;N;;;;; +14074;EGYPTIAN HIEROGLYPH-14074;Lo;0;L;;;;;N;;;;; +14075;EGYPTIAN HIEROGLYPH-14075;Lo;0;L;;;;;N;;;;; +14076;EGYPTIAN HIEROGLYPH-14076;Lo;0;L;;;;;N;;;;; +14077;EGYPTIAN HIEROGLYPH-14077;Lo;0;L;;;;;N;;;;; +14078;EGYPTIAN HIEROGLYPH-14078;Lo;0;L;;;;;N;;;;; +14079;EGYPTIAN HIEROGLYPH-14079;Lo;0;L;;;;;N;;;;; +1407A;EGYPTIAN HIEROGLYPH-1407A;Lo;0;L;;;;;N;;;;; +1407B;EGYPTIAN HIEROGLYPH-1407B;Lo;0;L;;;;;N;;;;; +1407C;EGYPTIAN HIEROGLYPH-1407C;Lo;0;L;;;;;N;;;;; +1407D;EGYPTIAN HIEROGLYPH-1407D;Lo;0;L;;;;;N;;;;; +1407E;EGYPTIAN HIEROGLYPH-1407E;Lo;0;L;;;;;N;;;;; +1407F;EGYPTIAN HIEROGLYPH-1407F;Lo;0;L;;;;;N;;;;; +14080;EGYPTIAN HIEROGLYPH-14080;Lo;0;L;;;;;N;;;;; +14081;EGYPTIAN HIEROGLYPH-14081;Lo;0;L;;;;;N;;;;; +14082;EGYPTIAN HIEROGLYPH-14082;Lo;0;L;;;;;N;;;;; +14083;EGYPTIAN HIEROGLYPH-14083;Lo;0;L;;;;;N;;;;; +14084;EGYPTIAN HIEROGLYPH-14084;Lo;0;L;;;;;N;;;;; +14085;EGYPTIAN HIEROGLYPH-14085;Lo;0;L;;;;;N;;;;; +14086;EGYPTIAN HIEROGLYPH-14086;Lo;0;L;;;;;N;;;;; +14087;EGYPTIAN HIEROGLYPH-14087;Lo;0;L;;;;;N;;;;; +14088;EGYPTIAN HIEROGLYPH-14088;Lo;0;L;;;;;N;;;;; +14089;EGYPTIAN HIEROGLYPH-14089;Lo;0;L;;;;;N;;;;; +1408A;EGYPTIAN HIEROGLYPH-1408A;Lo;0;L;;;;;N;;;;; +1408B;EGYPTIAN HIEROGLYPH-1408B;Lo;0;L;;;;;N;;;;; +1408C;EGYPTIAN HIEROGLYPH-1408C;Lo;0;L;;;;;N;;;;; +1408D;EGYPTIAN HIEROGLYPH-1408D;Lo;0;L;;;;;N;;;;; +1408E;EGYPTIAN HIEROGLYPH-1408E;Lo;0;L;;;;;N;;;;; +1408F;EGYPTIAN HIEROGLYPH-1408F;Lo;0;L;;;;;N;;;;; +14090;EGYPTIAN HIEROGLYPH-14090;Lo;0;L;;;;;N;;;;; +14091;EGYPTIAN HIEROGLYPH-14091;Lo;0;L;;;;;N;;;;; +14092;EGYPTIAN HIEROGLYPH-14092;Lo;0;L;;;;;N;;;;; +14093;EGYPTIAN HIEROGLYPH-14093;Lo;0;L;;;;;N;;;;; +14094;EGYPTIAN HIEROGLYPH-14094;Lo;0;L;;;;;N;;;;; +14095;EGYPTIAN HIEROGLYPH-14095;Lo;0;L;;;;;N;;;;; +14096;EGYPTIAN HIEROGLYPH-14096;Lo;0;L;;;;;N;;;;; +14097;EGYPTIAN HIEROGLYPH-14097;Lo;0;L;;;;;N;;;;; +14098;EGYPTIAN HIEROGLYPH-14098;Lo;0;L;;;;;N;;;;; +14099;EGYPTIAN HIEROGLYPH-14099;Lo;0;L;;;;;N;;;;; +1409A;EGYPTIAN HIEROGLYPH-1409A;Lo;0;L;;;;;N;;;;; +1409B;EGYPTIAN HIEROGLYPH-1409B;Lo;0;L;;;;;N;;;;; +1409C;EGYPTIAN HIEROGLYPH-1409C;Lo;0;L;;;;;N;;;;; +1409D;EGYPTIAN HIEROGLYPH-1409D;Lo;0;L;;;;;N;;;;; +1409E;EGYPTIAN HIEROGLYPH-1409E;Lo;0;L;;;;;N;;;;; +1409F;EGYPTIAN HIEROGLYPH-1409F;Lo;0;L;;;;;N;;;;; +140A0;EGYPTIAN HIEROGLYPH-140A0;Lo;0;L;;;;;N;;;;; +140A1;EGYPTIAN HIEROGLYPH-140A1;Lo;0;L;;;;;N;;;;; +140A2;EGYPTIAN HIEROGLYPH-140A2;Lo;0;L;;;;;N;;;;; +140A3;EGYPTIAN HIEROGLYPH-140A3;Lo;0;L;;;;;N;;;;; +140A4;EGYPTIAN HIEROGLYPH-140A4;Lo;0;L;;;;;N;;;;; +140A5;EGYPTIAN HIEROGLYPH-140A5;Lo;0;L;;;;;N;;;;; +140A6;EGYPTIAN HIEROGLYPH-140A6;Lo;0;L;;;;;N;;;;; +140A7;EGYPTIAN HIEROGLYPH-140A7;Lo;0;L;;;;;N;;;;; +140A8;EGYPTIAN HIEROGLYPH-140A8;Lo;0;L;;;;;N;;;;; +140A9;EGYPTIAN HIEROGLYPH-140A9;Lo;0;L;;;;;N;;;;; +140AA;EGYPTIAN HIEROGLYPH-140AA;Lo;0;L;;;;;N;;;;; +140AB;EGYPTIAN HIEROGLYPH-140AB;Lo;0;L;;;;;N;;;;; +140AC;EGYPTIAN HIEROGLYPH-140AC;Lo;0;L;;;;;N;;;;; +140AD;EGYPTIAN HIEROGLYPH-140AD;Lo;0;L;;;;;N;;;;; +140AE;EGYPTIAN HIEROGLYPH-140AE;Lo;0;L;;;;;N;;;;; +140AF;EGYPTIAN HIEROGLYPH-140AF;Lo;0;L;;;;;N;;;;; +140B0;EGYPTIAN HIEROGLYPH-140B0;Lo;0;L;;;;;N;;;;; +140B1;EGYPTIAN HIEROGLYPH-140B1;Lo;0;L;;;;;N;;;;; +140B2;EGYPTIAN HIEROGLYPH-140B2;Lo;0;L;;;;;N;;;;; +140B3;EGYPTIAN HIEROGLYPH-140B3;Lo;0;L;;;;;N;;;;; +140B4;EGYPTIAN HIEROGLYPH-140B4;Lo;0;L;;;;;N;;;;; +140B5;EGYPTIAN HIEROGLYPH-140B5;Lo;0;L;;;;;N;;;;; +140B6;EGYPTIAN HIEROGLYPH-140B6;Lo;0;L;;;;;N;;;;; +140B7;EGYPTIAN HIEROGLYPH-140B7;Lo;0;L;;;;;N;;;;; +140B8;EGYPTIAN HIEROGLYPH-140B8;Lo;0;L;;;;;N;;;;; +140B9;EGYPTIAN HIEROGLYPH-140B9;Lo;0;L;;;;;N;;;;; +140BA;EGYPTIAN HIEROGLYPH-140BA;Lo;0;L;;;;;N;;;;; +140BB;EGYPTIAN HIEROGLYPH-140BB;Lo;0;L;;;;;N;;;;; +140BC;EGYPTIAN HIEROGLYPH-140BC;Lo;0;L;;;;;N;;;;; +140BD;EGYPTIAN HIEROGLYPH-140BD;Lo;0;L;;;;;N;;;;; +140BE;EGYPTIAN HIEROGLYPH-140BE;Lo;0;L;;;;;N;;;;; +140BF;EGYPTIAN HIEROGLYPH-140BF;Lo;0;L;;;;;N;;;;; +140C0;EGYPTIAN HIEROGLYPH-140C0;Lo;0;L;;;;;N;;;;; +140C1;EGYPTIAN HIEROGLYPH-140C1;Lo;0;L;;;;;N;;;;; +140C2;EGYPTIAN HIEROGLYPH-140C2;Lo;0;L;;;;;N;;;;; +140C3;EGYPTIAN HIEROGLYPH-140C3;Lo;0;L;;;;;N;;;;; +140C4;EGYPTIAN HIEROGLYPH-140C4;Lo;0;L;;;;;N;;;;; +140C5;EGYPTIAN HIEROGLYPH-140C5;Lo;0;L;;;;;N;;;;; +140C6;EGYPTIAN HIEROGLYPH-140C6;Lo;0;L;;;;;N;;;;; +140C7;EGYPTIAN HIEROGLYPH-140C7;Lo;0;L;;;;;N;;;;; +140C8;EGYPTIAN HIEROGLYPH-140C8;Lo;0;L;;;;;N;;;;; +140C9;EGYPTIAN HIEROGLYPH-140C9;Lo;0;L;;;;;N;;;;; +140CA;EGYPTIAN HIEROGLYPH-140CA;Lo;0;L;;;;;N;;;;; +140CB;EGYPTIAN HIEROGLYPH-140CB;Lo;0;L;;;;;N;;;;; +140CC;EGYPTIAN HIEROGLYPH-140CC;Lo;0;L;;;;;N;;;;; +140CD;EGYPTIAN HIEROGLYPH-140CD;Lo;0;L;;;;;N;;;;; +140CE;EGYPTIAN HIEROGLYPH-140CE;Lo;0;L;;;;;N;;;;; +140CF;EGYPTIAN HIEROGLYPH-140CF;Lo;0;L;;;;;N;;;;; +140D0;EGYPTIAN HIEROGLYPH-140D0;Lo;0;L;;;;;N;;;;; +140D1;EGYPTIAN HIEROGLYPH-140D1;Lo;0;L;;;;;N;;;;; +140D2;EGYPTIAN HIEROGLYPH-140D2;Lo;0;L;;;;;N;;;;; +140D3;EGYPTIAN HIEROGLYPH-140D3;Lo;0;L;;;;;N;;;;; +140D4;EGYPTIAN HIEROGLYPH-140D4;Lo;0;L;;;;;N;;;;; +140D5;EGYPTIAN HIEROGLYPH-140D5;Lo;0;L;;;;;N;;;;; +140D6;EGYPTIAN HIEROGLYPH-140D6;Lo;0;L;;;;;N;;;;; +140D7;EGYPTIAN HIEROGLYPH-140D7;Lo;0;L;;;;;N;;;;; +140D8;EGYPTIAN HIEROGLYPH-140D8;Lo;0;L;;;;;N;;;;; +140D9;EGYPTIAN HIEROGLYPH-140D9;Lo;0;L;;;;;N;;;;; +140DA;EGYPTIAN HIEROGLYPH-140DA;Lo;0;L;;;;;N;;;;; +140DB;EGYPTIAN HIEROGLYPH-140DB;Lo;0;L;;;;;N;;;;; +140DC;EGYPTIAN HIEROGLYPH-140DC;Lo;0;L;;;;;N;;;;; +140DD;EGYPTIAN HIEROGLYPH-140DD;Lo;0;L;;;;;N;;;;; +140DE;EGYPTIAN HIEROGLYPH-140DE;Lo;0;L;;;;;N;;;;; +140DF;EGYPTIAN HIEROGLYPH-140DF;Lo;0;L;;;;;N;;;;; +140E0;EGYPTIAN HIEROGLYPH-140E0;Lo;0;L;;;;;N;;;;; +140E1;EGYPTIAN HIEROGLYPH-140E1;Lo;0;L;;;;;N;;;;; +140E2;EGYPTIAN HIEROGLYPH-140E2;Lo;0;L;;;;;N;;;;; +140E3;EGYPTIAN HIEROGLYPH-140E3;Lo;0;L;;;;;N;;;;; +140E4;EGYPTIAN HIEROGLYPH-140E4;Lo;0;L;;;;;N;;;;; +140E5;EGYPTIAN HIEROGLYPH-140E5;Lo;0;L;;;;;N;;;;; +140E6;EGYPTIAN HIEROGLYPH-140E6;Lo;0;L;;;;;N;;;;; +140E7;EGYPTIAN HIEROGLYPH-140E7;Lo;0;L;;;;;N;;;;; +140E8;EGYPTIAN HIEROGLYPH-140E8;Lo;0;L;;;;;N;;;;; +140E9;EGYPTIAN HIEROGLYPH-140E9;Lo;0;L;;;;;N;;;;; +140EA;EGYPTIAN HIEROGLYPH-140EA;Lo;0;L;;;;;N;;;;; +140EB;EGYPTIAN HIEROGLYPH-140EB;Lo;0;L;;;;;N;;;;; +140EC;EGYPTIAN HIEROGLYPH-140EC;Lo;0;L;;;;;N;;;;; +140ED;EGYPTIAN HIEROGLYPH-140ED;Lo;0;L;;;;;N;;;;; +140EE;EGYPTIAN HIEROGLYPH-140EE;Lo;0;L;;;;;N;;;;; +140EF;EGYPTIAN HIEROGLYPH-140EF;Lo;0;L;;;;;N;;;;; +140F0;EGYPTIAN HIEROGLYPH-140F0;Lo;0;L;;;;;N;;;;; +140F1;EGYPTIAN HIEROGLYPH-140F1;Lo;0;L;;;;;N;;;;; +140F2;EGYPTIAN HIEROGLYPH-140F2;Lo;0;L;;;;;N;;;;; +140F3;EGYPTIAN HIEROGLYPH-140F3;Lo;0;L;;;;;N;;;;; +140F4;EGYPTIAN HIEROGLYPH-140F4;Lo;0;L;;;;;N;;;;; +140F5;EGYPTIAN HIEROGLYPH-140F5;Lo;0;L;;;;;N;;;;; +140F6;EGYPTIAN HIEROGLYPH-140F6;Lo;0;L;;;;;N;;;;; +140F7;EGYPTIAN HIEROGLYPH-140F7;Lo;0;L;;;;;N;;;;; +140F8;EGYPTIAN HIEROGLYPH-140F8;Lo;0;L;;;;;N;;;;; +140F9;EGYPTIAN HIEROGLYPH-140F9;Lo;0;L;;;;;N;;;;; +140FA;EGYPTIAN HIEROGLYPH-140FA;Lo;0;L;;;;;N;;;;; +140FB;EGYPTIAN HIEROGLYPH-140FB;Lo;0;L;;;;;N;;;;; +140FC;EGYPTIAN HIEROGLYPH-140FC;Lo;0;L;;;;;N;;;;; +140FD;EGYPTIAN HIEROGLYPH-140FD;Lo;0;L;;;;;N;;;;; +140FE;EGYPTIAN HIEROGLYPH-140FE;Lo;0;L;;;;;N;;;;; +140FF;EGYPTIAN HIEROGLYPH-140FF;Lo;0;L;;;;;N;;;;; +14100;EGYPTIAN HIEROGLYPH-14100;Lo;0;L;;;;;N;;;;; +14101;EGYPTIAN HIEROGLYPH-14101;Lo;0;L;;;;;N;;;;; +14102;EGYPTIAN HIEROGLYPH-14102;Lo;0;L;;;;;N;;;;; +14103;EGYPTIAN HIEROGLYPH-14103;Lo;0;L;;;;;N;;;;; +14104;EGYPTIAN HIEROGLYPH-14104;Lo;0;L;;;;;N;;;;; +14105;EGYPTIAN HIEROGLYPH-14105;Lo;0;L;;;;;N;;;;; +14106;EGYPTIAN HIEROGLYPH-14106;Lo;0;L;;;;;N;;;;; +14107;EGYPTIAN HIEROGLYPH-14107;Lo;0;L;;;;;N;;;;; +14108;EGYPTIAN HIEROGLYPH-14108;Lo;0;L;;;;;N;;;;; +14109;EGYPTIAN HIEROGLYPH-14109;Lo;0;L;;;;;N;;;;; +1410A;EGYPTIAN HIEROGLYPH-1410A;Lo;0;L;;;;;N;;;;; +1410B;EGYPTIAN HIEROGLYPH-1410B;Lo;0;L;;;;;N;;;;; +1410C;EGYPTIAN HIEROGLYPH-1410C;Lo;0;L;;;;;N;;;;; +1410D;EGYPTIAN HIEROGLYPH-1410D;Lo;0;L;;;;;N;;;;; +1410E;EGYPTIAN HIEROGLYPH-1410E;Lo;0;L;;;;;N;;;;; +1410F;EGYPTIAN HIEROGLYPH-1410F;Lo;0;L;;;;;N;;;;; +14110;EGYPTIAN HIEROGLYPH-14110;Lo;0;L;;;;;N;;;;; +14111;EGYPTIAN HIEROGLYPH-14111;Lo;0;L;;;;;N;;;;; +14112;EGYPTIAN HIEROGLYPH-14112;Lo;0;L;;;;;N;;;;; +14113;EGYPTIAN HIEROGLYPH-14113;Lo;0;L;;;;;N;;;;; +14114;EGYPTIAN HIEROGLYPH-14114;Lo;0;L;;;;;N;;;;; +14115;EGYPTIAN HIEROGLYPH-14115;Lo;0;L;;;;;N;;;;; +14116;EGYPTIAN HIEROGLYPH-14116;Lo;0;L;;;;;N;;;;; +14117;EGYPTIAN HIEROGLYPH-14117;Lo;0;L;;;;;N;;;;; +14118;EGYPTIAN HIEROGLYPH-14118;Lo;0;L;;;;;N;;;;; +14119;EGYPTIAN HIEROGLYPH-14119;Lo;0;L;;;;;N;;;;; +1411A;EGYPTIAN HIEROGLYPH-1411A;Lo;0;L;;;;;N;;;;; +1411B;EGYPTIAN HIEROGLYPH-1411B;Lo;0;L;;;;;N;;;;; +1411C;EGYPTIAN HIEROGLYPH-1411C;Lo;0;L;;;;;N;;;;; +1411D;EGYPTIAN HIEROGLYPH-1411D;Lo;0;L;;;;;N;;;;; +1411E;EGYPTIAN HIEROGLYPH-1411E;Lo;0;L;;;;;N;;;;; +1411F;EGYPTIAN HIEROGLYPH-1411F;Lo;0;L;;;;;N;;;;; +14120;EGYPTIAN HIEROGLYPH-14120;Lo;0;L;;;;;N;;;;; +14121;EGYPTIAN HIEROGLYPH-14121;Lo;0;L;;;;;N;;;;; +14122;EGYPTIAN HIEROGLYPH-14122;Lo;0;L;;;;;N;;;;; +14123;EGYPTIAN HIEROGLYPH-14123;Lo;0;L;;;;;N;;;;; +14124;EGYPTIAN HIEROGLYPH-14124;Lo;0;L;;;;;N;;;;; +14125;EGYPTIAN HIEROGLYPH-14125;Lo;0;L;;;;;N;;;;; +14126;EGYPTIAN HIEROGLYPH-14126;Lo;0;L;;;;;N;;;;; +14127;EGYPTIAN HIEROGLYPH-14127;Lo;0;L;;;;;N;;;;; +14128;EGYPTIAN HIEROGLYPH-14128;Lo;0;L;;;;;N;;;;; +14129;EGYPTIAN HIEROGLYPH-14129;Lo;0;L;;;;;N;;;;; +1412A;EGYPTIAN HIEROGLYPH-1412A;Lo;0;L;;;;;N;;;;; +1412B;EGYPTIAN HIEROGLYPH-1412B;Lo;0;L;;;;;N;;;;; +1412C;EGYPTIAN HIEROGLYPH-1412C;Lo;0;L;;;;;N;;;;; +1412D;EGYPTIAN HIEROGLYPH-1412D;Lo;0;L;;;;;N;;;;; +1412E;EGYPTIAN HIEROGLYPH-1412E;Lo;0;L;;;;;N;;;;; +1412F;EGYPTIAN HIEROGLYPH-1412F;Lo;0;L;;;;;N;;;;; +14130;EGYPTIAN HIEROGLYPH-14130;Lo;0;L;;;;;N;;;;; +14131;EGYPTIAN HIEROGLYPH-14131;Lo;0;L;;;;;N;;;;; +14132;EGYPTIAN HIEROGLYPH-14132;Lo;0;L;;;;;N;;;;; +14133;EGYPTIAN HIEROGLYPH-14133;Lo;0;L;;;;;N;;;;; +14134;EGYPTIAN HIEROGLYPH-14134;Lo;0;L;;;;;N;;;;; +14135;EGYPTIAN HIEROGLYPH-14135;Lo;0;L;;;;;N;;;;; +14136;EGYPTIAN HIEROGLYPH-14136;Lo;0;L;;;;;N;;;;; +14137;EGYPTIAN HIEROGLYPH-14137;Lo;0;L;;;;;N;;;;; +14138;EGYPTIAN HIEROGLYPH-14138;Lo;0;L;;;;;N;;;;; +14139;EGYPTIAN HIEROGLYPH-14139;Lo;0;L;;;;;N;;;;; +1413A;EGYPTIAN HIEROGLYPH-1413A;Lo;0;L;;;;;N;;;;; +1413B;EGYPTIAN HIEROGLYPH-1413B;Lo;0;L;;;;;N;;;;; +1413C;EGYPTIAN HIEROGLYPH-1413C;Lo;0;L;;;;;N;;;;; +1413D;EGYPTIAN HIEROGLYPH-1413D;Lo;0;L;;;;;N;;;;; +1413E;EGYPTIAN HIEROGLYPH-1413E;Lo;0;L;;;;;N;;;;; +1413F;EGYPTIAN HIEROGLYPH-1413F;Lo;0;L;;;;;N;;;;; +14140;EGYPTIAN HIEROGLYPH-14140;Lo;0;L;;;;;N;;;;; +14141;EGYPTIAN HIEROGLYPH-14141;Lo;0;L;;;;;N;;;;; +14142;EGYPTIAN HIEROGLYPH-14142;Lo;0;L;;;;;N;;;;; +14143;EGYPTIAN HIEROGLYPH-14143;Lo;0;L;;;;;N;;;;; +14144;EGYPTIAN HIEROGLYPH-14144;Lo;0;L;;;;;N;;;;; +14145;EGYPTIAN HIEROGLYPH-14145;Lo;0;L;;;;;N;;;;; +14146;EGYPTIAN HIEROGLYPH-14146;Lo;0;L;;;;;N;;;;; +14147;EGYPTIAN HIEROGLYPH-14147;Lo;0;L;;;;;N;;;;; +14148;EGYPTIAN HIEROGLYPH-14148;Lo;0;L;;;;;N;;;;; +14149;EGYPTIAN HIEROGLYPH-14149;Lo;0;L;;;;;N;;;;; +1414A;EGYPTIAN HIEROGLYPH-1414A;Lo;0;L;;;;;N;;;;; +1414B;EGYPTIAN HIEROGLYPH-1414B;Lo;0;L;;;;;N;;;;; +1414C;EGYPTIAN HIEROGLYPH-1414C;Lo;0;L;;;;;N;;;;; +1414D;EGYPTIAN HIEROGLYPH-1414D;Lo;0;L;;;;;N;;;;; +1414E;EGYPTIAN HIEROGLYPH-1414E;Lo;0;L;;;;;N;;;;; +1414F;EGYPTIAN HIEROGLYPH-1414F;Lo;0;L;;;;;N;;;;; +14150;EGYPTIAN HIEROGLYPH-14150;Lo;0;L;;;;;N;;;;; +14151;EGYPTIAN HIEROGLYPH-14151;Lo;0;L;;;;;N;;;;; +14152;EGYPTIAN HIEROGLYPH-14152;Lo;0;L;;;;;N;;;;; +14153;EGYPTIAN HIEROGLYPH-14153;Lo;0;L;;;;;N;;;;; +14154;EGYPTIAN HIEROGLYPH-14154;Lo;0;L;;;;;N;;;;; +14155;EGYPTIAN HIEROGLYPH-14155;Lo;0;L;;;;;N;;;;; +14156;EGYPTIAN HIEROGLYPH-14156;Lo;0;L;;;;;N;;;;; +14157;EGYPTIAN HIEROGLYPH-14157;Lo;0;L;;;;;N;;;;; +14158;EGYPTIAN HIEROGLYPH-14158;Lo;0;L;;;;;N;;;;; +14159;EGYPTIAN HIEROGLYPH-14159;Lo;0;L;;;;;N;;;;; +1415A;EGYPTIAN HIEROGLYPH-1415A;Lo;0;L;;;;;N;;;;; +1415B;EGYPTIAN HIEROGLYPH-1415B;Lo;0;L;;;;;N;;;;; +1415C;EGYPTIAN HIEROGLYPH-1415C;Lo;0;L;;;;;N;;;;; +1415D;EGYPTIAN HIEROGLYPH-1415D;Lo;0;L;;;;;N;;;;; +1415E;EGYPTIAN HIEROGLYPH-1415E;Lo;0;L;;;;;N;;;;; +1415F;EGYPTIAN HIEROGLYPH-1415F;Lo;0;L;;;;;N;;;;; +14160;EGYPTIAN HIEROGLYPH-14160;Lo;0;L;;;;;N;;;;; +14161;EGYPTIAN HIEROGLYPH-14161;Lo;0;L;;;;;N;;;;; +14162;EGYPTIAN HIEROGLYPH-14162;Lo;0;L;;;;;N;;;;; +14163;EGYPTIAN HIEROGLYPH-14163;Lo;0;L;;;;;N;;;;; +14164;EGYPTIAN HIEROGLYPH-14164;Lo;0;L;;;;;N;;;;; +14165;EGYPTIAN HIEROGLYPH-14165;Lo;0;L;;;;;N;;;;; +14166;EGYPTIAN HIEROGLYPH-14166;Lo;0;L;;;;;N;;;;; +14167;EGYPTIAN HIEROGLYPH-14167;Lo;0;L;;;;;N;;;;; +14168;EGYPTIAN HIEROGLYPH-14168;Lo;0;L;;;;;N;;;;; +14169;EGYPTIAN HIEROGLYPH-14169;Lo;0;L;;;;;N;;;;; +1416A;EGYPTIAN HIEROGLYPH-1416A;Lo;0;L;;;;;N;;;;; +1416B;EGYPTIAN HIEROGLYPH-1416B;Lo;0;L;;;;;N;;;;; +1416C;EGYPTIAN HIEROGLYPH-1416C;Lo;0;L;;;;;N;;;;; +1416D;EGYPTIAN HIEROGLYPH-1416D;Lo;0;L;;;;;N;;;;; +1416E;EGYPTIAN HIEROGLYPH-1416E;Lo;0;L;;;;;N;;;;; +1416F;EGYPTIAN HIEROGLYPH-1416F;Lo;0;L;;;;;N;;;;; +14170;EGYPTIAN HIEROGLYPH-14170;Lo;0;L;;;;;N;;;;; +14171;EGYPTIAN HIEROGLYPH-14171;Lo;0;L;;;;;N;;;;; +14172;EGYPTIAN HIEROGLYPH-14172;Lo;0;L;;;;;N;;;;; +14173;EGYPTIAN HIEROGLYPH-14173;Lo;0;L;;;;;N;;;;; +14174;EGYPTIAN HIEROGLYPH-14174;Lo;0;L;;;;;N;;;;; +14175;EGYPTIAN HIEROGLYPH-14175;Lo;0;L;;;;;N;;;;; +14176;EGYPTIAN HIEROGLYPH-14176;Lo;0;L;;;;;N;;;;; +14177;EGYPTIAN HIEROGLYPH-14177;Lo;0;L;;;;;N;;;;; +14178;EGYPTIAN HIEROGLYPH-14178;Lo;0;L;;;;;N;;;;; +14179;EGYPTIAN HIEROGLYPH-14179;Lo;0;L;;;;;N;;;;; +1417A;EGYPTIAN HIEROGLYPH-1417A;Lo;0;L;;;;;N;;;;; +1417B;EGYPTIAN HIEROGLYPH-1417B;Lo;0;L;;;;;N;;;;; +1417C;EGYPTIAN HIEROGLYPH-1417C;Lo;0;L;;;;;N;;;;; +1417D;EGYPTIAN HIEROGLYPH-1417D;Lo;0;L;;;;;N;;;;; +1417E;EGYPTIAN HIEROGLYPH-1417E;Lo;0;L;;;;;N;;;;; +1417F;EGYPTIAN HIEROGLYPH-1417F;Lo;0;L;;;;;N;;;;; +14180;EGYPTIAN HIEROGLYPH-14180;Lo;0;L;;;;;N;;;;; +14181;EGYPTIAN HIEROGLYPH-14181;Lo;0;L;;;;;N;;;;; +14182;EGYPTIAN HIEROGLYPH-14182;Lo;0;L;;;;;N;;;;; +14183;EGYPTIAN HIEROGLYPH-14183;Lo;0;L;;;;;N;;;;; +14184;EGYPTIAN HIEROGLYPH-14184;Lo;0;L;;;;;N;;;;; +14185;EGYPTIAN HIEROGLYPH-14185;Lo;0;L;;;;;N;;;;; +14186;EGYPTIAN HIEROGLYPH-14186;Lo;0;L;;;;;N;;;;; +14187;EGYPTIAN HIEROGLYPH-14187;Lo;0;L;;;;;N;;;;; +14188;EGYPTIAN HIEROGLYPH-14188;Lo;0;L;;;;;N;;;;; +14189;EGYPTIAN HIEROGLYPH-14189;Lo;0;L;;;;;N;;;;; +1418A;EGYPTIAN HIEROGLYPH-1418A;Lo;0;L;;;;;N;;;;; +1418B;EGYPTIAN HIEROGLYPH-1418B;Lo;0;L;;;;;N;;;;; +1418C;EGYPTIAN HIEROGLYPH-1418C;Lo;0;L;;;;;N;;;;; +1418D;EGYPTIAN HIEROGLYPH-1418D;Lo;0;L;;;;;N;;;;; +1418E;EGYPTIAN HIEROGLYPH-1418E;Lo;0;L;;;;;N;;;;; +1418F;EGYPTIAN HIEROGLYPH-1418F;Lo;0;L;;;;;N;;;;; +14190;EGYPTIAN HIEROGLYPH-14190;Lo;0;L;;;;;N;;;;; +14191;EGYPTIAN HIEROGLYPH-14191;Lo;0;L;;;;;N;;;;; +14192;EGYPTIAN HIEROGLYPH-14192;Lo;0;L;;;;;N;;;;; +14193;EGYPTIAN HIEROGLYPH-14193;Lo;0;L;;;;;N;;;;; +14194;EGYPTIAN HIEROGLYPH-14194;Lo;0;L;;;;;N;;;;; +14195;EGYPTIAN HIEROGLYPH-14195;Lo;0;L;;;;;N;;;;; +14196;EGYPTIAN HIEROGLYPH-14196;Lo;0;L;;;;;N;;;;; +14197;EGYPTIAN HIEROGLYPH-14197;Lo;0;L;;;;;N;;;;; +14198;EGYPTIAN HIEROGLYPH-14198;Lo;0;L;;;;;N;;;;; +14199;EGYPTIAN HIEROGLYPH-14199;Lo;0;L;;;;;N;;;;; +1419A;EGYPTIAN HIEROGLYPH-1419A;Lo;0;L;;;;;N;;;;; +1419B;EGYPTIAN HIEROGLYPH-1419B;Lo;0;L;;;;;N;;;;; +1419C;EGYPTIAN HIEROGLYPH-1419C;Lo;0;L;;;;;N;;;;; +1419D;EGYPTIAN HIEROGLYPH-1419D;Lo;0;L;;;;;N;;;;; +1419E;EGYPTIAN HIEROGLYPH-1419E;Lo;0;L;;;;;N;;;;; +1419F;EGYPTIAN HIEROGLYPH-1419F;Lo;0;L;;;;;N;;;;; +141A0;EGYPTIAN HIEROGLYPH-141A0;Lo;0;L;;;;;N;;;;; +141A1;EGYPTIAN HIEROGLYPH-141A1;Lo;0;L;;;;;N;;;;; +141A2;EGYPTIAN HIEROGLYPH-141A2;Lo;0;L;;;;;N;;;;; +141A3;EGYPTIAN HIEROGLYPH-141A3;Lo;0;L;;;;;N;;;;; +141A4;EGYPTIAN HIEROGLYPH-141A4;Lo;0;L;;;;;N;;;;; +141A5;EGYPTIAN HIEROGLYPH-141A5;Lo;0;L;;;;;N;;;;; +141A6;EGYPTIAN HIEROGLYPH-141A6;Lo;0;L;;;;;N;;;;; +141A7;EGYPTIAN HIEROGLYPH-141A7;Lo;0;L;;;;;N;;;;; +141A8;EGYPTIAN HIEROGLYPH-141A8;Lo;0;L;;;;;N;;;;; +141A9;EGYPTIAN HIEROGLYPH-141A9;Lo;0;L;;;;;N;;;;; +141AA;EGYPTIAN HIEROGLYPH-141AA;Lo;0;L;;;;;N;;;;; +141AB;EGYPTIAN HIEROGLYPH-141AB;Lo;0;L;;;;;N;;;;; +141AC;EGYPTIAN HIEROGLYPH-141AC;Lo;0;L;;;;;N;;;;; +141AD;EGYPTIAN HIEROGLYPH-141AD;Lo;0;L;;;;;N;;;;; +141AE;EGYPTIAN HIEROGLYPH-141AE;Lo;0;L;;;;;N;;;;; +141AF;EGYPTIAN HIEROGLYPH-141AF;Lo;0;L;;;;;N;;;;; +141B0;EGYPTIAN HIEROGLYPH-141B0;Lo;0;L;;;;;N;;;;; +141B1;EGYPTIAN HIEROGLYPH-141B1;Lo;0;L;;;;;N;;;;; +141B2;EGYPTIAN HIEROGLYPH-141B2;Lo;0;L;;;;;N;;;;; +141B3;EGYPTIAN HIEROGLYPH-141B3;Lo;0;L;;;;;N;;;;; +141B4;EGYPTIAN HIEROGLYPH-141B4;Lo;0;L;;;;;N;;;;; +141B5;EGYPTIAN HIEROGLYPH-141B5;Lo;0;L;;;;;N;;;;; +141B6;EGYPTIAN HIEROGLYPH-141B6;Lo;0;L;;;;;N;;;;; +141B7;EGYPTIAN HIEROGLYPH-141B7;Lo;0;L;;;;;N;;;;; +141B8;EGYPTIAN HIEROGLYPH-141B8;Lo;0;L;;;;;N;;;;; +141B9;EGYPTIAN HIEROGLYPH-141B9;Lo;0;L;;;;;N;;;;; +141BA;EGYPTIAN HIEROGLYPH-141BA;Lo;0;L;;;;;N;;;;; +141BB;EGYPTIAN HIEROGLYPH-141BB;Lo;0;L;;;;;N;;;;; +141BC;EGYPTIAN HIEROGLYPH-141BC;Lo;0;L;;;;;N;;;;; +141BD;EGYPTIAN HIEROGLYPH-141BD;Lo;0;L;;;;;N;;;;; +141BE;EGYPTIAN HIEROGLYPH-141BE;Lo;0;L;;;;;N;;;;; +141BF;EGYPTIAN HIEROGLYPH-141BF;Lo;0;L;;;;;N;;;;; +141C0;EGYPTIAN HIEROGLYPH-141C0;Lo;0;L;;;;;N;;;;; +141C1;EGYPTIAN HIEROGLYPH-141C1;Lo;0;L;;;;;N;;;;; +141C2;EGYPTIAN HIEROGLYPH-141C2;Lo;0;L;;;;;N;;;;; +141C3;EGYPTIAN HIEROGLYPH-141C3;Lo;0;L;;;;;N;;;;; +141C4;EGYPTIAN HIEROGLYPH-141C4;Lo;0;L;;;;;N;;;;; +141C5;EGYPTIAN HIEROGLYPH-141C5;Lo;0;L;;;;;N;;;;; +141C6;EGYPTIAN HIEROGLYPH-141C6;Lo;0;L;;;;;N;;;;; +141C7;EGYPTIAN HIEROGLYPH-141C7;Lo;0;L;;;;;N;;;;; +141C8;EGYPTIAN HIEROGLYPH-141C8;Lo;0;L;;;;;N;;;;; +141C9;EGYPTIAN HIEROGLYPH-141C9;Lo;0;L;;;;;N;;;;; +141CA;EGYPTIAN HIEROGLYPH-141CA;Lo;0;L;;;;;N;;;;; +141CB;EGYPTIAN HIEROGLYPH-141CB;Lo;0;L;;;;;N;;;;; +141CC;EGYPTIAN HIEROGLYPH-141CC;Lo;0;L;;;;;N;;;;; +141CD;EGYPTIAN HIEROGLYPH-141CD;Lo;0;L;;;;;N;;;;; +141CE;EGYPTIAN HIEROGLYPH-141CE;Lo;0;L;;;;;N;;;;; +141CF;EGYPTIAN HIEROGLYPH-141CF;Lo;0;L;;;;;N;;;;; +141D0;EGYPTIAN HIEROGLYPH-141D0;Lo;0;L;;;;;N;;;;; +141D1;EGYPTIAN HIEROGLYPH-141D1;Lo;0;L;;;;;N;;;;; +141D2;EGYPTIAN HIEROGLYPH-141D2;Lo;0;L;;;;;N;;;;; +141D3;EGYPTIAN HIEROGLYPH-141D3;Lo;0;L;;;;;N;;;;; +141D4;EGYPTIAN HIEROGLYPH-141D4;Lo;0;L;;;;;N;;;;; +141D5;EGYPTIAN HIEROGLYPH-141D5;Lo;0;L;;;;;N;;;;; +141D6;EGYPTIAN HIEROGLYPH-141D6;Lo;0;L;;;;;N;;;;; +141D7;EGYPTIAN HIEROGLYPH-141D7;Lo;0;L;;;;;N;;;;; +141D8;EGYPTIAN HIEROGLYPH-141D8;Lo;0;L;;;;;N;;;;; +141D9;EGYPTIAN HIEROGLYPH-141D9;Lo;0;L;;;;;N;;;;; +141DA;EGYPTIAN HIEROGLYPH-141DA;Lo;0;L;;;;;N;;;;; +141DB;EGYPTIAN HIEROGLYPH-141DB;Lo;0;L;;;;;N;;;;; +141DC;EGYPTIAN HIEROGLYPH-141DC;Lo;0;L;;;;;N;;;;; +141DD;EGYPTIAN HIEROGLYPH-141DD;Lo;0;L;;;;;N;;;;; +141DE;EGYPTIAN HIEROGLYPH-141DE;Lo;0;L;;;;;N;;;;; +141DF;EGYPTIAN HIEROGLYPH-141DF;Lo;0;L;;;;;N;;;;; +141E0;EGYPTIAN HIEROGLYPH-141E0;Lo;0;L;;;;;N;;;;; +141E1;EGYPTIAN HIEROGLYPH-141E1;Lo;0;L;;;;;N;;;;; +141E2;EGYPTIAN HIEROGLYPH-141E2;Lo;0;L;;;;;N;;;;; +141E3;EGYPTIAN HIEROGLYPH-141E3;Lo;0;L;;;;;N;;;;; +141E4;EGYPTIAN HIEROGLYPH-141E4;Lo;0;L;;;;;N;;;;; +141E5;EGYPTIAN HIEROGLYPH-141E5;Lo;0;L;;;;;N;;;;; +141E6;EGYPTIAN HIEROGLYPH-141E6;Lo;0;L;;;;;N;;;;; +141E7;EGYPTIAN HIEROGLYPH-141E7;Lo;0;L;;;;;N;;;;; +141E8;EGYPTIAN HIEROGLYPH-141E8;Lo;0;L;;;;;N;;;;; +141E9;EGYPTIAN HIEROGLYPH-141E9;Lo;0;L;;;;;N;;;;; +141EA;EGYPTIAN HIEROGLYPH-141EA;Lo;0;L;;;;;N;;;;; +141EB;EGYPTIAN HIEROGLYPH-141EB;Lo;0;L;;;;;N;;;;; +141EC;EGYPTIAN HIEROGLYPH-141EC;Lo;0;L;;;;;N;;;;; +141ED;EGYPTIAN HIEROGLYPH-141ED;Lo;0;L;;;;;N;;;;; +141EE;EGYPTIAN HIEROGLYPH-141EE;Lo;0;L;;;;;N;;;;; +141EF;EGYPTIAN HIEROGLYPH-141EF;Lo;0;L;;;;;N;;;;; +141F0;EGYPTIAN HIEROGLYPH-141F0;Lo;0;L;;;;;N;;;;; +141F1;EGYPTIAN HIEROGLYPH-141F1;Lo;0;L;;;;;N;;;;; +141F2;EGYPTIAN HIEROGLYPH-141F2;Lo;0;L;;;;;N;;;;; +141F3;EGYPTIAN HIEROGLYPH-141F3;Lo;0;L;;;;;N;;;;; +141F4;EGYPTIAN HIEROGLYPH-141F4;Lo;0;L;;;;;N;;;;; +141F5;EGYPTIAN HIEROGLYPH-141F5;Lo;0;L;;;;;N;;;;; +141F6;EGYPTIAN HIEROGLYPH-141F6;Lo;0;L;;;;;N;;;;; +141F7;EGYPTIAN HIEROGLYPH-141F7;Lo;0;L;;;;;N;;;;; +141F8;EGYPTIAN HIEROGLYPH-141F8;Lo;0;L;;;;;N;;;;; +141F9;EGYPTIAN HIEROGLYPH-141F9;Lo;0;L;;;;;N;;;;; +141FA;EGYPTIAN HIEROGLYPH-141FA;Lo;0;L;;;;;N;;;;; +141FB;EGYPTIAN HIEROGLYPH-141FB;Lo;0;L;;;;;N;;;;; +141FC;EGYPTIAN HIEROGLYPH-141FC;Lo;0;L;;;;;N;;;;; +141FD;EGYPTIAN HIEROGLYPH-141FD;Lo;0;L;;;;;N;;;;; +141FE;EGYPTIAN HIEROGLYPH-141FE;Lo;0;L;;;;;N;;;;; +141FF;EGYPTIAN HIEROGLYPH-141FF;Lo;0;L;;;;;N;;;;; +14200;EGYPTIAN HIEROGLYPH-14200;Lo;0;L;;;;;N;;;;; +14201;EGYPTIAN HIEROGLYPH-14201;Lo;0;L;;;;;N;;;;; +14202;EGYPTIAN HIEROGLYPH-14202;Lo;0;L;;;;;N;;;;; +14203;EGYPTIAN HIEROGLYPH-14203;Lo;0;L;;;;;N;;;;; +14204;EGYPTIAN HIEROGLYPH-14204;Lo;0;L;;;;;N;;;;; +14205;EGYPTIAN HIEROGLYPH-14205;Lo;0;L;;;;;N;;;;; +14206;EGYPTIAN HIEROGLYPH-14206;Lo;0;L;;;;;N;;;;; +14207;EGYPTIAN HIEROGLYPH-14207;Lo;0;L;;;;;N;;;;; +14208;EGYPTIAN HIEROGLYPH-14208;Lo;0;L;;;;;N;;;;; +14209;EGYPTIAN HIEROGLYPH-14209;Lo;0;L;;;;;N;;;;; +1420A;EGYPTIAN HIEROGLYPH-1420A;Lo;0;L;;;;;N;;;;; +1420B;EGYPTIAN HIEROGLYPH-1420B;Lo;0;L;;;;;N;;;;; +1420C;EGYPTIAN HIEROGLYPH-1420C;Lo;0;L;;;;;N;;;;; +1420D;EGYPTIAN HIEROGLYPH-1420D;Lo;0;L;;;;;N;;;;; +1420E;EGYPTIAN HIEROGLYPH-1420E;Lo;0;L;;;;;N;;;;; +1420F;EGYPTIAN HIEROGLYPH-1420F;Lo;0;L;;;;;N;;;;; +14210;EGYPTIAN HIEROGLYPH-14210;Lo;0;L;;;;;N;;;;; +14211;EGYPTIAN HIEROGLYPH-14211;Lo;0;L;;;;;N;;;;; +14212;EGYPTIAN HIEROGLYPH-14212;Lo;0;L;;;;;N;;;;; +14213;EGYPTIAN HIEROGLYPH-14213;Lo;0;L;;;;;N;;;;; +14214;EGYPTIAN HIEROGLYPH-14214;Lo;0;L;;;;;N;;;;; +14215;EGYPTIAN HIEROGLYPH-14215;Lo;0;L;;;;;N;;;;; +14216;EGYPTIAN HIEROGLYPH-14216;Lo;0;L;;;;;N;;;;; +14217;EGYPTIAN HIEROGLYPH-14217;Lo;0;L;;;;;N;;;;; +14218;EGYPTIAN HIEROGLYPH-14218;Lo;0;L;;;;;N;;;;; +14219;EGYPTIAN HIEROGLYPH-14219;Lo;0;L;;;;;N;;;;; +1421A;EGYPTIAN HIEROGLYPH-1421A;Lo;0;L;;;;;N;;;;; +1421B;EGYPTIAN HIEROGLYPH-1421B;Lo;0;L;;;;;N;;;;; +1421C;EGYPTIAN HIEROGLYPH-1421C;Lo;0;L;;;;;N;;;;; +1421D;EGYPTIAN HIEROGLYPH-1421D;Lo;0;L;;;;;N;;;;; +1421E;EGYPTIAN HIEROGLYPH-1421E;Lo;0;L;;;;;N;;;;; +1421F;EGYPTIAN HIEROGLYPH-1421F;Lo;0;L;;;;;N;;;;; +14220;EGYPTIAN HIEROGLYPH-14220;Lo;0;L;;;;;N;;;;; +14221;EGYPTIAN HIEROGLYPH-14221;Lo;0;L;;;;;N;;;;; +14222;EGYPTIAN HIEROGLYPH-14222;Lo;0;L;;;;;N;;;;; +14223;EGYPTIAN HIEROGLYPH-14223;Lo;0;L;;;;;N;;;;; +14224;EGYPTIAN HIEROGLYPH-14224;Lo;0;L;;;;;N;;;;; +14225;EGYPTIAN HIEROGLYPH-14225;Lo;0;L;;;;;N;;;;; +14226;EGYPTIAN HIEROGLYPH-14226;Lo;0;L;;;;;N;;;;; +14227;EGYPTIAN HIEROGLYPH-14227;Lo;0;L;;;;;N;;;;; +14228;EGYPTIAN HIEROGLYPH-14228;Lo;0;L;;;;;N;;;;; +14229;EGYPTIAN HIEROGLYPH-14229;Lo;0;L;;;;;N;;;;; +1422A;EGYPTIAN HIEROGLYPH-1422A;Lo;0;L;;;;;N;;;;; +1422B;EGYPTIAN HIEROGLYPH-1422B;Lo;0;L;;;;;N;;;;; +1422C;EGYPTIAN HIEROGLYPH-1422C;Lo;0;L;;;;;N;;;;; +1422D;EGYPTIAN HIEROGLYPH-1422D;Lo;0;L;;;;;N;;;;; +1422E;EGYPTIAN HIEROGLYPH-1422E;Lo;0;L;;;;;N;;;;; +1422F;EGYPTIAN HIEROGLYPH-1422F;Lo;0;L;;;;;N;;;;; +14230;EGYPTIAN HIEROGLYPH-14230;Lo;0;L;;;;;N;;;;; +14231;EGYPTIAN HIEROGLYPH-14231;Lo;0;L;;;;;N;;;;; +14232;EGYPTIAN HIEROGLYPH-14232;Lo;0;L;;;;;N;;;;; +14233;EGYPTIAN HIEROGLYPH-14233;Lo;0;L;;;;;N;;;;; +14234;EGYPTIAN HIEROGLYPH-14234;Lo;0;L;;;;;N;;;;; +14235;EGYPTIAN HIEROGLYPH-14235;Lo;0;L;;;;;N;;;;; +14236;EGYPTIAN HIEROGLYPH-14236;Lo;0;L;;;;;N;;;;; +14237;EGYPTIAN HIEROGLYPH-14237;Lo;0;L;;;;;N;;;;; +14238;EGYPTIAN HIEROGLYPH-14238;Lo;0;L;;;;;N;;;;; +14239;EGYPTIAN HIEROGLYPH-14239;Lo;0;L;;;;;N;;;;; +1423A;EGYPTIAN HIEROGLYPH-1423A;Lo;0;L;;;;;N;;;;; +1423B;EGYPTIAN HIEROGLYPH-1423B;Lo;0;L;;;;;N;;;;; +1423C;EGYPTIAN HIEROGLYPH-1423C;Lo;0;L;;;;;N;;;;; +1423D;EGYPTIAN HIEROGLYPH-1423D;Lo;0;L;;;;;N;;;;; +1423E;EGYPTIAN HIEROGLYPH-1423E;Lo;0;L;;;;;N;;;;; +1423F;EGYPTIAN HIEROGLYPH-1423F;Lo;0;L;;;;;N;;;;; +14240;EGYPTIAN HIEROGLYPH-14240;Lo;0;L;;;;;N;;;;; +14241;EGYPTIAN HIEROGLYPH-14241;Lo;0;L;;;;;N;;;;; +14242;EGYPTIAN HIEROGLYPH-14242;Lo;0;L;;;;;N;;;;; +14243;EGYPTIAN HIEROGLYPH-14243;Lo;0;L;;;;;N;;;;; +14244;EGYPTIAN HIEROGLYPH-14244;Lo;0;L;;;;;N;;;;; +14245;EGYPTIAN HIEROGLYPH-14245;Lo;0;L;;;;;N;;;;; +14246;EGYPTIAN HIEROGLYPH-14246;Lo;0;L;;;;;N;;;;; +14247;EGYPTIAN HIEROGLYPH-14247;Lo;0;L;;;;;N;;;;; +14248;EGYPTIAN HIEROGLYPH-14248;Lo;0;L;;;;;N;;;;; +14249;EGYPTIAN HIEROGLYPH-14249;Lo;0;L;;;;;N;;;;; +1424A;EGYPTIAN HIEROGLYPH-1424A;Lo;0;L;;;;;N;;;;; +1424B;EGYPTIAN HIEROGLYPH-1424B;Lo;0;L;;;;;N;;;;; +1424C;EGYPTIAN HIEROGLYPH-1424C;Lo;0;L;;;;;N;;;;; +1424D;EGYPTIAN HIEROGLYPH-1424D;Lo;0;L;;;;;N;;;;; +1424E;EGYPTIAN HIEROGLYPH-1424E;Lo;0;L;;;;;N;;;;; +1424F;EGYPTIAN HIEROGLYPH-1424F;Lo;0;L;;;;;N;;;;; +14250;EGYPTIAN HIEROGLYPH-14250;Lo;0;L;;;;;N;;;;; +14251;EGYPTIAN HIEROGLYPH-14251;Lo;0;L;;;;;N;;;;; +14252;EGYPTIAN HIEROGLYPH-14252;Lo;0;L;;;;;N;;;;; +14253;EGYPTIAN HIEROGLYPH-14253;Lo;0;L;;;;;N;;;;; +14254;EGYPTIAN HIEROGLYPH-14254;Lo;0;L;;;;;N;;;;; +14255;EGYPTIAN HIEROGLYPH-14255;Lo;0;L;;;;;N;;;;; +14256;EGYPTIAN HIEROGLYPH-14256;Lo;0;L;;;;;N;;;;; +14257;EGYPTIAN HIEROGLYPH-14257;Lo;0;L;;;;;N;;;;; +14258;EGYPTIAN HIEROGLYPH-14258;Lo;0;L;;;;;N;;;;; +14259;EGYPTIAN HIEROGLYPH-14259;Lo;0;L;;;;;N;;;;; +1425A;EGYPTIAN HIEROGLYPH-1425A;Lo;0;L;;;;;N;;;;; +1425B;EGYPTIAN HIEROGLYPH-1425B;Lo;0;L;;;;;N;;;;; +1425C;EGYPTIAN HIEROGLYPH-1425C;Lo;0;L;;;;;N;;;;; +1425D;EGYPTIAN HIEROGLYPH-1425D;Lo;0;L;;;;;N;;;;; +1425E;EGYPTIAN HIEROGLYPH-1425E;Lo;0;L;;;;;N;;;;; +1425F;EGYPTIAN HIEROGLYPH-1425F;Lo;0;L;;;;;N;;;;; +14260;EGYPTIAN HIEROGLYPH-14260;Lo;0;L;;;;;N;;;;; +14261;EGYPTIAN HIEROGLYPH-14261;Lo;0;L;;;;;N;;;;; +14262;EGYPTIAN HIEROGLYPH-14262;Lo;0;L;;;;;N;;;;; +14263;EGYPTIAN HIEROGLYPH-14263;Lo;0;L;;;;;N;;;;; +14264;EGYPTIAN HIEROGLYPH-14264;Lo;0;L;;;;;N;;;;; +14265;EGYPTIAN HIEROGLYPH-14265;Lo;0;L;;;;;N;;;;; +14266;EGYPTIAN HIEROGLYPH-14266;Lo;0;L;;;;;N;;;;; +14267;EGYPTIAN HIEROGLYPH-14267;Lo;0;L;;;;;N;;;;; +14268;EGYPTIAN HIEROGLYPH-14268;Lo;0;L;;;;;N;;;;; +14269;EGYPTIAN HIEROGLYPH-14269;Lo;0;L;;;;;N;;;;; +1426A;EGYPTIAN HIEROGLYPH-1426A;Lo;0;L;;;;;N;;;;; +1426B;EGYPTIAN HIEROGLYPH-1426B;Lo;0;L;;;;;N;;;;; +1426C;EGYPTIAN HIEROGLYPH-1426C;Lo;0;L;;;;;N;;;;; +1426D;EGYPTIAN HIEROGLYPH-1426D;Lo;0;L;;;;;N;;;;; +1426E;EGYPTIAN HIEROGLYPH-1426E;Lo;0;L;;;;;N;;;;; +1426F;EGYPTIAN HIEROGLYPH-1426F;Lo;0;L;;;;;N;;;;; +14270;EGYPTIAN HIEROGLYPH-14270;Lo;0;L;;;;;N;;;;; +14271;EGYPTIAN HIEROGLYPH-14271;Lo;0;L;;;;;N;;;;; +14272;EGYPTIAN HIEROGLYPH-14272;Lo;0;L;;;;;N;;;;; +14273;EGYPTIAN HIEROGLYPH-14273;Lo;0;L;;;;;N;;;;; +14274;EGYPTIAN HIEROGLYPH-14274;Lo;0;L;;;;;N;;;;; +14275;EGYPTIAN HIEROGLYPH-14275;Lo;0;L;;;;;N;;;;; +14276;EGYPTIAN HIEROGLYPH-14276;Lo;0;L;;;;;N;;;;; +14277;EGYPTIAN HIEROGLYPH-14277;Lo;0;L;;;;;N;;;;; +14278;EGYPTIAN HIEROGLYPH-14278;Lo;0;L;;;;;N;;;;; +14279;EGYPTIAN HIEROGLYPH-14279;Lo;0;L;;;;;N;;;;; +1427A;EGYPTIAN HIEROGLYPH-1427A;Lo;0;L;;;;;N;;;;; +1427B;EGYPTIAN HIEROGLYPH-1427B;Lo;0;L;;;;;N;;;;; +1427C;EGYPTIAN HIEROGLYPH-1427C;Lo;0;L;;;;;N;;;;; +1427D;EGYPTIAN HIEROGLYPH-1427D;Lo;0;L;;;;;N;;;;; +1427E;EGYPTIAN HIEROGLYPH-1427E;Lo;0;L;;;;;N;;;;; +1427F;EGYPTIAN HIEROGLYPH-1427F;Lo;0;L;;;;;N;;;;; +14280;EGYPTIAN HIEROGLYPH-14280;Lo;0;L;;;;;N;;;;; +14281;EGYPTIAN HIEROGLYPH-14281;Lo;0;L;;;;;N;;;;; +14282;EGYPTIAN HIEROGLYPH-14282;Lo;0;L;;;;;N;;;;; +14283;EGYPTIAN HIEROGLYPH-14283;Lo;0;L;;;;;N;;;;; +14284;EGYPTIAN HIEROGLYPH-14284;Lo;0;L;;;;;N;;;;; +14285;EGYPTIAN HIEROGLYPH-14285;Lo;0;L;;;;;N;;;;; +14286;EGYPTIAN HIEROGLYPH-14286;Lo;0;L;;;;;N;;;;; +14287;EGYPTIAN HIEROGLYPH-14287;Lo;0;L;;;;;N;;;;; +14288;EGYPTIAN HIEROGLYPH-14288;Lo;0;L;;;;;N;;;;; +14289;EGYPTIAN HIEROGLYPH-14289;Lo;0;L;;;;;N;;;;; +1428A;EGYPTIAN HIEROGLYPH-1428A;Lo;0;L;;;;;N;;;;; +1428B;EGYPTIAN HIEROGLYPH-1428B;Lo;0;L;;;;;N;;;;; +1428C;EGYPTIAN HIEROGLYPH-1428C;Lo;0;L;;;;;N;;;;; +1428D;EGYPTIAN HIEROGLYPH-1428D;Lo;0;L;;;;;N;;;;; +1428E;EGYPTIAN HIEROGLYPH-1428E;Lo;0;L;;;;;N;;;;; +1428F;EGYPTIAN HIEROGLYPH-1428F;Lo;0;L;;;;;N;;;;; +14290;EGYPTIAN HIEROGLYPH-14290;Lo;0;L;;;;;N;;;;; +14291;EGYPTIAN HIEROGLYPH-14291;Lo;0;L;;;;;N;;;;; +14292;EGYPTIAN HIEROGLYPH-14292;Lo;0;L;;;;;N;;;;; +14293;EGYPTIAN HIEROGLYPH-14293;Lo;0;L;;;;;N;;;;; +14294;EGYPTIAN HIEROGLYPH-14294;Lo;0;L;;;;;N;;;;; +14295;EGYPTIAN HIEROGLYPH-14295;Lo;0;L;;;;;N;;;;; +14296;EGYPTIAN HIEROGLYPH-14296;Lo;0;L;;;;;N;;;;; +14297;EGYPTIAN HIEROGLYPH-14297;Lo;0;L;;;;;N;;;;; +14298;EGYPTIAN HIEROGLYPH-14298;Lo;0;L;;;;;N;;;;; +14299;EGYPTIAN HIEROGLYPH-14299;Lo;0;L;;;;;N;;;;; +1429A;EGYPTIAN HIEROGLYPH-1429A;Lo;0;L;;;;;N;;;;; +1429B;EGYPTIAN HIEROGLYPH-1429B;Lo;0;L;;;;;N;;;;; +1429C;EGYPTIAN HIEROGLYPH-1429C;Lo;0;L;;;;;N;;;;; +1429D;EGYPTIAN HIEROGLYPH-1429D;Lo;0;L;;;;;N;;;;; +1429E;EGYPTIAN HIEROGLYPH-1429E;Lo;0;L;;;;;N;;;;; +1429F;EGYPTIAN HIEROGLYPH-1429F;Lo;0;L;;;;;N;;;;; +142A0;EGYPTIAN HIEROGLYPH-142A0;Lo;0;L;;;;;N;;;;; +142A1;EGYPTIAN HIEROGLYPH-142A1;Lo;0;L;;;;;N;;;;; +142A2;EGYPTIAN HIEROGLYPH-142A2;Lo;0;L;;;;;N;;;;; +142A3;EGYPTIAN HIEROGLYPH-142A3;Lo;0;L;;;;;N;;;;; +142A4;EGYPTIAN HIEROGLYPH-142A4;Lo;0;L;;;;;N;;;;; +142A5;EGYPTIAN HIEROGLYPH-142A5;Lo;0;L;;;;;N;;;;; +142A6;EGYPTIAN HIEROGLYPH-142A6;Lo;0;L;;;;;N;;;;; +142A7;EGYPTIAN HIEROGLYPH-142A7;Lo;0;L;;;;;N;;;;; +142A8;EGYPTIAN HIEROGLYPH-142A8;Lo;0;L;;;;;N;;;;; +142A9;EGYPTIAN HIEROGLYPH-142A9;Lo;0;L;;;;;N;;;;; +142AA;EGYPTIAN HIEROGLYPH-142AA;Lo;0;L;;;;;N;;;;; +142AB;EGYPTIAN HIEROGLYPH-142AB;Lo;0;L;;;;;N;;;;; +142AC;EGYPTIAN HIEROGLYPH-142AC;Lo;0;L;;;;;N;;;;; +142AD;EGYPTIAN HIEROGLYPH-142AD;Lo;0;L;;;;;N;;;;; +142AE;EGYPTIAN HIEROGLYPH-142AE;Lo;0;L;;;;;N;;;;; +142AF;EGYPTIAN HIEROGLYPH-142AF;Lo;0;L;;;;;N;;;;; +142B0;EGYPTIAN HIEROGLYPH-142B0;Lo;0;L;;;;;N;;;;; +142B1;EGYPTIAN HIEROGLYPH-142B1;Lo;0;L;;;;;N;;;;; +142B2;EGYPTIAN HIEROGLYPH-142B2;Lo;0;L;;;;;N;;;;; +142B3;EGYPTIAN HIEROGLYPH-142B3;Lo;0;L;;;;;N;;;;; +142B4;EGYPTIAN HIEROGLYPH-142B4;Lo;0;L;;;;;N;;;;; +142B5;EGYPTIAN HIEROGLYPH-142B5;Lo;0;L;;;;;N;;;;; +142B6;EGYPTIAN HIEROGLYPH-142B6;Lo;0;L;;;;;N;;;;; +142B7;EGYPTIAN HIEROGLYPH-142B7;Lo;0;L;;;;;N;;;;; +142B8;EGYPTIAN HIEROGLYPH-142B8;Lo;0;L;;;;;N;;;;; +142B9;EGYPTIAN HIEROGLYPH-142B9;Lo;0;L;;;;;N;;;;; +142BA;EGYPTIAN HIEROGLYPH-142BA;Lo;0;L;;;;;N;;;;; +142BB;EGYPTIAN HIEROGLYPH-142BB;Lo;0;L;;;;;N;;;;; +142BC;EGYPTIAN HIEROGLYPH-142BC;Lo;0;L;;;;;N;;;;; +142BD;EGYPTIAN HIEROGLYPH-142BD;Lo;0;L;;;;;N;;;;; +142BE;EGYPTIAN HIEROGLYPH-142BE;Lo;0;L;;;;;N;;;;; +142BF;EGYPTIAN HIEROGLYPH-142BF;Lo;0;L;;;;;N;;;;; +142C0;EGYPTIAN HIEROGLYPH-142C0;Lo;0;L;;;;;N;;;;; +142C1;EGYPTIAN HIEROGLYPH-142C1;Lo;0;L;;;;;N;;;;; +142C2;EGYPTIAN HIEROGLYPH-142C2;Lo;0;L;;;;;N;;;;; +142C3;EGYPTIAN HIEROGLYPH-142C3;Lo;0;L;;;;;N;;;;; +142C4;EGYPTIAN HIEROGLYPH-142C4;Lo;0;L;;;;;N;;;;; +142C5;EGYPTIAN HIEROGLYPH-142C5;Lo;0;L;;;;;N;;;;; +142C6;EGYPTIAN HIEROGLYPH-142C6;Lo;0;L;;;;;N;;;;; +142C7;EGYPTIAN HIEROGLYPH-142C7;Lo;0;L;;;;;N;;;;; +142C8;EGYPTIAN HIEROGLYPH-142C8;Lo;0;L;;;;;N;;;;; +142C9;EGYPTIAN HIEROGLYPH-142C9;Lo;0;L;;;;;N;;;;; +142CA;EGYPTIAN HIEROGLYPH-142CA;Lo;0;L;;;;;N;;;;; +142CB;EGYPTIAN HIEROGLYPH-142CB;Lo;0;L;;;;;N;;;;; +142CC;EGYPTIAN HIEROGLYPH-142CC;Lo;0;L;;;;;N;;;;; +142CD;EGYPTIAN HIEROGLYPH-142CD;Lo;0;L;;;;;N;;;;; +142CE;EGYPTIAN HIEROGLYPH-142CE;Lo;0;L;;;;;N;;;;; +142CF;EGYPTIAN HIEROGLYPH-142CF;Lo;0;L;;;;;N;;;;; +142D0;EGYPTIAN HIEROGLYPH-142D0;Lo;0;L;;;;;N;;;;; +142D1;EGYPTIAN HIEROGLYPH-142D1;Lo;0;L;;;;;N;;;;; +142D2;EGYPTIAN HIEROGLYPH-142D2;Lo;0;L;;;;;N;;;;; +142D3;EGYPTIAN HIEROGLYPH-142D3;Lo;0;L;;;;;N;;;;; +142D4;EGYPTIAN HIEROGLYPH-142D4;Lo;0;L;;;;;N;;;;; +142D5;EGYPTIAN HIEROGLYPH-142D5;Lo;0;L;;;;;N;;;;; +142D6;EGYPTIAN HIEROGLYPH-142D6;Lo;0;L;;;;;N;;;;; +142D7;EGYPTIAN HIEROGLYPH-142D7;Lo;0;L;;;;;N;;;;; +142D8;EGYPTIAN HIEROGLYPH-142D8;Lo;0;L;;;;;N;;;;; +142D9;EGYPTIAN HIEROGLYPH-142D9;Lo;0;L;;;;;N;;;;; +142DA;EGYPTIAN HIEROGLYPH-142DA;Lo;0;L;;;;;N;;;;; +142DB;EGYPTIAN HIEROGLYPH-142DB;Lo;0;L;;;;;N;;;;; +142DC;EGYPTIAN HIEROGLYPH-142DC;Lo;0;L;;;;;N;;;;; +142DD;EGYPTIAN HIEROGLYPH-142DD;Lo;0;L;;;;;N;;;;; +142DE;EGYPTIAN HIEROGLYPH-142DE;Lo;0;L;;;;;N;;;;; +142DF;EGYPTIAN HIEROGLYPH-142DF;Lo;0;L;;;;;N;;;;; +142E0;EGYPTIAN HIEROGLYPH-142E0;Lo;0;L;;;;;N;;;;; +142E1;EGYPTIAN HIEROGLYPH-142E1;Lo;0;L;;;;;N;;;;; +142E2;EGYPTIAN HIEROGLYPH-142E2;Lo;0;L;;;;;N;;;;; +142E3;EGYPTIAN HIEROGLYPH-142E3;Lo;0;L;;;;;N;;;;; +142E4;EGYPTIAN HIEROGLYPH-142E4;Lo;0;L;;;;;N;;;;; +142E5;EGYPTIAN HIEROGLYPH-142E5;Lo;0;L;;;;;N;;;;; +142E6;EGYPTIAN HIEROGLYPH-142E6;Lo;0;L;;;;;N;;;;; +142E7;EGYPTIAN HIEROGLYPH-142E7;Lo;0;L;;;;;N;;;;; +142E8;EGYPTIAN HIEROGLYPH-142E8;Lo;0;L;;;;;N;;;;; +142E9;EGYPTIAN HIEROGLYPH-142E9;Lo;0;L;;;;;N;;;;; +142EA;EGYPTIAN HIEROGLYPH-142EA;Lo;0;L;;;;;N;;;;; +142EB;EGYPTIAN HIEROGLYPH-142EB;Lo;0;L;;;;;N;;;;; +142EC;EGYPTIAN HIEROGLYPH-142EC;Lo;0;L;;;;;N;;;;; +142ED;EGYPTIAN HIEROGLYPH-142ED;Lo;0;L;;;;;N;;;;; +142EE;EGYPTIAN HIEROGLYPH-142EE;Lo;0;L;;;;;N;;;;; +142EF;EGYPTIAN HIEROGLYPH-142EF;Lo;0;L;;;;;N;;;;; +142F0;EGYPTIAN HIEROGLYPH-142F0;Lo;0;L;;;;;N;;;;; +142F1;EGYPTIAN HIEROGLYPH-142F1;Lo;0;L;;;;;N;;;;; +142F2;EGYPTIAN HIEROGLYPH-142F2;Lo;0;L;;;;;N;;;;; +142F3;EGYPTIAN HIEROGLYPH-142F3;Lo;0;L;;;;;N;;;;; +142F4;EGYPTIAN HIEROGLYPH-142F4;Lo;0;L;;;;;N;;;;; +142F5;EGYPTIAN HIEROGLYPH-142F5;Lo;0;L;;;;;N;;;;; +142F6;EGYPTIAN HIEROGLYPH-142F6;Lo;0;L;;;;;N;;;;; +142F7;EGYPTIAN HIEROGLYPH-142F7;Lo;0;L;;;;;N;;;;; +142F8;EGYPTIAN HIEROGLYPH-142F8;Lo;0;L;;;;;N;;;;; +142F9;EGYPTIAN HIEROGLYPH-142F9;Lo;0;L;;;;;N;;;;; +142FA;EGYPTIAN HIEROGLYPH-142FA;Lo;0;L;;;;;N;;;;; +142FB;EGYPTIAN HIEROGLYPH-142FB;Lo;0;L;;;;;N;;;;; +142FC;EGYPTIAN HIEROGLYPH-142FC;Lo;0;L;;;;;N;;;;; +142FD;EGYPTIAN HIEROGLYPH-142FD;Lo;0;L;;;;;N;;;;; +142FE;EGYPTIAN HIEROGLYPH-142FE;Lo;0;L;;;;;N;;;;; +142FF;EGYPTIAN HIEROGLYPH-142FF;Lo;0;L;;;;;N;;;;; +14300;EGYPTIAN HIEROGLYPH-14300;Lo;0;L;;;;;N;;;;; +14301;EGYPTIAN HIEROGLYPH-14301;Lo;0;L;;;;;N;;;;; +14302;EGYPTIAN HIEROGLYPH-14302;Lo;0;L;;;;;N;;;;; +14303;EGYPTIAN HIEROGLYPH-14303;Lo;0;L;;;;;N;;;;; +14304;EGYPTIAN HIEROGLYPH-14304;Lo;0;L;;;;;N;;;;; +14305;EGYPTIAN HIEROGLYPH-14305;Lo;0;L;;;;;N;;;;; +14306;EGYPTIAN HIEROGLYPH-14306;Lo;0;L;;;;;N;;;;; +14307;EGYPTIAN HIEROGLYPH-14307;Lo;0;L;;;;;N;;;;; +14308;EGYPTIAN HIEROGLYPH-14308;Lo;0;L;;;;;N;;;;; +14309;EGYPTIAN HIEROGLYPH-14309;Lo;0;L;;;;;N;;;;; +1430A;EGYPTIAN HIEROGLYPH-1430A;Lo;0;L;;;;;N;;;;; +1430B;EGYPTIAN HIEROGLYPH-1430B;Lo;0;L;;;;;N;;;;; +1430C;EGYPTIAN HIEROGLYPH-1430C;Lo;0;L;;;;;N;;;;; +1430D;EGYPTIAN HIEROGLYPH-1430D;Lo;0;L;;;;;N;;;;; +1430E;EGYPTIAN HIEROGLYPH-1430E;Lo;0;L;;;;;N;;;;; +1430F;EGYPTIAN HIEROGLYPH-1430F;Lo;0;L;;;;;N;;;;; +14310;EGYPTIAN HIEROGLYPH-14310;Lo;0;L;;;;;N;;;;; +14311;EGYPTIAN HIEROGLYPH-14311;Lo;0;L;;;;;N;;;;; +14312;EGYPTIAN HIEROGLYPH-14312;Lo;0;L;;;;;N;;;;; +14313;EGYPTIAN HIEROGLYPH-14313;Lo;0;L;;;;;N;;;;; +14314;EGYPTIAN HIEROGLYPH-14314;Lo;0;L;;;;;N;;;;; +14315;EGYPTIAN HIEROGLYPH-14315;Lo;0;L;;;;;N;;;;; +14316;EGYPTIAN HIEROGLYPH-14316;Lo;0;L;;;;;N;;;;; +14317;EGYPTIAN HIEROGLYPH-14317;Lo;0;L;;;;;N;;;;; +14318;EGYPTIAN HIEROGLYPH-14318;Lo;0;L;;;;;N;;;;; +14319;EGYPTIAN HIEROGLYPH-14319;Lo;0;L;;;;;N;;;;; +1431A;EGYPTIAN HIEROGLYPH-1431A;Lo;0;L;;;;;N;;;;; +1431B;EGYPTIAN HIEROGLYPH-1431B;Lo;0;L;;;;;N;;;;; +1431C;EGYPTIAN HIEROGLYPH-1431C;Lo;0;L;;;;;N;;;;; +1431D;EGYPTIAN HIEROGLYPH-1431D;Lo;0;L;;;;;N;;;;; +1431E;EGYPTIAN HIEROGLYPH-1431E;Lo;0;L;;;;;N;;;;; +1431F;EGYPTIAN HIEROGLYPH-1431F;Lo;0;L;;;;;N;;;;; +14320;EGYPTIAN HIEROGLYPH-14320;Lo;0;L;;;;;N;;;;; +14321;EGYPTIAN HIEROGLYPH-14321;Lo;0;L;;;;;N;;;;; +14322;EGYPTIAN HIEROGLYPH-14322;Lo;0;L;;;;;N;;;;; +14323;EGYPTIAN HIEROGLYPH-14323;Lo;0;L;;;;;N;;;;; +14324;EGYPTIAN HIEROGLYPH-14324;Lo;0;L;;;;;N;;;;; +14325;EGYPTIAN HIEROGLYPH-14325;Lo;0;L;;;;;N;;;;; +14326;EGYPTIAN HIEROGLYPH-14326;Lo;0;L;;;;;N;;;;; +14327;EGYPTIAN HIEROGLYPH-14327;Lo;0;L;;;;;N;;;;; +14328;EGYPTIAN HIEROGLYPH-14328;Lo;0;L;;;;;N;;;;; +14329;EGYPTIAN HIEROGLYPH-14329;Lo;0;L;;;;;N;;;;; +1432A;EGYPTIAN HIEROGLYPH-1432A;Lo;0;L;;;;;N;;;;; +1432B;EGYPTIAN HIEROGLYPH-1432B;Lo;0;L;;;;;N;;;;; +1432C;EGYPTIAN HIEROGLYPH-1432C;Lo;0;L;;;;;N;;;;; +1432D;EGYPTIAN HIEROGLYPH-1432D;Lo;0;L;;;;;N;;;;; +1432E;EGYPTIAN HIEROGLYPH-1432E;Lo;0;L;;;;;N;;;;; +1432F;EGYPTIAN HIEROGLYPH-1432F;Lo;0;L;;;;;N;;;;; +14330;EGYPTIAN HIEROGLYPH-14330;Lo;0;L;;;;;N;;;;; +14331;EGYPTIAN HIEROGLYPH-14331;Lo;0;L;;;;;N;;;;; +14332;EGYPTIAN HIEROGLYPH-14332;Lo;0;L;;;;;N;;;;; +14333;EGYPTIAN HIEROGLYPH-14333;Lo;0;L;;;;;N;;;;; +14334;EGYPTIAN HIEROGLYPH-14334;Lo;0;L;;;;;N;;;;; +14335;EGYPTIAN HIEROGLYPH-14335;Lo;0;L;;;;;N;;;;; +14336;EGYPTIAN HIEROGLYPH-14336;Lo;0;L;;;;;N;;;;; +14337;EGYPTIAN HIEROGLYPH-14337;Lo;0;L;;;;;N;;;;; +14338;EGYPTIAN HIEROGLYPH-14338;Lo;0;L;;;;;N;;;;; +14339;EGYPTIAN HIEROGLYPH-14339;Lo;0;L;;;;;N;;;;; +1433A;EGYPTIAN HIEROGLYPH-1433A;Lo;0;L;;;;;N;;;;; +1433B;EGYPTIAN HIEROGLYPH-1433B;Lo;0;L;;;;;N;;;;; +1433C;EGYPTIAN HIEROGLYPH-1433C;Lo;0;L;;;;;N;;;;; +1433D;EGYPTIAN HIEROGLYPH-1433D;Lo;0;L;;;;;N;;;;; +1433E;EGYPTIAN HIEROGLYPH-1433E;Lo;0;L;;;;;N;;;;; +1433F;EGYPTIAN HIEROGLYPH-1433F;Lo;0;L;;;;;N;;;;; +14340;EGYPTIAN HIEROGLYPH-14340;Lo;0;L;;;;;N;;;;; +14341;EGYPTIAN HIEROGLYPH-14341;Lo;0;L;;;;;N;;;;; +14342;EGYPTIAN HIEROGLYPH-14342;Lo;0;L;;;;;N;;;;; +14343;EGYPTIAN HIEROGLYPH-14343;Lo;0;L;;;;;N;;;;; +14344;EGYPTIAN HIEROGLYPH-14344;Lo;0;L;;;;;N;;;;; +14345;EGYPTIAN HIEROGLYPH-14345;Lo;0;L;;;;;N;;;;; +14346;EGYPTIAN HIEROGLYPH-14346;Lo;0;L;;;;;N;;;;; +14347;EGYPTIAN HIEROGLYPH-14347;Lo;0;L;;;;;N;;;;; +14348;EGYPTIAN HIEROGLYPH-14348;Lo;0;L;;;;;N;;;;; +14349;EGYPTIAN HIEROGLYPH-14349;Lo;0;L;;;;;N;;;;; +1434A;EGYPTIAN HIEROGLYPH-1434A;Lo;0;L;;;;;N;;;;; +1434B;EGYPTIAN HIEROGLYPH-1434B;Lo;0;L;;;;;N;;;;; +1434C;EGYPTIAN HIEROGLYPH-1434C;Lo;0;L;;;;;N;;;;; +1434D;EGYPTIAN HIEROGLYPH-1434D;Lo;0;L;;;;;N;;;;; +1434E;EGYPTIAN HIEROGLYPH-1434E;Lo;0;L;;;;;N;;;;; +1434F;EGYPTIAN HIEROGLYPH-1434F;Lo;0;L;;;;;N;;;;; +14350;EGYPTIAN HIEROGLYPH-14350;Lo;0;L;;;;;N;;;;; +14351;EGYPTIAN HIEROGLYPH-14351;Lo;0;L;;;;;N;;;;; +14352;EGYPTIAN HIEROGLYPH-14352;Lo;0;L;;;;;N;;;;; +14353;EGYPTIAN HIEROGLYPH-14353;Lo;0;L;;;;;N;;;;; +14354;EGYPTIAN HIEROGLYPH-14354;Lo;0;L;;;;;N;;;;; +14355;EGYPTIAN HIEROGLYPH-14355;Lo;0;L;;;;;N;;;;; +14356;EGYPTIAN HIEROGLYPH-14356;Lo;0;L;;;;;N;;;;; +14357;EGYPTIAN HIEROGLYPH-14357;Lo;0;L;;;;;N;;;;; +14358;EGYPTIAN HIEROGLYPH-14358;Lo;0;L;;;;;N;;;;; +14359;EGYPTIAN HIEROGLYPH-14359;Lo;0;L;;;;;N;;;;; +1435A;EGYPTIAN HIEROGLYPH-1435A;Lo;0;L;;;;;N;;;;; +1435B;EGYPTIAN HIEROGLYPH-1435B;Lo;0;L;;;;;N;;;;; +1435C;EGYPTIAN HIEROGLYPH-1435C;Lo;0;L;;;;;N;;;;; +1435D;EGYPTIAN HIEROGLYPH-1435D;Lo;0;L;;;;;N;;;;; +1435E;EGYPTIAN HIEROGLYPH-1435E;Lo;0;L;;;;;N;;;;; +1435F;EGYPTIAN HIEROGLYPH-1435F;Lo;0;L;;;;;N;;;;; +14360;EGYPTIAN HIEROGLYPH-14360;Lo;0;L;;;;;N;;;;; +14361;EGYPTIAN HIEROGLYPH-14361;Lo;0;L;;;;;N;;;;; +14362;EGYPTIAN HIEROGLYPH-14362;Lo;0;L;;;;;N;;;;; +14363;EGYPTIAN HIEROGLYPH-14363;Lo;0;L;;;;;N;;;;; +14364;EGYPTIAN HIEROGLYPH-14364;Lo;0;L;;;;;N;;;;; +14365;EGYPTIAN HIEROGLYPH-14365;Lo;0;L;;;;;N;;;;; +14366;EGYPTIAN HIEROGLYPH-14366;Lo;0;L;;;;;N;;;;; +14367;EGYPTIAN HIEROGLYPH-14367;Lo;0;L;;;;;N;;;;; +14368;EGYPTIAN HIEROGLYPH-14368;Lo;0;L;;;;;N;;;;; +14369;EGYPTIAN HIEROGLYPH-14369;Lo;0;L;;;;;N;;;;; +1436A;EGYPTIAN HIEROGLYPH-1436A;Lo;0;L;;;;;N;;;;; +1436B;EGYPTIAN HIEROGLYPH-1436B;Lo;0;L;;;;;N;;;;; +1436C;EGYPTIAN HIEROGLYPH-1436C;Lo;0;L;;;;;N;;;;; +1436D;EGYPTIAN HIEROGLYPH-1436D;Lo;0;L;;;;;N;;;;; +1436E;EGYPTIAN HIEROGLYPH-1436E;Lo;0;L;;;;;N;;;;; +1436F;EGYPTIAN HIEROGLYPH-1436F;Lo;0;L;;;;;N;;;;; +14370;EGYPTIAN HIEROGLYPH-14370;Lo;0;L;;;;;N;;;;; +14371;EGYPTIAN HIEROGLYPH-14371;Lo;0;L;;;;;N;;;;; +14372;EGYPTIAN HIEROGLYPH-14372;Lo;0;L;;;;;N;;;;; +14373;EGYPTIAN HIEROGLYPH-14373;Lo;0;L;;;;;N;;;;; +14374;EGYPTIAN HIEROGLYPH-14374;Lo;0;L;;;;;N;;;;; +14375;EGYPTIAN HIEROGLYPH-14375;Lo;0;L;;;;;N;;;;; +14376;EGYPTIAN HIEROGLYPH-14376;Lo;0;L;;;;;N;;;;; +14377;EGYPTIAN HIEROGLYPH-14377;Lo;0;L;;;;;N;;;;; +14378;EGYPTIAN HIEROGLYPH-14378;Lo;0;L;;;;;N;;;;; +14379;EGYPTIAN HIEROGLYPH-14379;Lo;0;L;;;;;N;;;;; +1437A;EGYPTIAN HIEROGLYPH-1437A;Lo;0;L;;;;;N;;;;; +1437B;EGYPTIAN HIEROGLYPH-1437B;Lo;0;L;;;;;N;;;;; +1437C;EGYPTIAN HIEROGLYPH-1437C;Lo;0;L;;;;;N;;;;; +1437D;EGYPTIAN HIEROGLYPH-1437D;Lo;0;L;;;;;N;;;;; +1437E;EGYPTIAN HIEROGLYPH-1437E;Lo;0;L;;;;;N;;;;; +1437F;EGYPTIAN HIEROGLYPH-1437F;Lo;0;L;;;;;N;;;;; +14380;EGYPTIAN HIEROGLYPH-14380;Lo;0;L;;;;;N;;;;; +14381;EGYPTIAN HIEROGLYPH-14381;Lo;0;L;;;;;N;;;;; +14382;EGYPTIAN HIEROGLYPH-14382;Lo;0;L;;;;;N;;;;; +14383;EGYPTIAN HIEROGLYPH-14383;Lo;0;L;;;;;N;;;;; +14384;EGYPTIAN HIEROGLYPH-14384;Lo;0;L;;;;;N;;;;; +14385;EGYPTIAN HIEROGLYPH-14385;Lo;0;L;;;;;N;;;;; +14386;EGYPTIAN HIEROGLYPH-14386;Lo;0;L;;;;;N;;;;; +14387;EGYPTIAN HIEROGLYPH-14387;Lo;0;L;;;;;N;;;;; +14388;EGYPTIAN HIEROGLYPH-14388;Lo;0;L;;;;;N;;;;; +14389;EGYPTIAN HIEROGLYPH-14389;Lo;0;L;;;;;N;;;;; +1438A;EGYPTIAN HIEROGLYPH-1438A;Lo;0;L;;;;;N;;;;; +1438B;EGYPTIAN HIEROGLYPH-1438B;Lo;0;L;;;;;N;;;;; +1438C;EGYPTIAN HIEROGLYPH-1438C;Lo;0;L;;;;;N;;;;; +1438D;EGYPTIAN HIEROGLYPH-1438D;Lo;0;L;;;;;N;;;;; +1438E;EGYPTIAN HIEROGLYPH-1438E;Lo;0;L;;;;;N;;;;; +1438F;EGYPTIAN HIEROGLYPH-1438F;Lo;0;L;;;;;N;;;;; +14390;EGYPTIAN HIEROGLYPH-14390;Lo;0;L;;;;;N;;;;; +14391;EGYPTIAN HIEROGLYPH-14391;Lo;0;L;;;;;N;;;;; +14392;EGYPTIAN HIEROGLYPH-14392;Lo;0;L;;;;;N;;;;; +14393;EGYPTIAN HIEROGLYPH-14393;Lo;0;L;;;;;N;;;;; +14394;EGYPTIAN HIEROGLYPH-14394;Lo;0;L;;;;;N;;;;; +14395;EGYPTIAN HIEROGLYPH-14395;Lo;0;L;;;;;N;;;;; +14396;EGYPTIAN HIEROGLYPH-14396;Lo;0;L;;;;;N;;;;; +14397;EGYPTIAN HIEROGLYPH-14397;Lo;0;L;;;;;N;;;;; +14398;EGYPTIAN HIEROGLYPH-14398;Lo;0;L;;;;;N;;;;; +14399;EGYPTIAN HIEROGLYPH-14399;Lo;0;L;;;;;N;;;;; +1439A;EGYPTIAN HIEROGLYPH-1439A;Lo;0;L;;;;;N;;;;; +1439B;EGYPTIAN HIEROGLYPH-1439B;Lo;0;L;;;;;N;;;;; +1439C;EGYPTIAN HIEROGLYPH-1439C;Lo;0;L;;;;;N;;;;; +1439D;EGYPTIAN HIEROGLYPH-1439D;Lo;0;L;;;;;N;;;;; +1439E;EGYPTIAN HIEROGLYPH-1439E;Lo;0;L;;;;;N;;;;; +1439F;EGYPTIAN HIEROGLYPH-1439F;Lo;0;L;;;;;N;;;;; +143A0;EGYPTIAN HIEROGLYPH-143A0;Lo;0;L;;;;;N;;;;; +143A1;EGYPTIAN HIEROGLYPH-143A1;Lo;0;L;;;;;N;;;;; +143A2;EGYPTIAN HIEROGLYPH-143A2;Lo;0;L;;;;;N;;;;; +143A3;EGYPTIAN HIEROGLYPH-143A3;Lo;0;L;;;;;N;;;;; +143A4;EGYPTIAN HIEROGLYPH-143A4;Lo;0;L;;;;;N;;;;; +143A5;EGYPTIAN HIEROGLYPH-143A5;Lo;0;L;;;;;N;;;;; +143A6;EGYPTIAN HIEROGLYPH-143A6;Lo;0;L;;;;;N;;;;; +143A7;EGYPTIAN HIEROGLYPH-143A7;Lo;0;L;;;;;N;;;;; +143A8;EGYPTIAN HIEROGLYPH-143A8;Lo;0;L;;;;;N;;;;; +143A9;EGYPTIAN HIEROGLYPH-143A9;Lo;0;L;;;;;N;;;;; +143AA;EGYPTIAN HIEROGLYPH-143AA;Lo;0;L;;;;;N;;;;; +143AB;EGYPTIAN HIEROGLYPH-143AB;Lo;0;L;;;;;N;;;;; +143AC;EGYPTIAN HIEROGLYPH-143AC;Lo;0;L;;;;;N;;;;; +143AD;EGYPTIAN HIEROGLYPH-143AD;Lo;0;L;;;;;N;;;;; +143AE;EGYPTIAN HIEROGLYPH-143AE;Lo;0;L;;;;;N;;;;; +143AF;EGYPTIAN HIEROGLYPH-143AF;Lo;0;L;;;;;N;;;;; +143B0;EGYPTIAN HIEROGLYPH-143B0;Lo;0;L;;;;;N;;;;; +143B1;EGYPTIAN HIEROGLYPH-143B1;Lo;0;L;;;;;N;;;;; +143B2;EGYPTIAN HIEROGLYPH-143B2;Lo;0;L;;;;;N;;;;; +143B3;EGYPTIAN HIEROGLYPH-143B3;Lo;0;L;;;;;N;;;;; +143B4;EGYPTIAN HIEROGLYPH-143B4;Lo;0;L;;;;;N;;;;; +143B5;EGYPTIAN HIEROGLYPH-143B5;Lo;0;L;;;;;N;;;;; +143B6;EGYPTIAN HIEROGLYPH-143B6;Lo;0;L;;;;;N;;;;; +143B7;EGYPTIAN HIEROGLYPH-143B7;Lo;0;L;;;;;N;;;;; +143B8;EGYPTIAN HIEROGLYPH-143B8;Lo;0;L;;;;;N;;;;; +143B9;EGYPTIAN HIEROGLYPH-143B9;Lo;0;L;;;;;N;;;;; +143BA;EGYPTIAN HIEROGLYPH-143BA;Lo;0;L;;;;;N;;;;; +143BB;EGYPTIAN HIEROGLYPH-143BB;Lo;0;L;;;;;N;;;;; +143BC;EGYPTIAN HIEROGLYPH-143BC;Lo;0;L;;;;;N;;;;; +143BD;EGYPTIAN HIEROGLYPH-143BD;Lo;0;L;;;;;N;;;;; +143BE;EGYPTIAN HIEROGLYPH-143BE;Lo;0;L;;;;;N;;;;; +143BF;EGYPTIAN HIEROGLYPH-143BF;Lo;0;L;;;;;N;;;;; +143C0;EGYPTIAN HIEROGLYPH-143C0;Lo;0;L;;;;;N;;;;; +143C1;EGYPTIAN HIEROGLYPH-143C1;Lo;0;L;;;;;N;;;;; +143C2;EGYPTIAN HIEROGLYPH-143C2;Lo;0;L;;;;;N;;;;; +143C3;EGYPTIAN HIEROGLYPH-143C3;Lo;0;L;;;;;N;;;;; +143C4;EGYPTIAN HIEROGLYPH-143C4;Lo;0;L;;;;;N;;;;; +143C5;EGYPTIAN HIEROGLYPH-143C5;Lo;0;L;;;;;N;;;;; +143C6;EGYPTIAN HIEROGLYPH-143C6;Lo;0;L;;;;;N;;;;; +143C7;EGYPTIAN HIEROGLYPH-143C7;Lo;0;L;;;;;N;;;;; +143C8;EGYPTIAN HIEROGLYPH-143C8;Lo;0;L;;;;;N;;;;; +143C9;EGYPTIAN HIEROGLYPH-143C9;Lo;0;L;;;;;N;;;;; +143CA;EGYPTIAN HIEROGLYPH-143CA;Lo;0;L;;;;;N;;;;; +143CB;EGYPTIAN HIEROGLYPH-143CB;Lo;0;L;;;;;N;;;;; +143CC;EGYPTIAN HIEROGLYPH-143CC;Lo;0;L;;;;;N;;;;; +143CD;EGYPTIAN HIEROGLYPH-143CD;Lo;0;L;;;;;N;;;;; +143CE;EGYPTIAN HIEROGLYPH-143CE;Lo;0;L;;;;;N;;;;; +143CF;EGYPTIAN HIEROGLYPH-143CF;Lo;0;L;;;;;N;;;;; +143D0;EGYPTIAN HIEROGLYPH-143D0;Lo;0;L;;;;;N;;;;; +143D1;EGYPTIAN HIEROGLYPH-143D1;Lo;0;L;;;;;N;;;;; +143D2;EGYPTIAN HIEROGLYPH-143D2;Lo;0;L;;;;;N;;;;; +143D3;EGYPTIAN HIEROGLYPH-143D3;Lo;0;L;;;;;N;;;;; +143D4;EGYPTIAN HIEROGLYPH-143D4;Lo;0;L;;;;;N;;;;; +143D5;EGYPTIAN HIEROGLYPH-143D5;Lo;0;L;;;;;N;;;;; +143D6;EGYPTIAN HIEROGLYPH-143D6;Lo;0;L;;;;;N;;;;; +143D7;EGYPTIAN HIEROGLYPH-143D7;Lo;0;L;;;;;N;;;;; +143D8;EGYPTIAN HIEROGLYPH-143D8;Lo;0;L;;;;;N;;;;; +143D9;EGYPTIAN HIEROGLYPH-143D9;Lo;0;L;;;;;N;;;;; +143DA;EGYPTIAN HIEROGLYPH-143DA;Lo;0;L;;;;;N;;;;; +143DB;EGYPTIAN HIEROGLYPH-143DB;Lo;0;L;;;;;N;;;;; +143DC;EGYPTIAN HIEROGLYPH-143DC;Lo;0;L;;;;;N;;;;; +143DD;EGYPTIAN HIEROGLYPH-143DD;Lo;0;L;;;;;N;;;;; +143DE;EGYPTIAN HIEROGLYPH-143DE;Lo;0;L;;;;;N;;;;; +143DF;EGYPTIAN HIEROGLYPH-143DF;Lo;0;L;;;;;N;;;;; +143E0;EGYPTIAN HIEROGLYPH-143E0;Lo;0;L;;;;;N;;;;; +143E1;EGYPTIAN HIEROGLYPH-143E1;Lo;0;L;;;;;N;;;;; +143E2;EGYPTIAN HIEROGLYPH-143E2;Lo;0;L;;;;;N;;;;; +143E3;EGYPTIAN HIEROGLYPH-143E3;Lo;0;L;;;;;N;;;;; +143E4;EGYPTIAN HIEROGLYPH-143E4;Lo;0;L;;;;;N;;;;; +143E5;EGYPTIAN HIEROGLYPH-143E5;Lo;0;L;;;;;N;;;;; +143E6;EGYPTIAN HIEROGLYPH-143E6;Lo;0;L;;;;;N;;;;; +143E7;EGYPTIAN HIEROGLYPH-143E7;Lo;0;L;;;;;N;;;;; +143E8;EGYPTIAN HIEROGLYPH-143E8;Lo;0;L;;;;;N;;;;; +143E9;EGYPTIAN HIEROGLYPH-143E9;Lo;0;L;;;;;N;;;;; +143EA;EGYPTIAN HIEROGLYPH-143EA;Lo;0;L;;;;;N;;;;; +143EB;EGYPTIAN HIEROGLYPH-143EB;Lo;0;L;;;;;N;;;;; +143EC;EGYPTIAN HIEROGLYPH-143EC;Lo;0;L;;;;;N;;;;; +143ED;EGYPTIAN HIEROGLYPH-143ED;Lo;0;L;;;;;N;;;;; +143EE;EGYPTIAN HIEROGLYPH-143EE;Lo;0;L;;;;;N;;;;; +143EF;EGYPTIAN HIEROGLYPH-143EF;Lo;0;L;;;;;N;;;;; +143F0;EGYPTIAN HIEROGLYPH-143F0;Lo;0;L;;;;;N;;;;; +143F1;EGYPTIAN HIEROGLYPH-143F1;Lo;0;L;;;;;N;;;;; +143F2;EGYPTIAN HIEROGLYPH-143F2;Lo;0;L;;;;;N;;;;; +143F3;EGYPTIAN HIEROGLYPH-143F3;Lo;0;L;;;;;N;;;;; +143F4;EGYPTIAN HIEROGLYPH-143F4;Lo;0;L;;;;;N;;;;; +143F5;EGYPTIAN HIEROGLYPH-143F5;Lo;0;L;;;;;N;;;;; +143F6;EGYPTIAN HIEROGLYPH-143F6;Lo;0;L;;;;;N;;;;; +143F7;EGYPTIAN HIEROGLYPH-143F7;Lo;0;L;;;;;N;;;;; +143F8;EGYPTIAN HIEROGLYPH-143F8;Lo;0;L;;;;;N;;;;; +143F9;EGYPTIAN HIEROGLYPH-143F9;Lo;0;L;;;;;N;;;;; +143FA;EGYPTIAN HIEROGLYPH-143FA;Lo;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -24771,6 +29053,64 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;; 14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;; 14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;; +16100;GURUNG KHEMA LETTER A;Lo;0;L;;;;;N;;;;; +16101;GURUNG KHEMA LETTER KA;Lo;0;L;;;;;N;;;;; +16102;GURUNG KHEMA LETTER KHA;Lo;0;L;;;;;N;;;;; +16103;GURUNG KHEMA LETTER GA;Lo;0;L;;;;;N;;;;; +16104;GURUNG KHEMA LETTER GHA;Lo;0;L;;;;;N;;;;; +16105;GURUNG KHEMA LETTER NGA;Lo;0;L;;;;;N;;;;; +16106;GURUNG KHEMA LETTER CA;Lo;0;L;;;;;N;;;;; +16107;GURUNG KHEMA LETTER CHA;Lo;0;L;;;;;N;;;;; +16108;GURUNG KHEMA LETTER JA;Lo;0;L;;;;;N;;;;; +16109;GURUNG KHEMA LETTER JHA;Lo;0;L;;;;;N;;;;; +1610A;GURUNG KHEMA LETTER HA;Lo;0;L;;;;;N;;;;; +1610B;GURUNG KHEMA LETTER TTA;Lo;0;L;;;;;N;;;;; +1610C;GURUNG KHEMA LETTER TTHA;Lo;0;L;;;;;N;;;;; +1610D;GURUNG KHEMA LETTER DDA;Lo;0;L;;;;;N;;;;; +1610E;GURUNG KHEMA LETTER DDHA;Lo;0;L;;;;;N;;;;; +1610F;GURUNG KHEMA LETTER VA;Lo;0;L;;;;;N;;;;; +16110;GURUNG KHEMA LETTER TA;Lo;0;L;;;;;N;;;;; +16111;GURUNG KHEMA LETTER THA;Lo;0;L;;;;;N;;;;; +16112;GURUNG KHEMA LETTER DA;Lo;0;L;;;;;N;;;;; +16113;GURUNG KHEMA LETTER DHA;Lo;0;L;;;;;N;;;;; +16114;GURUNG KHEMA LETTER NA;Lo;0;L;;;;;N;;;;; +16115;GURUNG KHEMA LETTER PA;Lo;0;L;;;;;N;;;;; +16116;GURUNG KHEMA LETTER PHA;Lo;0;L;;;;;N;;;;; +16117;GURUNG KHEMA LETTER BA;Lo;0;L;;;;;N;;;;; +16118;GURUNG KHEMA LETTER BHA;Lo;0;L;;;;;N;;;;; +16119;GURUNG KHEMA LETTER MA;Lo;0;L;;;;;N;;;;; +1611A;GURUNG KHEMA LETTER YA;Lo;0;L;;;;;N;;;;; +1611B;GURUNG KHEMA LETTER RA;Lo;0;L;;;;;N;;;;; +1611C;GURUNG KHEMA LETTER LA;Lo;0;L;;;;;N;;;;; +1611D;GURUNG KHEMA LETTER SA;Lo;0;L;;;;;N;;;;; +1611E;GURUNG KHEMA VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +1611F;GURUNG KHEMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +16120;GURUNG KHEMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +16121;GURUNG KHEMA VOWEL SIGN U;Mn;0;NSM;1611E 1611E;;;;N;;;;; +16122;GURUNG KHEMA VOWEL SIGN UU;Mn;0;NSM;1611E 16129;;;;N;;;;; +16123;GURUNG KHEMA VOWEL SIGN E;Mn;0;NSM;1611E 1611F;;;;N;;;;; +16124;GURUNG KHEMA VOWEL SIGN EE;Mn;0;NSM;16129 1611F;;;;N;;;;; +16125;GURUNG KHEMA VOWEL SIGN AI;Mn;0;NSM;1611E 16120;;;;N;;;;; +16126;GURUNG KHEMA VOWEL SIGN O;Mn;0;NSM;16121 1611F;;;;N;;;;; +16127;GURUNG KHEMA VOWEL SIGN OO;Mn;0;NSM;16122 1611F;;;;N;;;;; +16128;GURUNG KHEMA VOWEL SIGN AU;Mn;0;NSM;16121 16120;;;;N;;;;; +16129;GURUNG KHEMA VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +1612A;GURUNG KHEMA CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; +1612B;GURUNG KHEMA CONSONANT SIGN MEDIAL VA;Mc;0;L;;;;;N;;;;; +1612C;GURUNG KHEMA CONSONANT SIGN MEDIAL HA;Mc;0;L;;;;;N;;;;; +1612D;GURUNG KHEMA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1612E;GURUNG KHEMA CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; +1612F;GURUNG KHEMA SIGN THOLHOMA;Mn;9;NSM;;;;;N;;;;; +16130;GURUNG KHEMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16131;GURUNG KHEMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16132;GURUNG KHEMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16133;GURUNG KHEMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16134;GURUNG KHEMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16135;GURUNG KHEMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16136;GURUNG KHEMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16137;GURUNG KHEMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16138;GURUNG KHEMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16139;GURUNG KHEMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; 16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; 16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; @@ -25635,6 +29975,64 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;; 16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;; 16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;; +16D40;KIRAT RAI SIGN ANUSVARA;Lm;0;L;;;;;N;;;;; +16D41;KIRAT RAI SIGN TONPI;Lm;0;L;;;;;N;;;;; +16D42;KIRAT RAI SIGN VISARGA;Lm;0;L;;;;;N;;;;; +16D43;KIRAT RAI LETTER A;Lo;0;L;;;;;N;;;;; +16D44;KIRAT RAI LETTER KA;Lo;0;L;;;;;N;;;;; +16D45;KIRAT RAI LETTER KHA;Lo;0;L;;;;;N;;;;; +16D46;KIRAT RAI LETTER GA;Lo;0;L;;;;;N;;;;; +16D47;KIRAT RAI LETTER GHA;Lo;0;L;;;;;N;;;;; +16D48;KIRAT RAI LETTER NGA;Lo;0;L;;;;;N;;;;; +16D49;KIRAT RAI LETTER CA;Lo;0;L;;;;;N;;;;; +16D4A;KIRAT RAI LETTER CHA;Lo;0;L;;;;;N;;;;; +16D4B;KIRAT RAI LETTER JA;Lo;0;L;;;;;N;;;;; +16D4C;KIRAT RAI LETTER JHA;Lo;0;L;;;;;N;;;;; +16D4D;KIRAT RAI LETTER NYA;Lo;0;L;;;;;N;;;;; +16D4E;KIRAT RAI LETTER TTA;Lo;0;L;;;;;N;;;;; +16D4F;KIRAT RAI LETTER TTHA;Lo;0;L;;;;;N;;;;; +16D50;KIRAT RAI LETTER DDA;Lo;0;L;;;;;N;;;;; +16D51;KIRAT RAI LETTER DDHA;Lo;0;L;;;;;N;;;;; +16D52;KIRAT RAI LETTER TA;Lo;0;L;;;;;N;;;;; +16D53;KIRAT RAI LETTER THA;Lo;0;L;;;;;N;;;;; +16D54;KIRAT RAI LETTER DA;Lo;0;L;;;;;N;;;;; +16D55;KIRAT RAI LETTER DHA;Lo;0;L;;;;;N;;;;; +16D56;KIRAT RAI LETTER NA;Lo;0;L;;;;;N;;;;; +16D57;KIRAT RAI LETTER PA;Lo;0;L;;;;;N;;;;; +16D58;KIRAT RAI LETTER PHA;Lo;0;L;;;;;N;;;;; +16D59;KIRAT RAI LETTER BA;Lo;0;L;;;;;N;;;;; +16D5A;KIRAT RAI LETTER BHA;Lo;0;L;;;;;N;;;;; +16D5B;KIRAT RAI LETTER MA;Lo;0;L;;;;;N;;;;; +16D5C;KIRAT RAI LETTER YA;Lo;0;L;;;;;N;;;;; +16D5D;KIRAT RAI LETTER RA;Lo;0;L;;;;;N;;;;; +16D5E;KIRAT RAI LETTER LA;Lo;0;L;;;;;N;;;;; +16D5F;KIRAT RAI LETTER VA;Lo;0;L;;;;;N;;;;; +16D60;KIRAT RAI LETTER SA;Lo;0;L;;;;;N;;;;; +16D61;KIRAT RAI LETTER SHA;Lo;0;L;;;;;N;;;;; +16D62;KIRAT RAI LETTER HA;Lo;0;L;;;;;N;;;;; +16D63;KIRAT RAI VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; +16D64;KIRAT RAI VOWEL SIGN I;Lo;0;L;;;;;N;;;;; +16D65;KIRAT RAI VOWEL SIGN U;Lo;0;L;;;;;N;;;;; +16D66;KIRAT RAI VOWEL SIGN UE;Lo;0;L;;;;;N;;;;; +16D67;KIRAT RAI VOWEL SIGN E;Lo;0;L;;;;;N;;;;; +16D68;KIRAT RAI VOWEL SIGN AI;Lo;0;L;16D67 16D67;;;;N;;;;; +16D69;KIRAT RAI VOWEL SIGN O;Lo;0;L;16D63 16D67;;;;N;;;;; +16D6A;KIRAT RAI VOWEL SIGN AU;Lo;0;L;16D69 16D67;;;;N;;;;; +16D6B;KIRAT RAI SIGN VIRAMA;Lm;0;L;;;;;N;;;;; +16D6C;KIRAT RAI SIGN SAAT;Lm;0;L;;;;;N;;;;; +16D6D;KIRAT RAI SIGN YUPI;Po;0;L;;;;;N;;;;; +16D6E;KIRAT RAI DANDA;Po;0;L;;;;;N;;;;; +16D6F;KIRAT RAI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +16D70;KIRAT RAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16D71;KIRAT RAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16D72;KIRAT RAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16D73;KIRAT RAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16D74;KIRAT RAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16D75;KIRAT RAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16D76;KIRAT RAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16D77;KIRAT RAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16D78;KIRAT RAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16D79;KIRAT RAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60; 16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61; 16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62; @@ -27122,6 +31520,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;; 18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; +18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;; 18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;; 18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; @@ -27980,6 +32379,692 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; +1CC00;UP-POINTING GO-KART;So;0;ON;;;;;N;;;;; +1CC01;RIGHT-POINTING GO-KART;So;0;ON;;;;;N;;;;; +1CC02;LEFT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC03;RIGHT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC04;DOWN-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC05;LOWER HORIZONTAL RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC06;RIGHT VERTICAL RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC07;LOWER RIGHT RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC08;ANTENNA;So;0;ON;;;;;N;;;;; +1CC09;HORIZONTAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;; +1CC0A;VERTICAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;; +1CC0B;LEFT THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0C;MIDDLE THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0D;RIGHT THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0E;LEFT-POINTING DIODE;So;0;ON;;;;;N;;;;; +1CC0F;RIGHT-POINTING DIODE;So;0;ON;;;;;N;;;;; +1CC10;NPN TRANSISTOR;So;0;ON;;;;;N;;;;; +1CC11;PNP TRANSISTOR;So;0;ON;;;;;N;;;;; +1CC12;RECEPTACLE;So;0;ON;;;;;N;;;;; +1CC13;HORIZONTAL CAPACITOR;So;0;ON;;;;;N;;;;; +1CC14;VERTICAL CAPACITOR;So;0;ON;;;;;N;;;;; +1CC15;LOGIC GATE OR;So;0;ON;;;;;N;;;;; +1CC16;LOGIC GATE AND;So;0;ON;;;;;N;;;;; +1CC17;LOGIC GATE INVERTED INPUTS;So;0;ON;;;;;N;;;;; +1CC18;LOGIC GATE INVERTED OUTPUT;So;0;ON;;;;;N;;;;; +1CC19;LOGIC GATE BUFFER;So;0;ON;;;;;N;;;;; +1CC1A;LOGIC GATE BUFFER WITH INVERTED INPUT;So;0;ON;;;;;N;;;;; +1CC1B;BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CC1C;BOX DRAWINGS LIGHT HORIZONTAL AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CC1D;BOX DRAWINGS LIGHT TOP AND UPPER LEFT;So;0;ON;;;;;N;;;;; +1CC1E;BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT;So;0;ON;;;;;N;;;;; +1CC1F;BOX DRAWINGS DOUBLE DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1CC20;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CC21;SEPARATED BLOCK QUADRANT-1;So;0;ON;;;;;N;;;;; +1CC22;SEPARATED BLOCK QUADRANT-2;So;0;ON;;;;;N;;;;; +1CC23;SEPARATED BLOCK QUADRANT-12;So;0;ON;;;;;N;;;;; +1CC24;SEPARATED BLOCK QUADRANT-3;So;0;ON;;;;;N;;;;; +1CC25;SEPARATED BLOCK QUADRANT-13;So;0;ON;;;;;N;;;;; +1CC26;SEPARATED BLOCK QUADRANT-23;So;0;ON;;;;;N;;;;; +1CC27;SEPARATED BLOCK QUADRANT-123;So;0;ON;;;;;N;;;;; +1CC28;SEPARATED BLOCK QUADRANT-4;So;0;ON;;;;;N;;;;; +1CC29;SEPARATED BLOCK QUADRANT-14;So;0;ON;;;;;N;;;;; +1CC2A;SEPARATED BLOCK QUADRANT-24;So;0;ON;;;;;N;;;;; +1CC2B;SEPARATED BLOCK QUADRANT-124;So;0;ON;;;;;N;;;;; +1CC2C;SEPARATED BLOCK QUADRANT-34;So;0;ON;;;;;N;;;;; +1CC2D;SEPARATED BLOCK QUADRANT-134;So;0;ON;;;;;N;;;;; +1CC2E;SEPARATED BLOCK QUADRANT-234;So;0;ON;;;;;N;;;;; +1CC2F;SEPARATED BLOCK QUADRANT-1234;So;0;ON;;;;;N;;;;; +1CC30;UPPER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC31;UPPER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC32;UPPER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC33;UPPER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC34;UPPER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC35;UPPER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC36;UPPER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC37;UPPER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC38;LOWER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC39;LOWER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC3A;LOWER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC3B;LOWER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3C;LOWER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3D;LOWER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3E;LOWER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3F;LOWER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC40;SPARSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +1CC41;SPARSE VERTICAL FILL;So;0;ON;;;;;N;;;;; +1CC42;ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +1CC43;DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +1CC44;DENSE VERTICAL FILL;So;0;ON;;;;;N;;;;; +1CC45;DENSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +1CC46;SPECKLE FILL FRAME-1;So;0;ON;;;;;N;;;;; +1CC47;SPECKLE FILL FRAME-2;So;0;ON;;;;;N;;;;; +1CC48;LEFT-FACING BASSINET;So;0;ON;;;;;N;;;;; +1CC49;RIGHT-FACING BASSINET;So;0;ON;;;;;N;;;;; +1CC4A;FLYING SAUCER WITH BEAMS;So;0;ON;;;;;N;;;;; +1CC4B;FLYING SAUCER WITHOUT BEAMS;So;0;ON;;;;;N;;;;; +1CC4C;ALIEN MONSTER OPEN JAWS;So;0;ON;;;;;N;;;;; +1CC4D;ALIEN MONSTER CLOSED JAWS;So;0;ON;;;;;N;;;;; +1CC4E;ALIEN SQUID OPEN TENTACLES;So;0;ON;;;;;N;;;;; +1CC4F;ALIEN SQUID CLOSED TENTACLES;So;0;ON;;;;;N;;;;; +1CC50;ALIEN CRAB STEPPING RIGHT;So;0;ON;;;;;N;;;;; +1CC51;ALIEN CRAB STEPPING LEFT;So;0;ON;;;;;N;;;;; +1CC52;ALIEN SPIDER CROUCHING;So;0;ON;;;;;N;;;;; +1CC53;ALIEN SPIDER SPREAD;So;0;ON;;;;;N;;;;; +1CC54;ALIEN MONSTER STEP-1;So;0;ON;;;;;N;;;;; +1CC55;ALIEN MONSTER STEP-2;So;0;ON;;;;;N;;;;; +1CC56;LEFT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC57;UP-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC58;RIGHT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC59;DOWN-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC5A;TOP HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5B;TOP HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5C;TOP HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5D;BOTTOM HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5E;BOTTOM HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5F;BOTTOM HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC60;LEFT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC61;UP-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC62;RIGHT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC63;DOWN-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC64;MUSHROOM CLOUD;So;0;ON;;;;;N;;;;; +1CC65;LEFT-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC66;UP-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC67;RIGHT-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC68;DOWN-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC69;EIGHT RAYS INWARD;So;0;ON;;;;;N;;;;; +1CC6A;EIGHT RAYS OUTWARD;So;0;ON;;;;;N;;;;; +1CC6B;BLACK LARGE CIRCLE MINUS LEFT QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6C;BLACK LARGE CIRCLE MINUS UPPER QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6D;BLACK LARGE CIRCLE MINUS RIGHT QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6E;BLACK LARGE CIRCLE MINUS LOWER QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6F;BLACK NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CC70;LEFT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC71;UP-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC72;RIGHT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC73;DOWN-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC74;LEFT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC75;UP-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC76;RIGHT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC77;DOWN-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC78;LEFT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC79;UP-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7A;RIGHT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7B;DOWN-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7C;SQUARE SPIRAL FROM TOP LEFT;So;0;ON;;;;;N;;;;; +1CC7D;SQUARE SPIRAL FROM TOP RIGHT;So;0;ON;;;;;N;;;;; +1CC7E;SQUARE SPIRAL FROM BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +1CC7F;SQUARE SPIRAL FROM BOTTOM LEFT;So;0;ON;;;;;N;;;;; +1CC80;STRIPED LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC81;STRIPED UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC82;STRIPED RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC83;STRIPED DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC84;VERTICAL LADDER;So;0;ON;;;;;N;;;;; +1CC85;HORIZONTAL LADDER;So;0;ON;;;;;N;;;;; +1CC86;WHITE LOWER LEFT POINTER;So;0;ON;;;;;N;;;;; +1CC87;WHITE LOWER RIGHT POINTER;So;0;ON;;;;;N;;;;; +1CC88;TWO RINGS ALIGNED HORIZONTALLY;So;0;ON;;;;;N;;;;; +1CC89;SQUARE FOUR CORNER SALTIRES;So;0;ON;;;;;N;;;;; +1CC8A;SQUARE FOUR CORNER DIAGONALS;So;0;ON;;;;;N;;;;; +1CC8B;SQUARE FOUR CORNER BLACK TRIANGLES;So;0;ON;;;;;N;;;;; +1CC8C;SQUARE APERTURE;So;0;ON;;;;;N;;;;; +1CC8D;INVERSE BLACK DIAMOND;So;0;ON;;;;;N;;;;; +1CC8E;LEFT AND UPPER ONE EIGHTH BLOCK CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CC8F;INVERSE BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CC90;VERTICAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;; +1CC91;HORIZONTAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;; +1CC92;LEFT-FACING FISH;So;0;ON;;;;;N;;;;; +1CC93;RIGHT-FACING FISH;So;0;ON;;;;;N;;;;; +1CC94;LEFT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC95;RIGHT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC96;FLAPPING BIRD;So;0;ON;;;;;N;;;;; +1CC97;LEFT-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC98;UP-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC99;RIGHT-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC9A;DOWN-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC9B;HORIZONTAL RACING CAR;So;0;ON;;;;;N;;;;; +1CC9C;VERTICAL RACING CAR;So;0;ON;;;;;N;;;;; +1CC9D;VERTICAL GO-KART;So;0;ON;;;;;N;;;;; +1CC9E;LEFT-POINTING TANK;So;0;ON;;;;;N;;;;; +1CC9F;RIGHT-POINTING TANK;So;0;ON;;;;;N;;;;; +1CCA0;LEFT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;; +1CCA1;RIGHT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;; +1CCA2;LEFT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;; +1CCA3;RIGHT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;; +1CCA4;LEFT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;; +1CCA5;RIGHT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;; +1CCA6;UPPER LEFT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;; +1CCA7;UPPER RIGHT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;; +1CCA8;UPPER LEFT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1CCA9;UPPER RIGHT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1CCAA;LOWER LEFT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;; +1CCAB;LOWER RIGHT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;; +1CCAC;LOWER LEFT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CCAD;LOWER RIGHT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CCAE;LOWER LEFT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CCAF;LOWER RIGHT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CCB0;LOWER LEFT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;; +1CCB1;LOWER RIGHT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;; +1CCB2;UPPER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB3;UPPER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB4;LOWER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB5;LOWER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB6;UPPER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB7;UPPER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB8;LOWER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB9;LOWER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCBA;UPPER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBB;UPPER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBC;LOWER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBD;LOWER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBE;UPPER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCBF;UPPER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC0;LOWER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC1;LOWER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC2;UPPER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC3;UPPER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC4;LOWER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC5;LOWER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC6;UPPER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC7;UPPER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC8;LOWER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC9;LOWER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCCA;UPPER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCB;UPPER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCC;LOWER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCD;LOWER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCE;UPPER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCCF;UPPER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD0;LOWER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD1;LOWER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD2;UPPER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD3;UPPER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD4;LOWER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD5;LOWER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD6;OUTLINED LATIN CAPITAL LETTER A;So;0;L;<font> 0041;;;;N;;;;; +1CCD7;OUTLINED LATIN CAPITAL LETTER B;So;0;L;<font> 0042;;;;N;;;;; +1CCD8;OUTLINED LATIN CAPITAL LETTER C;So;0;L;<font> 0043;;;;N;;;;; +1CCD9;OUTLINED LATIN CAPITAL LETTER D;So;0;L;<font> 0044;;;;N;;;;; +1CCDA;OUTLINED LATIN CAPITAL LETTER E;So;0;L;<font> 0045;;;;N;;;;; +1CCDB;OUTLINED LATIN CAPITAL LETTER F;So;0;L;<font> 0046;;;;N;;;;; +1CCDC;OUTLINED LATIN CAPITAL LETTER G;So;0;L;<font> 0047;;;;N;;;;; +1CCDD;OUTLINED LATIN CAPITAL LETTER H;So;0;L;<font> 0048;;;;N;;;;; +1CCDE;OUTLINED LATIN CAPITAL LETTER I;So;0;L;<font> 0049;;;;N;;;;; +1CCDF;OUTLINED LATIN CAPITAL LETTER J;So;0;L;<font> 004A;;;;N;;;;; +1CCE0;OUTLINED LATIN CAPITAL LETTER K;So;0;L;<font> 004B;;;;N;;;;; +1CCE1;OUTLINED LATIN CAPITAL LETTER L;So;0;L;<font> 004C;;;;N;;;;; +1CCE2;OUTLINED LATIN CAPITAL LETTER M;So;0;L;<font> 004D;;;;N;;;;; +1CCE3;OUTLINED LATIN CAPITAL LETTER N;So;0;L;<font> 004E;;;;N;;;;; +1CCE4;OUTLINED LATIN CAPITAL LETTER O;So;0;L;<font> 004F;;;;N;;;;; +1CCE5;OUTLINED LATIN CAPITAL LETTER P;So;0;L;<font> 0050;;;;N;;;;; +1CCE6;OUTLINED LATIN CAPITAL LETTER Q;So;0;L;<font> 0051;;;;N;;;;; +1CCE7;OUTLINED LATIN CAPITAL LETTER R;So;0;L;<font> 0052;;;;N;;;;; +1CCE8;OUTLINED LATIN CAPITAL LETTER S;So;0;L;<font> 0053;;;;N;;;;; +1CCE9;OUTLINED LATIN CAPITAL LETTER T;So;0;L;<font> 0054;;;;N;;;;; +1CCEA;OUTLINED LATIN CAPITAL LETTER U;So;0;L;<font> 0055;;;;N;;;;; +1CCEB;OUTLINED LATIN CAPITAL LETTER V;So;0;L;<font> 0056;;;;N;;;;; +1CCEC;OUTLINED LATIN CAPITAL LETTER W;So;0;L;<font> 0057;;;;N;;;;; +1CCED;OUTLINED LATIN CAPITAL LETTER X;So;0;L;<font> 0058;;;;N;;;;; +1CCEE;OUTLINED LATIN CAPITAL LETTER Y;So;0;L;<font> 0059;;;;N;;;;; +1CCEF;OUTLINED LATIN CAPITAL LETTER Z;So;0;L;<font> 005A;;;;N;;;;; +1CCF0;OUTLINED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1CCF1;OUTLINED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1CCF2;OUTLINED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1CCF3;OUTLINED DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1CCF4;OUTLINED DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1CCF5;OUTLINED DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1CCF6;OUTLINED DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1CCF9;OUTLINED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;; +1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;; +1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;; +1CD03;BLOCK OCTANT-4;So;0;ON;;;;;N;;;;; +1CD04;BLOCK OCTANT-14;So;0;ON;;;;;N;;;;; +1CD05;BLOCK OCTANT-124;So;0;ON;;;;;N;;;;; +1CD06;BLOCK OCTANT-34;So;0;ON;;;;;N;;;;; +1CD07;BLOCK OCTANT-134;So;0;ON;;;;;N;;;;; +1CD08;BLOCK OCTANT-234;So;0;ON;;;;;N;;;;; +1CD09;BLOCK OCTANT-5;So;0;ON;;;;;N;;;;; +1CD0A;BLOCK OCTANT-15;So;0;ON;;;;;N;;;;; +1CD0B;BLOCK OCTANT-25;So;0;ON;;;;;N;;;;; +1CD0C;BLOCK OCTANT-125;So;0;ON;;;;;N;;;;; +1CD0D;BLOCK OCTANT-135;So;0;ON;;;;;N;;;;; +1CD0E;BLOCK OCTANT-235;So;0;ON;;;;;N;;;;; +1CD0F;BLOCK OCTANT-1235;So;0;ON;;;;;N;;;;; +1CD10;BLOCK OCTANT-45;So;0;ON;;;;;N;;;;; +1CD11;BLOCK OCTANT-145;So;0;ON;;;;;N;;;;; +1CD12;BLOCK OCTANT-245;So;0;ON;;;;;N;;;;; +1CD13;BLOCK OCTANT-1245;So;0;ON;;;;;N;;;;; +1CD14;BLOCK OCTANT-345;So;0;ON;;;;;N;;;;; +1CD15;BLOCK OCTANT-1345;So;0;ON;;;;;N;;;;; +1CD16;BLOCK OCTANT-2345;So;0;ON;;;;;N;;;;; +1CD17;BLOCK OCTANT-12345;So;0;ON;;;;;N;;;;; +1CD18;BLOCK OCTANT-6;So;0;ON;;;;;N;;;;; +1CD19;BLOCK OCTANT-16;So;0;ON;;;;;N;;;;; +1CD1A;BLOCK OCTANT-26;So;0;ON;;;;;N;;;;; +1CD1B;BLOCK OCTANT-126;So;0;ON;;;;;N;;;;; +1CD1C;BLOCK OCTANT-36;So;0;ON;;;;;N;;;;; +1CD1D;BLOCK OCTANT-136;So;0;ON;;;;;N;;;;; +1CD1E;BLOCK OCTANT-236;So;0;ON;;;;;N;;;;; +1CD1F;BLOCK OCTANT-1236;So;0;ON;;;;;N;;;;; +1CD20;BLOCK OCTANT-146;So;0;ON;;;;;N;;;;; +1CD21;BLOCK OCTANT-246;So;0;ON;;;;;N;;;;; +1CD22;BLOCK OCTANT-1246;So;0;ON;;;;;N;;;;; +1CD23;BLOCK OCTANT-346;So;0;ON;;;;;N;;;;; +1CD24;BLOCK OCTANT-1346;So;0;ON;;;;;N;;;;; +1CD25;BLOCK OCTANT-2346;So;0;ON;;;;;N;;;;; +1CD26;BLOCK OCTANT-12346;So;0;ON;;;;;N;;;;; +1CD27;BLOCK OCTANT-56;So;0;ON;;;;;N;;;;; +1CD28;BLOCK OCTANT-156;So;0;ON;;;;;N;;;;; +1CD29;BLOCK OCTANT-256;So;0;ON;;;;;N;;;;; +1CD2A;BLOCK OCTANT-1256;So;0;ON;;;;;N;;;;; +1CD2B;BLOCK OCTANT-356;So;0;ON;;;;;N;;;;; +1CD2C;BLOCK OCTANT-1356;So;0;ON;;;;;N;;;;; +1CD2D;BLOCK OCTANT-2356;So;0;ON;;;;;N;;;;; +1CD2E;BLOCK OCTANT-12356;So;0;ON;;;;;N;;;;; +1CD2F;BLOCK OCTANT-456;So;0;ON;;;;;N;;;;; +1CD30;BLOCK OCTANT-1456;So;0;ON;;;;;N;;;;; +1CD31;BLOCK OCTANT-2456;So;0;ON;;;;;N;;;;; +1CD32;BLOCK OCTANT-12456;So;0;ON;;;;;N;;;;; +1CD33;BLOCK OCTANT-3456;So;0;ON;;;;;N;;;;; +1CD34;BLOCK OCTANT-13456;So;0;ON;;;;;N;;;;; +1CD35;BLOCK OCTANT-23456;So;0;ON;;;;;N;;;;; +1CD36;BLOCK OCTANT-17;So;0;ON;;;;;N;;;;; +1CD37;BLOCK OCTANT-27;So;0;ON;;;;;N;;;;; +1CD38;BLOCK OCTANT-127;So;0;ON;;;;;N;;;;; +1CD39;BLOCK OCTANT-37;So;0;ON;;;;;N;;;;; +1CD3A;BLOCK OCTANT-137;So;0;ON;;;;;N;;;;; +1CD3B;BLOCK OCTANT-237;So;0;ON;;;;;N;;;;; +1CD3C;BLOCK OCTANT-1237;So;0;ON;;;;;N;;;;; +1CD3D;BLOCK OCTANT-47;So;0;ON;;;;;N;;;;; +1CD3E;BLOCK OCTANT-147;So;0;ON;;;;;N;;;;; +1CD3F;BLOCK OCTANT-247;So;0;ON;;;;;N;;;;; +1CD40;BLOCK OCTANT-1247;So;0;ON;;;;;N;;;;; +1CD41;BLOCK OCTANT-347;So;0;ON;;;;;N;;;;; +1CD42;BLOCK OCTANT-1347;So;0;ON;;;;;N;;;;; +1CD43;BLOCK OCTANT-2347;So;0;ON;;;;;N;;;;; +1CD44;BLOCK OCTANT-12347;So;0;ON;;;;;N;;;;; +1CD45;BLOCK OCTANT-157;So;0;ON;;;;;N;;;;; +1CD46;BLOCK OCTANT-257;So;0;ON;;;;;N;;;;; +1CD47;BLOCK OCTANT-1257;So;0;ON;;;;;N;;;;; +1CD48;BLOCK OCTANT-357;So;0;ON;;;;;N;;;;; +1CD49;BLOCK OCTANT-2357;So;0;ON;;;;;N;;;;; +1CD4A;BLOCK OCTANT-12357;So;0;ON;;;;;N;;;;; +1CD4B;BLOCK OCTANT-457;So;0;ON;;;;;N;;;;; +1CD4C;BLOCK OCTANT-1457;So;0;ON;;;;;N;;;;; +1CD4D;BLOCK OCTANT-12457;So;0;ON;;;;;N;;;;; +1CD4E;BLOCK OCTANT-3457;So;0;ON;;;;;N;;;;; +1CD4F;BLOCK OCTANT-13457;So;0;ON;;;;;N;;;;; +1CD50;BLOCK OCTANT-23457;So;0;ON;;;;;N;;;;; +1CD51;BLOCK OCTANT-67;So;0;ON;;;;;N;;;;; +1CD52;BLOCK OCTANT-167;So;0;ON;;;;;N;;;;; +1CD53;BLOCK OCTANT-267;So;0;ON;;;;;N;;;;; +1CD54;BLOCK OCTANT-1267;So;0;ON;;;;;N;;;;; +1CD55;BLOCK OCTANT-367;So;0;ON;;;;;N;;;;; +1CD56;BLOCK OCTANT-1367;So;0;ON;;;;;N;;;;; +1CD57;BLOCK OCTANT-2367;So;0;ON;;;;;N;;;;; +1CD58;BLOCK OCTANT-12367;So;0;ON;;;;;N;;;;; +1CD59;BLOCK OCTANT-467;So;0;ON;;;;;N;;;;; +1CD5A;BLOCK OCTANT-1467;So;0;ON;;;;;N;;;;; +1CD5B;BLOCK OCTANT-2467;So;0;ON;;;;;N;;;;; +1CD5C;BLOCK OCTANT-12467;So;0;ON;;;;;N;;;;; +1CD5D;BLOCK OCTANT-3467;So;0;ON;;;;;N;;;;; +1CD5E;BLOCK OCTANT-13467;So;0;ON;;;;;N;;;;; +1CD5F;BLOCK OCTANT-23467;So;0;ON;;;;;N;;;;; +1CD60;BLOCK OCTANT-123467;So;0;ON;;;;;N;;;;; +1CD61;BLOCK OCTANT-567;So;0;ON;;;;;N;;;;; +1CD62;BLOCK OCTANT-1567;So;0;ON;;;;;N;;;;; +1CD63;BLOCK OCTANT-2567;So;0;ON;;;;;N;;;;; +1CD64;BLOCK OCTANT-12567;So;0;ON;;;;;N;;;;; +1CD65;BLOCK OCTANT-3567;So;0;ON;;;;;N;;;;; +1CD66;BLOCK OCTANT-13567;So;0;ON;;;;;N;;;;; +1CD67;BLOCK OCTANT-23567;So;0;ON;;;;;N;;;;; +1CD68;BLOCK OCTANT-123567;So;0;ON;;;;;N;;;;; +1CD69;BLOCK OCTANT-4567;So;0;ON;;;;;N;;;;; +1CD6A;BLOCK OCTANT-14567;So;0;ON;;;;;N;;;;; +1CD6B;BLOCK OCTANT-24567;So;0;ON;;;;;N;;;;; +1CD6C;BLOCK OCTANT-124567;So;0;ON;;;;;N;;;;; +1CD6D;BLOCK OCTANT-34567;So;0;ON;;;;;N;;;;; +1CD6E;BLOCK OCTANT-134567;So;0;ON;;;;;N;;;;; +1CD6F;BLOCK OCTANT-234567;So;0;ON;;;;;N;;;;; +1CD70;BLOCK OCTANT-1234567;So;0;ON;;;;;N;;;;; +1CD71;BLOCK OCTANT-18;So;0;ON;;;;;N;;;;; +1CD72;BLOCK OCTANT-28;So;0;ON;;;;;N;;;;; +1CD73;BLOCK OCTANT-128;So;0;ON;;;;;N;;;;; +1CD74;BLOCK OCTANT-38;So;0;ON;;;;;N;;;;; +1CD75;BLOCK OCTANT-138;So;0;ON;;;;;N;;;;; +1CD76;BLOCK OCTANT-238;So;0;ON;;;;;N;;;;; +1CD77;BLOCK OCTANT-1238;So;0;ON;;;;;N;;;;; +1CD78;BLOCK OCTANT-48;So;0;ON;;;;;N;;;;; +1CD79;BLOCK OCTANT-148;So;0;ON;;;;;N;;;;; +1CD7A;BLOCK OCTANT-248;So;0;ON;;;;;N;;;;; +1CD7B;BLOCK OCTANT-1248;So;0;ON;;;;;N;;;;; +1CD7C;BLOCK OCTANT-348;So;0;ON;;;;;N;;;;; +1CD7D;BLOCK OCTANT-1348;So;0;ON;;;;;N;;;;; +1CD7E;BLOCK OCTANT-2348;So;0;ON;;;;;N;;;;; +1CD7F;BLOCK OCTANT-12348;So;0;ON;;;;;N;;;;; +1CD80;BLOCK OCTANT-58;So;0;ON;;;;;N;;;;; +1CD81;BLOCK OCTANT-158;So;0;ON;;;;;N;;;;; +1CD82;BLOCK OCTANT-258;So;0;ON;;;;;N;;;;; +1CD83;BLOCK OCTANT-1258;So;0;ON;;;;;N;;;;; +1CD84;BLOCK OCTANT-358;So;0;ON;;;;;N;;;;; +1CD85;BLOCK OCTANT-1358;So;0;ON;;;;;N;;;;; +1CD86;BLOCK OCTANT-2358;So;0;ON;;;;;N;;;;; +1CD87;BLOCK OCTANT-12358;So;0;ON;;;;;N;;;;; +1CD88;BLOCK OCTANT-458;So;0;ON;;;;;N;;;;; +1CD89;BLOCK OCTANT-1458;So;0;ON;;;;;N;;;;; +1CD8A;BLOCK OCTANT-2458;So;0;ON;;;;;N;;;;; +1CD8B;BLOCK OCTANT-12458;So;0;ON;;;;;N;;;;; +1CD8C;BLOCK OCTANT-3458;So;0;ON;;;;;N;;;;; +1CD8D;BLOCK OCTANT-13458;So;0;ON;;;;;N;;;;; +1CD8E;BLOCK OCTANT-23458;So;0;ON;;;;;N;;;;; +1CD8F;BLOCK OCTANT-123458;So;0;ON;;;;;N;;;;; +1CD90;BLOCK OCTANT-168;So;0;ON;;;;;N;;;;; +1CD91;BLOCK OCTANT-268;So;0;ON;;;;;N;;;;; +1CD92;BLOCK OCTANT-1268;So;0;ON;;;;;N;;;;; +1CD93;BLOCK OCTANT-368;So;0;ON;;;;;N;;;;; +1CD94;BLOCK OCTANT-2368;So;0;ON;;;;;N;;;;; +1CD95;BLOCK OCTANT-12368;So;0;ON;;;;;N;;;;; +1CD96;BLOCK OCTANT-468;So;0;ON;;;;;N;;;;; +1CD97;BLOCK OCTANT-1468;So;0;ON;;;;;N;;;;; +1CD98;BLOCK OCTANT-12468;So;0;ON;;;;;N;;;;; +1CD99;BLOCK OCTANT-3468;So;0;ON;;;;;N;;;;; +1CD9A;BLOCK OCTANT-13468;So;0;ON;;;;;N;;;;; +1CD9B;BLOCK OCTANT-23468;So;0;ON;;;;;N;;;;; +1CD9C;BLOCK OCTANT-568;So;0;ON;;;;;N;;;;; +1CD9D;BLOCK OCTANT-1568;So;0;ON;;;;;N;;;;; +1CD9E;BLOCK OCTANT-2568;So;0;ON;;;;;N;;;;; +1CD9F;BLOCK OCTANT-12568;So;0;ON;;;;;N;;;;; +1CDA0;BLOCK OCTANT-3568;So;0;ON;;;;;N;;;;; +1CDA1;BLOCK OCTANT-13568;So;0;ON;;;;;N;;;;; +1CDA2;BLOCK OCTANT-23568;So;0;ON;;;;;N;;;;; +1CDA3;BLOCK OCTANT-123568;So;0;ON;;;;;N;;;;; +1CDA4;BLOCK OCTANT-4568;So;0;ON;;;;;N;;;;; +1CDA5;BLOCK OCTANT-14568;So;0;ON;;;;;N;;;;; +1CDA6;BLOCK OCTANT-24568;So;0;ON;;;;;N;;;;; +1CDA7;BLOCK OCTANT-124568;So;0;ON;;;;;N;;;;; +1CDA8;BLOCK OCTANT-34568;So;0;ON;;;;;N;;;;; +1CDA9;BLOCK OCTANT-134568;So;0;ON;;;;;N;;;;; +1CDAA;BLOCK OCTANT-234568;So;0;ON;;;;;N;;;;; +1CDAB;BLOCK OCTANT-1234568;So;0;ON;;;;;N;;;;; +1CDAC;BLOCK OCTANT-178;So;0;ON;;;;;N;;;;; +1CDAD;BLOCK OCTANT-278;So;0;ON;;;;;N;;;;; +1CDAE;BLOCK OCTANT-1278;So;0;ON;;;;;N;;;;; +1CDAF;BLOCK OCTANT-378;So;0;ON;;;;;N;;;;; +1CDB0;BLOCK OCTANT-1378;So;0;ON;;;;;N;;;;; +1CDB1;BLOCK OCTANT-2378;So;0;ON;;;;;N;;;;; +1CDB2;BLOCK OCTANT-12378;So;0;ON;;;;;N;;;;; +1CDB3;BLOCK OCTANT-478;So;0;ON;;;;;N;;;;; +1CDB4;BLOCK OCTANT-1478;So;0;ON;;;;;N;;;;; +1CDB5;BLOCK OCTANT-2478;So;0;ON;;;;;N;;;;; +1CDB6;BLOCK OCTANT-12478;So;0;ON;;;;;N;;;;; +1CDB7;BLOCK OCTANT-3478;So;0;ON;;;;;N;;;;; +1CDB8;BLOCK OCTANT-13478;So;0;ON;;;;;N;;;;; +1CDB9;BLOCK OCTANT-23478;So;0;ON;;;;;N;;;;; +1CDBA;BLOCK OCTANT-123478;So;0;ON;;;;;N;;;;; +1CDBB;BLOCK OCTANT-578;So;0;ON;;;;;N;;;;; +1CDBC;BLOCK OCTANT-1578;So;0;ON;;;;;N;;;;; +1CDBD;BLOCK OCTANT-2578;So;0;ON;;;;;N;;;;; +1CDBE;BLOCK OCTANT-12578;So;0;ON;;;;;N;;;;; +1CDBF;BLOCK OCTANT-3578;So;0;ON;;;;;N;;;;; +1CDC0;BLOCK OCTANT-13578;So;0;ON;;;;;N;;;;; +1CDC1;BLOCK OCTANT-23578;So;0;ON;;;;;N;;;;; +1CDC2;BLOCK OCTANT-123578;So;0;ON;;;;;N;;;;; +1CDC3;BLOCK OCTANT-4578;So;0;ON;;;;;N;;;;; +1CDC4;BLOCK OCTANT-14578;So;0;ON;;;;;N;;;;; +1CDC5;BLOCK OCTANT-24578;So;0;ON;;;;;N;;;;; +1CDC6;BLOCK OCTANT-124578;So;0;ON;;;;;N;;;;; +1CDC7;BLOCK OCTANT-34578;So;0;ON;;;;;N;;;;; +1CDC8;BLOCK OCTANT-134578;So;0;ON;;;;;N;;;;; +1CDC9;BLOCK OCTANT-234578;So;0;ON;;;;;N;;;;; +1CDCA;BLOCK OCTANT-1234578;So;0;ON;;;;;N;;;;; +1CDCB;BLOCK OCTANT-678;So;0;ON;;;;;N;;;;; +1CDCC;BLOCK OCTANT-1678;So;0;ON;;;;;N;;;;; +1CDCD;BLOCK OCTANT-2678;So;0;ON;;;;;N;;;;; +1CDCE;BLOCK OCTANT-12678;So;0;ON;;;;;N;;;;; +1CDCF;BLOCK OCTANT-3678;So;0;ON;;;;;N;;;;; +1CDD0;BLOCK OCTANT-13678;So;0;ON;;;;;N;;;;; +1CDD1;BLOCK OCTANT-23678;So;0;ON;;;;;N;;;;; +1CDD2;BLOCK OCTANT-123678;So;0;ON;;;;;N;;;;; +1CDD3;BLOCK OCTANT-4678;So;0;ON;;;;;N;;;;; +1CDD4;BLOCK OCTANT-14678;So;0;ON;;;;;N;;;;; +1CDD5;BLOCK OCTANT-24678;So;0;ON;;;;;N;;;;; +1CDD6;BLOCK OCTANT-124678;So;0;ON;;;;;N;;;;; +1CDD7;BLOCK OCTANT-34678;So;0;ON;;;;;N;;;;; +1CDD8;BLOCK OCTANT-134678;So;0;ON;;;;;N;;;;; +1CDD9;BLOCK OCTANT-234678;So;0;ON;;;;;N;;;;; +1CDDA;BLOCK OCTANT-1234678;So;0;ON;;;;;N;;;;; +1CDDB;BLOCK OCTANT-15678;So;0;ON;;;;;N;;;;; +1CDDC;BLOCK OCTANT-25678;So;0;ON;;;;;N;;;;; +1CDDD;BLOCK OCTANT-125678;So;0;ON;;;;;N;;;;; +1CDDE;BLOCK OCTANT-35678;So;0;ON;;;;;N;;;;; +1CDDF;BLOCK OCTANT-235678;So;0;ON;;;;;N;;;;; +1CDE0;BLOCK OCTANT-1235678;So;0;ON;;;;;N;;;;; +1CDE1;BLOCK OCTANT-45678;So;0;ON;;;;;N;;;;; +1CDE2;BLOCK OCTANT-145678;So;0;ON;;;;;N;;;;; +1CDE3;BLOCK OCTANT-1245678;So;0;ON;;;;;N;;;;; +1CDE4;BLOCK OCTANT-1345678;So;0;ON;;;;;N;;;;; +1CDE5;BLOCK OCTANT-2345678;So;0;ON;;;;;N;;;;; +1CDE6;TOP HALF STANDING PERSON;So;0;ON;;;;;N;;;;; +1CDE7;BOTTOM HALF STANDING PERSON;So;0;ON;;;;;N;;;;; +1CDE8;TOP HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDE9;BOTTOM HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDEA;TOP HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEB;BOTTOM HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEC;TOP HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDED;BOTTOM HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDEE;TOP HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEF;BOTTOM HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDF0;TOP HALF FORWARD-FACING RUNNER;So;0;ON;;;;;N;;;;; +1CDF1;BOTTOM HALF FORWARD-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDF2;BOTTOM HALF FORWARD-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDF3;BOTTOM HALF FORWARD-FACING RUNNER FRAME-3;So;0;ON;;;;;N;;;;; +1CDF4;BOTTOM HALF FORWARD-FACING RUNNER FRAME-4;So;0;ON;;;;;N;;;;; +1CDF5;MOON LANDER;So;0;ON;;;;;N;;;;; +1CDF6;TOP HALF FLAILING ROBOT FRAME-1;So;0;ON;;;;;N;;;;; +1CDF7;TOP HALF FLAILING ROBOT FRAME-2;So;0;ON;;;;;N;;;;; +1CDF8;DOWN-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDF9;LEFT-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDFA;SMALL UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDFB;UP-POINTING FROG;So;0;ON;;;;;N;;;;; +1CDFC;DOWN-POINTING FROG;So;0;ON;;;;;N;;;;; +1CDFD;EXPLOSION FRAME-1;So;0;ON;;;;;N;;;;; +1CDFE;EXPLOSION FRAME-2;So;0;ON;;;;;N;;;;; +1CDFF;EXPLOSION FRAME-3;So;0;ON;;;;;N;;;;; +1CE00;RIGHT HALF AND LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1CE01;LOWER HALF AND UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1CE02;EXPLOSION AT HORIZON;So;0;ON;;;;;N;;;;; +1CE03;UPPER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; +1CE04;LOWER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; +1CE05;HEAVY WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CE06;WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; +1CE07;TOP LEFT BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;;;;; +1CE08;FUNNEL;So;0;ON;;;;;N;;;;; +1CE09;BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE0A;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CE0B;LEFT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;; +1CE0C;RIGHT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;; +1CE0D;LEFT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;; +1CE0E;RIGHT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;; +1CE0F;HORIZONTAL LINE WITH TICK MARK;So;0;ON;;;;;N;;;;; +1CE10;LEFT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE11;RIGHT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE12;HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE13;LOWER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE14;UPPER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE15;VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE16;BOX DRAWINGS LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; +1CE17;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +1CE18;BOX DRAWINGS LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; +1CE19;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; +1CE1A;LARGE TYPE PIECE UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE1B;LARGE TYPE PIECE UPPER LEFT CORNER;So;0;ON;;;;;N;;;;; +1CE1C;LARGE TYPE PIECE UPPER TERMINAL;So;0;ON;;;;;N;;;;; +1CE1D;LARGE TYPE PIECE UPPER LEFT CROTCH;So;0;ON;;;;;N;;;;; +1CE1E;LARGE TYPE PIECE LEFT ARM;So;0;ON;;;;;N;;;;; +1CE1F;LARGE TYPE PIECE CROSSBAR;So;0;ON;;;;;N;;;;; +1CE20;LARGE TYPE PIECE CROSSBAR WITH LOWER STEM;So;0;ON;;;;;N;;;;; +1CE21;LARGE TYPE PIECE UPPER HALF VERTEX OF M;So;0;ON;;;;;N;;;;; +1CE22;LARGE TYPE PIECE DIAGONAL LOWER LEFT;So;0;ON;;;;;N;;;;; +1CE23;LARGE TYPE PIECE SHORT UPPER TERMINAL;So;0;ON;;;;;N;;;;; +1CE24;LARGE TYPE PIECE UPPER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE25;LARGE TYPE PIECE RIGHT ARM;So;0;ON;;;;;N;;;;; +1CE26;LARGE TYPE PIECE UPPER RIGHT CROTCH;So;0;ON;;;;;N;;;;; +1CE27;LARGE TYPE PIECE UPPER RIGHT CORNER;So;0;ON;;;;;N;;;;; +1CE28;LARGE TYPE PIECE STEM WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; +1CE29;LARGE TYPE PIECE STEM;So;0;ON;;;;;N;;;;; +1CE2A;LARGE TYPE PIECE DIAGONAL UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE2B;LARGE TYPE PIECE DIAGONAL UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CE2C;LARGE TYPE PIECE DIAGONAL LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE2D;LARGE TYPE PIECE SHORT LOWER TERMINAL;So;0;ON;;;;;N;;;;; +1CE2E;LARGE TYPE PIECE LOWER LEFT AND UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE2F;LARGE TYPE PIECE CENTRE OF K;So;0;ON;;;;;N;;;;; +1CE30;LARGE TYPE PIECE LOWER HALF VERTEX OF M;So;0;ON;;;;;N;;;;; +1CE31;LARGE TYPE PIECE UPPER HALF VERTEX OF W;So;0;ON;;;;;N;;;;; +1CE32;LARGE TYPE PIECE CENTRE OF X;So;0;ON;;;;;N;;;;; +1CE33;LARGE TYPE PIECE CENTRE OF Y;So;0;ON;;;;;N;;;;; +1CE34;LARGE TYPE PIECE CENTRE OF Z WITH CROSSBAR;So;0;ON;;;;;N;;;;; +1CE35;LARGE TYPE PIECE RAISED UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE36;LARGE TYPE PIECE STEM WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; +1CE37;LARGE TYPE PIECE LOWER RIGHT AND UPPER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE38;LARGE TYPE PIECE DIAGONAL UPPER LEFT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +1CE39;LARGE TYPE PIECE STEM WITH LEFT JOINT;So;0;ON;;;;;N;;;;; +1CE3A;LARGE TYPE PIECE STEM WITH CROSSBAR;So;0;ON;;;;;N;;;;; +1CE3B;LARGE TYPE PIECE DIAGONAL UPPER LEFT;So;0;ON;;;;;N;;;;; +1CE3C;LARGE TYPE PIECE LOWER TERMINAL;So;0;ON;;;;;N;;;;; +1CE3D;LARGE TYPE PIECE LOWER LEFT CORNER;So;0;ON;;;;;N;;;;; +1CE3E;LARGE TYPE PIECE LOWER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE3F;LARGE TYPE PIECE LOWER LEFT CROTCH;So;0;ON;;;;;N;;;;; +1CE40;LARGE TYPE PIECE CROSSBAR WITH UPPER STEM;So;0;ON;;;;;N;;;;; +1CE41;LARGE TYPE PIECE VERTEX OF V;So;0;ON;;;;;N;;;;; +1CE42;LARGE TYPE PIECE LOWER HALF VERTEX OF W;So;0;ON;;;;;N;;;;; +1CE43;LARGE TYPE PIECE LOWER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE44;LARGE TYPE PIECE LOWER RIGHT CORNER;So;0;ON;;;;;N;;;;; +1CE45;LARGE TYPE PIECE LOWER RIGHT ARC WITH TAIL;So;0;ON;;;;;N;;;;; +1CE46;LARGE TYPE PIECE LOWER RIGHT CROTCH;So;0;ON;;;;;N;;;;; +1CE47;LARGE TYPE PIECE STEM-45;So;0;ON;;;;;N;;;;; +1CE48;LARGE TYPE PIECE STEM-2345;So;0;ON;;;;;N;;;;; +1CE49;LARGE TYPE PIECE STEM-4;So;0;ON;;;;;N;;;;; +1CE4A;LARGE TYPE PIECE STEM-34;So;0;ON;;;;;N;;;;; +1CE4B;LARGE TYPE PIECE STEM-234;So;0;ON;;;;;N;;;;; +1CE4C;LARGE TYPE PIECE STEM-1234;So;0;ON;;;;;N;;;;; +1CE4D;LARGE TYPE PIECE STEM-3;So;0;ON;;;;;N;;;;; +1CE4E;LARGE TYPE PIECE STEM-23;So;0;ON;;;;;N;;;;; +1CE4F;LARGE TYPE PIECE STEM-2;So;0;ON;;;;;N;;;;; +1CE50;LARGE TYPE PIECE STEM-12;So;0;ON;;;;;N;;;;; +1CE51;SEPARATED BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; +1CE52;SEPARATED BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; +1CE53;SEPARATED BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; +1CE54;SEPARATED BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;; +1CE55;SEPARATED BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;; +1CE56;SEPARATED BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;; +1CE57;SEPARATED BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;; +1CE58;SEPARATED BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;; +1CE59;SEPARATED BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;; +1CE5A;SEPARATED BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;; +1CE5B;SEPARATED BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;; +1CE5C;SEPARATED BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;; +1CE5D;SEPARATED BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;; +1CE5E;SEPARATED BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;; +1CE5F;SEPARATED BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;; +1CE60;SEPARATED BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;; +1CE61;SEPARATED BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;; +1CE62;SEPARATED BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;; +1CE63;SEPARATED BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;; +1CE64;SEPARATED BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;; +1CE65;SEPARATED BLOCK SEXTANT-135;So;0;ON;;;;;N;;;;; +1CE66;SEPARATED BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;; +1CE67;SEPARATED BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;; +1CE68;SEPARATED BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;; +1CE69;SEPARATED BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;; +1CE6A;SEPARATED BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;; +1CE6B;SEPARATED BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;; +1CE6C;SEPARATED BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;; +1CE6D;SEPARATED BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;; +1CE6E;SEPARATED BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;; +1CE6F;SEPARATED BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;; +1CE70;SEPARATED BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;; +1CE71;SEPARATED BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;; +1CE72;SEPARATED BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;; +1CE73;SEPARATED BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;; +1CE74;SEPARATED BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;; +1CE75;SEPARATED BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;; +1CE76;SEPARATED BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;; +1CE77;SEPARATED BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;; +1CE78;SEPARATED BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;; +1CE79;SEPARATED BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;; +1CE7A;SEPARATED BLOCK SEXTANT-246;So;0;ON;;;;;N;;;;; +1CE7B;SEPARATED BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;; +1CE7C;SEPARATED BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;; +1CE7D;SEPARATED BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;; +1CE7E;SEPARATED BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;; +1CE7F;SEPARATED BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;; +1CE80;SEPARATED BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;; +1CE81;SEPARATED BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;; +1CE82;SEPARATED BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;; +1CE83;SEPARATED BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;; +1CE84;SEPARATED BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;; +1CE85;SEPARATED BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;; +1CE86;SEPARATED BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;; +1CE87;SEPARATED BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;; +1CE88;SEPARATED BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;; +1CE89;SEPARATED BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;; +1CE8A;SEPARATED BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;; +1CE8B;SEPARATED BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;; +1CE8C;SEPARATED BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;; +1CE8D;SEPARATED BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;; +1CE8E;SEPARATED BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;; +1CE8F;SEPARATED BLOCK SEXTANT-123456;So;0;ON;;;;;N;;;;; +1CE90;UPPER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE91;UPPER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE92;UPPER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE93;UPPER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE94;UPPER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE95;UPPER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE96;UPPER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE97;UPPER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE98;LOWER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE99;LOWER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9A;LOWER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9B;LOWER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9C;LOWER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9D;LOWER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9E;LOWER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9F;LOWER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CEA0;RIGHT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA1;RIGHT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA2;LEFT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA3;LEFT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA4;LOWER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA5;LOWER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA6;UPPER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA7;UPPER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA8;LEFT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA9;LEFT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAA;RIGHT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAB;RIGHT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAC;UPPER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAD;UPPER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAE;LOWER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAF;LOWER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEB0;HORIZONTAL ZIGZAG LINE;So;0;ON;;;;;N;;;;; +1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;; +1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;; +1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; @@ -29545,7 +34630,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; -1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;ON;<font> 2207;;;;N;;;;; 1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; @@ -29603,7 +34688,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; -1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;; 1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; @@ -29661,7 +34746,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; -1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;; 1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; @@ -29719,7 +34804,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; -1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;ON;<font> 2207;;;;N;;;;; 1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; @@ -29777,7 +34862,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; -1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;; 1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; @@ -30875,6 +35960,50 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E4F7;NAG MUNDARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1E4F8;NAG MUNDARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E4F9;NAG MUNDARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E5D0;OL ONAL LETTER O;Lo;0;L;;;;;N;;;;; +1E5D1;OL ONAL LETTER OM;Lo;0;L;;;;;N;;;;; +1E5D2;OL ONAL LETTER ONG;Lo;0;L;;;;;N;;;;; +1E5D3;OL ONAL LETTER ORR;Lo;0;L;;;;;N;;;;; +1E5D4;OL ONAL LETTER OO;Lo;0;L;;;;;N;;;;; +1E5D5;OL ONAL LETTER OY;Lo;0;L;;;;;N;;;;; +1E5D6;OL ONAL LETTER A;Lo;0;L;;;;;N;;;;; +1E5D7;OL ONAL LETTER AD;Lo;0;L;;;;;N;;;;; +1E5D8;OL ONAL LETTER AB;Lo;0;L;;;;;N;;;;; +1E5D9;OL ONAL LETTER AH;Lo;0;L;;;;;N;;;;; +1E5DA;OL ONAL LETTER AL;Lo;0;L;;;;;N;;;;; +1E5DB;OL ONAL LETTER AW;Lo;0;L;;;;;N;;;;; +1E5DC;OL ONAL LETTER I;Lo;0;L;;;;;N;;;;; +1E5DD;OL ONAL LETTER IT;Lo;0;L;;;;;N;;;;; +1E5DE;OL ONAL LETTER IP;Lo;0;L;;;;;N;;;;; +1E5DF;OL ONAL LETTER ITT;Lo;0;L;;;;;N;;;;; +1E5E0;OL ONAL LETTER ID;Lo;0;L;;;;;N;;;;; +1E5E1;OL ONAL LETTER IN;Lo;0;L;;;;;N;;;;; +1E5E2;OL ONAL LETTER U;Lo;0;L;;;;;N;;;;; +1E5E3;OL ONAL LETTER UK;Lo;0;L;;;;;N;;;;; +1E5E4;OL ONAL LETTER UDD;Lo;0;L;;;;;N;;;;; +1E5E5;OL ONAL LETTER UJ;Lo;0;L;;;;;N;;;;; +1E5E6;OL ONAL LETTER UNY;Lo;0;L;;;;;N;;;;; +1E5E7;OL ONAL LETTER UR;Lo;0;L;;;;;N;;;;; +1E5E8;OL ONAL LETTER E;Lo;0;L;;;;;N;;;;; +1E5E9;OL ONAL LETTER ES;Lo;0;L;;;;;N;;;;; +1E5EA;OL ONAL LETTER EH;Lo;0;L;;;;;N;;;;; +1E5EB;OL ONAL LETTER EC;Lo;0;L;;;;;N;;;;; +1E5EC;OL ONAL LETTER ENN;Lo;0;L;;;;;N;;;;; +1E5ED;OL ONAL LETTER EG;Lo;0;L;;;;;N;;;;; +1E5EE;OL ONAL SIGN MU;Mn;230;NSM;;;;;N;;;;; +1E5EF;OL ONAL SIGN IKIR;Mn;220;NSM;;;;;N;;;;; +1E5F0;OL ONAL SIGN HODDOND;Lo;0;L;;;;;N;;;;; +1E5F1;OL ONAL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E5F2;OL ONAL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E5F3;OL ONAL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E5F4;OL ONAL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E5F5;OL ONAL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E5F6;OL ONAL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E5F7;OL ONAL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E5F8;OL ONAL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; 1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; 1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; @@ -33357,6 +38486,18 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;; 1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;; +1F8B2;RIGHTWARDS ARROW WITH LOWER HOOK;So;0;ON;;;;;N;;;;; +1F8B3;DOWNWARDS BLACK ARROW TO BAR;So;0;ON;;;;;N;;;;; +1F8B4;NEGATIVE SQUARED LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B5;NEGATIVE SQUARED UPWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B6;NEGATIVE SQUARED RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B7;NEGATIVE SQUARED DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B8;NORTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8B9;NORTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8BA;SOUTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; @@ -33733,6 +38874,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;; 1FA87;MARACAS;So;0;ON;;;;;N;;;;; 1FA88;FLUTE;So;0;ON;;;;;N;;;;; +1FA89;HARP;So;0;ON;;;;;N;;;;; +1FA8F;SHOVEL;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; 1FA92;RAZOR;So;0;ON;;;;;N;;;;; @@ -33779,6 +38922,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FABB;HYACINTH;So;0;ON;;;;;N;;;;; 1FABC;JELLYFISH;So;0;ON;;;;;N;;;;; 1FABD;WING;So;0;ON;;;;;N;;;;; +1FABE;LEAFLESS TREE;So;0;ON;;;;;N;;;;; 1FABF;GOOSE;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; @@ -33786,6 +38930,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; +1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;; 1FACE;MOOSE;So;0;ON;;;;;N;;;;; 1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; @@ -33800,6 +38945,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAD9;JAR;So;0;ON;;;;;N;;;;; 1FADA;GINGER ROOT;So;0;ON;;;;;N;;;;; 1FADB;PEA POD;So;0;ON;;;;;N;;;;; +1FADC;ROOT VEGETABLE;So;0;ON;;;;;N;;;;; +1FADF;SPLATTER;So;0;ON;;;;;N;;;;; 1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; 1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; 1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; @@ -33809,6 +38956,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; +1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;; 1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; 1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; @@ -34020,6 +39168,43 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;; 1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;; 1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; +1FBCB;WHITE CROSS MARK;So;0;ON;;;;;N;;;;; +1FBCC;RAISED SMALL LEFT SQUARE BRACKET;So;0;ON;;;;;N;;;;; +1FBCD;BLACK SMALL UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; +1FBCE;LEFT TWO THIRDS BLOCK;So;0;ON;;;;;N;;;;; +1FBCF;LEFT ONE THIRD BLOCK;So;0;ON;;;;;N;;;;; +1FBD0;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBD1;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; +1FBD2;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; +1FBD3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBD4;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; +1FBD5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBD6;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; +1FBD7;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBD8;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1FBD9;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDA;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDB;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBDC;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1FBDD;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDE;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDF;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBE0;TOP JUSTIFIED LOWER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE1;RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE2;BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE3;LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE4;UPPER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE5;LOWER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE6;MIDDLE LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE7;MIDDLE RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE8;TOP JUSTIFIED LOWER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBE9;RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEA;BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEB;LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEC;TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBED;BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEE;BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEF;TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; 1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; diff --git a/localedata/unicode-gen/ctype_compatibility.py b/localedata/unicode-gen/ctype_compatibility.py index c3ac1b7bd2..8907a5ecd5 100755 --- a/localedata/unicode-gen/ctype_compatibility.py +++ b/localedata/unicode-gen/ctype_compatibility.py @@ -10,7 +10,7 @@ # # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public diff --git a/localedata/unicode-gen/ctype_compatibility_test_cases.py b/localedata/unicode-gen/ctype_compatibility_test_cases.py index 5998e5a46a..7a94d89f47 100644 --- a/localedata/unicode-gen/ctype_compatibility_test_cases.py +++ b/localedata/unicode-gen/ctype_compatibility_test_cases.py @@ -9,7 +9,7 @@ # # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public diff --git a/localedata/unicode-gen/utf8_compatibility.py b/localedata/unicode-gen/utf8_compatibility.py index 32566363c6..26e33eff62 100755 --- a/localedata/unicode-gen/utf8_compatibility.py +++ b/localedata/unicode-gen/utf8_compatibility.py @@ -10,7 +10,7 @@ # # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public diff --git a/localedata/unicode-gen/utf8_gen.py b/localedata/unicode-gen/utf8_gen.py index 1be197a8f7..dd36db93ff 100755 --- a/localedata/unicode-gen/utf8_gen.py +++ b/localedata/unicode-gen/utf8_gen.py @@ -11,7 +11,7 @@ # # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public diff --git a/manual/Makefile b/manual/Makefile index a6c05db540..6a4cfbeb76 100644 --- a/manual/Makefile +++ b/manual/Makefile @@ -69,6 +69,11 @@ chapters.% top-menu.%: libc-texinfo.sh $(texis-path) Makefile '$(chapters)' \ '$(appendices) $(licenses)' +# Verify validity of texinfo sources against project rules. +tests-special += \ + $(objpfx)check-deftype.out \ + $(objpfx)check-safety.out \ + # tests-special $(objpfx)libc.dvi $(objpfx)libc.pdf $(objpfx)libc.info: \ $(addprefix $(objpfx),$(libc-texi-generated)) @@ -83,10 +88,19 @@ $(objpfx)summary.texi: $(objpfx)stamp-summary ; $(objpfx)stamp-summary: summary.pl $(filter-out $(objpfx)summary.texi, \ $(texis-path)) $(SHELL) ./check-safety.sh $(filter-out $(objpfx)%, $(texis-path)) + $(SHELL) ./check-deftype.sh $(filter-out $(objpfx)%, $(texis-path)) LC_ALL=C $(PERL) $^ > $(objpfx)summary-tmp $(move-if-change) $(objpfx)summary-tmp $(objpfx)summary.texi touch $@ +$(objpfx)check-safety.out: check-safety.sh + $(SHELL) $< > $@ ; \ + $(evaluate-test) + +$(objpfx)check-deftype.out: check-deftype.sh + $(SHELL) $< > $@ ; \ + $(evaluate-test) + # Generate a file which can be added to the `dir' content to provide direct # access to the documentation of the function, variables, and other # definitions. @@ -152,10 +166,19 @@ $(objpfx)%.pdf: %.texinfo # Distribution. -minimal-dist = summary.pl texis.awk tsort.awk libc-texinfo.sh libc.texinfo \ - libm-err.texi stamp-libm-err check-safety.sh \ - $(filter-out summary.texi, $(nonexamples)) \ - $(patsubst %.c.texi,examples/%.c, $(examples)) +minimal-dist = \ + $(filter-out summary.texi, $(nonexamples)) \ + $(patsubst %.c.texi,examples/%.c, $(examples)) \ + check-deftype.sh \ + check-safety.sh \ + libc-texinfo.sh \ + libc.texinfo \ + libm-err.texi \ + stamp-libm-err \ + summary.pl \ + texis.awk \ + tsort.awk \ + # minimal-dist indices = cp fn pg tp vr ky generated-dirs += libc diff --git a/manual/charset.texi b/manual/charset.texi index 427db3bc80..3aaa62d088 100644 --- a/manual/charset.texi +++ b/manual/charset.texi @@ -2422,11 +2422,11 @@ written into the buffer to signal how much output is available. If this conversion step is not the last one, the element must not be modified. The @code{__outbufend} element must not be modified. -@item int __is_last -This element is nonzero if this conversion step is the last one. This -information is necessary for the recursion. See the description of the -conversion function internals below. This element must never be -modified. +@item int __flags +This field is a set of flags. The @code{__GCONV_IS_LAST} bit is set if +this conversion step is the last one. This information is necessary for +the recursion. See the description of the conversion function internals +below. This element must never be modified. @item int __invocation_counter The conversion function can use this element to see how many calls of @@ -2731,8 +2731,8 @@ Otherwise the function has to emit a byte sequence to bring the state object into the initial state. Once this all happened the other conversion modules in the chain of conversions have to get the same chance. Whether another step follows can be determined from the -@code{__is_last} element of the step data structure to which the first -parameter points. +@code{__GCONV_IS_LAST} flag in the @code{__flags} field of the step +data structure to which the first parameter points. The more interesting mode is when actual text has to be converted. The first step in this case is to convert as much text as possible from the @@ -2866,7 +2866,7 @@ gconv (struct __gconv_step *step, struct __gconv_step_data *data, /* @r{Call the steps down the chain if there are any but only} @r{if we successfully emitted the escape sequence.} */ - if (status == __GCONV_OK && ! data->__is_last) + if (status == __GCONV_OK && ! (data->__flags & __GCONV_IS_LAST)) status = fct (next_step, next_data, NULL, NULL, written, 1); @} @@ -2892,7 +2892,7 @@ gconv (struct __gconv_step *step, struct __gconv_step_data *data, /* @r{If this is the last step, leave the loop. There is} @r{nothing we can do.} */ - if (data->__is_last) + if (data->__flags & __GCONV_IS_LAST) @{ /* @r{Store information about how many bytes are} @r{available.} */ diff --git a/manual/check-deftype.sh b/manual/check-deftype.sh new file mode 100644 index 0000000000..395c99af6a --- /dev/null +++ b/manual/check-deftype.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +# Copyright 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +# Check that the @deftypefun command is called with the expected +# arguments and includes checking for common mistakes including +# failure to include a space after the function name, or incorrect +# quoting. + +success=: + +# If no arguments are given, take all *.texi files in the current directory. +test $# != 0 || set *.texi + +# We search for all @deftypefun and @deftypefunx command uses. +# Then we remove all of those that match our expectations. +# A @deftypefun or @deftypefunx command takes 3 arguments: +# - return type +# - name +# - arguments +# This is different from @deftypefn which includes an additional +# category which is implicit here. +grep -n -r '^@deftypefun' "$@" | +grep -v '^.*@deftypefunx\?'\ +' \({\?[a-zA-Z0-9_ *]*}\?\) \([a-zA-Z0-9_]*\) (.*)$' && +success=false + +# We search for all @deftypefn and @deftypefnx command uses. +# We have 4 arguments in the command including the category. +grep -n -r '^@deftypefn' "$@" | +grep -v '^.*@deftypefnx\?'\ +' {\?[a-zA-Z ]*}\? \({\?[a-zA-Z0-9@{}_ *]*}\?\) \([a-zA-Z0-9_]*\) (.*)$' && +success=false + +$success diff --git a/manual/creature.texi b/manual/creature.texi index be0a5ac7e6..09e1c9670f 100644 --- a/manual/creature.texi +++ b/manual/creature.texi @@ -233,6 +233,13 @@ Only some features from this draft standard are supported by @theglibc{}. The older name @code{_ISOC2X_SOURCE} is also supported. @end defvr +@defvr Macro _ISOC2Y_SOURCE +@standards{C2Y, (none)} +If this macro is defined, ISO C2Y extensions to ISO C23 are included. +Only some features from this draft standard are supported by +@theglibc{}. +@end defvr + @defvr Macro __STDC_WANT_LIB_EXT2__ @standards{ISO, (none)} If you define this macro to the value @code{1}, features from ISO/IEC diff --git a/manual/ipc.texi b/manual/ipc.texi index 6a6e5ad410..32c5ac066f 100644 --- a/manual/ipc.texi +++ b/manual/ipc.texi @@ -20,7 +20,7 @@ by @theglibc{}. @c Need descriptions for all of these functions. @subsection System V Semaphores -@deftypefun int semctl (int @var{semid}, int @var{semnum}, int @var{cmd}); +@deftypefun int semctl (int @var{semid}, int @var{semnum}, int @var{cmd}) @safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{/linux}}} @c syscall(ipc) ok @c @@ -30,35 +30,35 @@ by @theglibc{}. @c semid_ds. @end deftypefun -@deftypefun int semget (key_t @var{key}, int @var{nsems}, int @var{semflg}); +@deftypefun int semget (key_t @var{key}, int @var{nsems}, int @var{semflg}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c syscall(ipc) ok @end deftypefun -@deftypefun int semop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}); +@deftypefun int semop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c syscall(ipc) ok @end deftypefun -@deftypefun int semtimedop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}, const struct timespec *@var{timeout}); +@deftypefun int semtimedop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}, const struct timespec *@var{timeout}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c syscall(ipc) ok @end deftypefun @subsection POSIX Semaphores -@deftypefun int sem_init (sem_t *@var{sem}, int @var{pshared}, unsigned int @var{value}); +@deftypefun int sem_init (sem_t *@var{sem}, int @var{pshared}, unsigned int @var{value}) @safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} @c Does not atomically update sem_t therefore AC-unsafe @c because it can leave sem_t partially initialized. @end deftypefun -@deftypefun int sem_destroy (sem_t *@var{sem}); +@deftypefun int sem_destroy (sem_t *@var{sem}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Function does nothing and is therefore always safe. @end deftypefun -@deftypefun sem_t *sem_open (const char *@var{name}, int @var{oflag}, ...); +@deftypefun {sem_t *} sem_open (const char *@var{name}, int @var{oflag}, ...) @safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acuinit{}}} @c pthread_once asuinit @c @@ -67,7 +67,7 @@ by @theglibc{}. @c shmfs on Linux. @end deftypefun -@deftypefun int sem_close (sem_t *@var{sem}); +@deftypefun int sem_close (sem_t *@var{sem}) @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} @c lll_lock asulock aculock @c twalk mtsrace{:root} @@ -77,13 +77,13 @@ by @theglibc{}. @c are not updated atomically. @end deftypefun -@deftypefun int sem_unlink (const char *@var{name}); +@deftypefun int sem_unlink (const char *@var{name}) @safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acucorrupt{}}} @c pthread_once asuinit acucorrupt aculock @c mempcpy acucorrupt @end deftypefun -@deftypefun int sem_wait (sem_t *@var{sem}); +@deftypefun int sem_wait (sem_t *@var{sem}) @safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} @c atomic_fetch_add_relaxed (nwaiters) acucorrupt @c @@ -95,22 +95,22 @@ by @theglibc{}. @c waiters count. @end deftypefun -@deftypefun int sem_timedwait (sem_t *@var{sem}, const struct timespec *@var{abstime}); +@deftypefun int sem_timedwait (sem_t *@var{sem}, const struct timespec *@var{abstime}) @safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} @c Same safety issues as sem_wait. @end deftypefun -@deftypefun int sem_trywait (sem_t *@var{sem}); +@deftypefun int sem_trywait (sem_t *@var{sem}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c All atomic operations are safe in all contexts. @end deftypefun -@deftypefun int sem_post (sem_t *@var{sem}); +@deftypefun int sem_post (sem_t *@var{sem}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Same safety as sem_trywait. @end deftypefun -@deftypefun int sem_getvalue (sem_t *@var{sem}, int *@var{sval}); +@deftypefun int sem_getvalue (sem_t *@var{sem}, int *@var{sval}) @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Atomic write of a value is safe in all contexts. @end deftypefun diff --git a/manual/llio.texi b/manual/llio.texi index a035c3e20f..b6bc7f2210 100644 --- a/manual/llio.texi +++ b/manual/llio.texi @@ -1097,6 +1097,27 @@ streams persist in other processes, their file positions become undefined as a result. To prevent this, you must clean up the streams before destroying them. +In addition to cleaning up a stream before doing I/O using another +linked channel, additional precautions are needed to ensure a +well-defined file position indicator in some cases. If both the +following conditions hold, you must set the file position indicator on +the new channel (a stream) using a function such as @code{fseek}. + +@itemize @bullet +@item +The new linked channel is a stream that was previously active. + +@item +The file position indicator was previously set on that channel (while +it was previously active) with a function such as @code{fseek}. +@end itemize + +POSIX requires such precautions in more cases: if either the old or +the new linked channel is a stream (whether or not previously active) +and the file position indicator was previously set on any channel +linked to those channels with a function such as @code{fseek} or +@code{lseek}. + @node Independent Channels @subsection Independent Channels @cindex independent channels @@ -1381,6 +1402,19 @@ Per-IO synchronization as if the file was opened with @code{O_APPEND} flag. @item RWF_NOAPPEND This flag allows an offset to be honored, even if the file was opened with @code{O_APPEND} flag. + +@item RWF_ATOMIC +Indicate that the write is to be issued with torn-write prevention. The +input buffer should follow some contraints: the total length should be +power-of-2 in size and also sizes between @code{atomic_write_unit_min} +and @code{atomic_write_unit_max}, the @code{struct iovec} count should be +up to @code{atomic_write_segments_max}, and the offset should be +naturally-aligned with regard to total write length. + +The @code{atomic_*} values can be obtained with @code{statx} along with +@code{STATX_WRITE_ATOMIC} flag. + +This is a Linux-specific extension. @end vtable When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the @@ -1762,6 +1796,15 @@ write dirty metadata out whenever dirty data is written out. Unlike most other flags, this one will fail unless @code{MAP_SHARED_VALIDATE} is also given. +@item MAP_DROPPABLE +Request the page to be never written out to swap, it will be zeroed +under memory pressure (so kernel can just drop the page), it is inherited +by fork, it is not counted against @code{mlock} budget, and if there is +not enough memory to service a page fault there is no fatal error (so no +signal is sent). + +The @code{MAP_DROPPABLE} flag is specific to Linux. + @end vtable @code{mmap} returns the address of the new mapping, or @@ -4831,12 +4874,12 @@ of an IOCTL, see @ref{Out-of-Band Data}. @manpagefunctionstub{poll,2} @end deftypefun -@deftypefun int epoll_create(int @var{size}) +@deftypefun int epoll_create (int @var{size}) @manpagefunctionstub{epoll_create,2} @end deftypefun -@deftypefun int epoll_wait(int @var{epfd}, struct epoll_event *@var{events}, int @var{maxevents}, int @var{timeout}) +@deftypefun int epoll_wait (int @var{epfd}, struct epoll_event *@var{events}, int @var{maxevents}, int @var{timeout}) @manpagefunctionstub{epoll_wait,2} @end deftypefun diff --git a/manual/macros.texi b/manual/macros.texi index 579da3fb81..f48dd4ec22 100644 --- a/manual/macros.texi +++ b/manual/macros.texi @@ -282,10 +282,13 @@ cwd\comments\ @macro standardsx {element, standard, header} @end macro +@macro manpageurl {func, sec} +@url{https://man7.org/linux/man-pages/man\sec\/\func\.\sec\.html} +@end macro + @macro manpagefunctionstub {func,sec} This documentation is a stub. For additional information on this -function, consult the manual page -@url{https://man7.org/linux/man-pages/man\sec\/\func\.\sec\.html}. +function, consult the manual page @manpageurl{\func\,\sec\}. @xref{Linux Kernel}. @end macro diff --git a/manual/memory.texi b/manual/memory.texi index 3710d7ec66..a39805a8dd 100644 --- a/manual/memory.texi +++ b/manual/memory.texi @@ -2935,7 +2935,7 @@ exceed the process' data storage limit. @end deftypefun -@deftypefun void *sbrk (ptrdiff_t @var{delta}) +@deftypefun {void *} sbrk (ptrdiff_t @var{delta}) @standards{BSD, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @@ -3077,7 +3077,7 @@ returned by @code{mmap} or @code{mmap64}. @cindex memory protection key @cindex protection key @cindex MPK -On some systems, further restrictions can be added to specific pages +On some systems, further access restrictions can be added to specific pages using @dfn{memory protection keys}. These restrictions work as follows: @itemize @bullet @@ -3089,27 +3089,27 @@ during memory accesses. New keys can be allocated with the @code{pkey_mprotect}. @item -Each thread has a set of separate access right restriction for each -protection key. These access rights can be manipulated using the +Each thread has a set of separate access restrictions for each +protection key. These access restrictions can be manipulated using the @code{pkey_set} and @code{pkey_get} functions. @item During a memory access, the system obtains the protection key for the -accessed page and uses that to determine the applicable access rights, +accessed page and uses that to determine the applicable access restrictions, as configured for the current thread. If the access is restricted, a segmentation fault is the result ((@pxref{Program Error Signals}). These checks happen in addition to the @code{PROT_}* protection flags set by @code{mprotect} or @code{pkey_mprotect}. @end itemize -New threads and subprocesses inherit the access rights of the current +New threads and subprocesses inherit the access restrictions of the current thread. If a protection key is allocated subsequently, existing threads (except the current) will use an unspecified system default for the -access rights associated with newly allocated keys. +access restrictions associated with newly allocated keys. -Upon entering a signal handler, the system resets the access rights of +Upon entering a signal handler, the system resets the access restrictions of the current thread so that pages with the default key can be accessed, -but the access rights for other protection keys are unspecified. +but the access restrictions for other protection keys are unspecified. Applications are expected to allocate a key once using @code{pkey_alloc}, and apply the key to memory regions which need @@ -3151,24 +3151,24 @@ it again: In this example, a negative key value indicates that no key had been allocated, which means that the system lacks support for memory -protection keys and it is not necessary to change the the access rights +protection keys and it is not necessary to change the the access restrictions of the current thread (because it always has access). Compared to using @code{mprotect} to change the page protection flags, this approach has two advantages: It is thread-safe in the sense that -the access rights are only changed for the current thread, so another -thread which changes its own access rights concurrently to gain access -to the mapping will not suddenly see its access rights revoked. And +the access restrictions are only changed for the current thread, so another +thread which changes its own access restrictions concurrently to gain access +to the mapping will not suddenly see its access restrictions updated. And @code{pkey_set} typically does not involve a call into the kernel and a context switch, so it is more efficient. -@deftypefun int pkey_alloc (unsigned int @var{flags}, unsigned int @var{restrictions}) +@deftypefun int pkey_alloc (unsigned int @var{flags}, unsigned int @var{access_restrictions}) @standards{Linux, sys/mman.h} @safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} Allocate a new protection key. The @var{flags} argument is reserved and -must be zero. The @var{restrictions} argument specifies access rights +must be zero. The @var{access_restrictions} argument specifies access restrictions which are applied to the current thread (as if with @code{pkey_set} -below). Access rights of other threads are not changed. +below). Access restrictions of other threads are not changed. The function returns the new protection key, a non-negative number, or @math{-1} on error. @@ -3183,7 +3183,7 @@ The system does not implement memory protection keys. @item EINVAL The @var{flags} argument is not zero. -The @var{restrictions} argument is invalid. +The @var{access_restrictions} argument is invalid. The system does not implement memory protection keys or runs in a mode in which memory protection keys are disabled. @@ -3203,7 +3203,7 @@ in which memory protection keys are disabled. Deallocate the protection key, so that it can be reused by @code{pkey_alloc}. -Calling this function does not change the access rights of the freed +Calling this function does not change the access restrictions of the freed protection key. The calling thread and other threads may retain access to it, even if it is subsequently allocated again. For this reason, it is not recommended to call the @code{pkey_free} function. @@ -3251,14 +3251,14 @@ not @math{-1}. @end table @end deftypefun -@deftypefun int pkey_set (int @var{key}, unsigned int @var{rights}) +@deftypefun int pkey_set (int @var{key}, unsigned int @var{access_restrictions}) @standards{Linux, sys/mman.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} -Change the access rights of the current thread for memory pages with the -protection key @var{key} to @var{rights}. If @var{rights} is zero, no -additional access restrictions on top of the page protection flags are -applied. Otherwise, @var{rights} is a combination of the following -flags: +Change the access restrictions of the current thread for memory pages with +the protection key @var{key} to @var{access_restrictions}. If +@var{access_restrictions} is zero, no additional access restrictions on top of +the page protection flags are applied. Otherwise, @var{access_restrictions} is +a combination of the following flags: @vtable @code @item PKEY_DISABLE_WRITE @@ -3290,18 +3290,22 @@ function: @table @code @item EINVAL -The system does not support the access rights restrictions expressed in -the @var{rights} argument. +The system does not support the access restrictions expressed in +the @var{access_restrictions} argument. @end table @end deftypefun @deftypefun int pkey_get (int @var{key}) @standards{Linux, sys/mman.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} -Return the access rights of the current thread for memory pages with -protection key @var{key}. The return value is zero or a combination of +Return the access restrictions of the current thread for memory pages +with protection key @var{key}. The return value is zero or a combination of the @code{PKEY_DISABLE_}* flags; see the @code{pkey_set} function. +The returned value should be checked for presence or absence of specific flags +using bitwise operations. Comparing the returned value with any of the flags +or their combination using equals will almost certainly fail. + Calling the @code{pkey_get} function with a protection key which was not allocated by @code{pkey_alloc} results in undefined behavior. This means that calling this function on systems which do not support memory diff --git a/manual/resource.texi b/manual/resource.texi index 25966bcb64..612520d4d9 100644 --- a/manual/resource.texi +++ b/manual/resource.texi @@ -478,6 +478,7 @@ POSIX syntax had in mind. * Absolute Priority:: The first tier of priority. Posix * Realtime Scheduling:: Scheduling among the process nobility * Basic Scheduling Functions:: Get/set scheduling policy, priority +* Extensible Scheduling:: Parameterized scheduling policies. * Traditional Scheduling:: Scheduling among the vulgar masses * CPU Affinity:: Limiting execution to certain CPUs @end menu @@ -952,6 +953,120 @@ function, so there are no specific @code{errno} values. @end deftypefun +@node Extensible Scheduling +@subsection Extensible Scheduling +@cindex scheduling, extensible + +The type @code{struct sched_attr} and the functions @code{sched_setattr} +and @code{sched_getattr} are used to implement scheduling policies with +multiple parameters (not just priority and niceness). + +It is expected that these interfaces will be compatible with all future +scheduling policies. + +For additional information about scheduling policies, consult consult +the manual pages @manpageurl{sched,7} and @manpageurl{sched_setattr,2}. +@xref{Linux Kernel}. + +@strong{Note:} Calling the @code{sched_setattr} function is incompatible +with support for @code{PTHREAD_PRIO_PROTECT} mutexes. + +@deftp {Data Type} {struct sched_attr} +@standards{Linux, sched.h} +The @code{sched_attr} structure describes a parameterized scheduling policy. + +@strong{Portability note:} In the future, additional fields can be added +to @code{struct sched_attr} at the end, so that the size of this data +type changes. Do not use it in places where this matters, such as +structure fields in installed header files, where such a change could +impact the application binary interface (ABI). + +The following generic fields are available. + +@table @code +@item size +The actually used size of the data structure. See the description of +the functions @code{sched_setattr} and @code{sched_getattr} below how this +field is used to support extension of @code{struct sched_attr} with +more fields. + +@item sched_policy +The scheduling policy. This field determines which fields in the +structure are used, and how the @code{sched_flags} field is interpreted. + +@item sched_flags +Scheduling flags associated with the scheduling policy. +@end table + +In addition to the generic fields, policy-specific fields are available. +For additional information, consult the manual page +@manpageurl{sched_setattr,2}. @xref{Linux Kernel}. +@end deftp + +@deftypefun int sched_setaddr (pid_t @var{tid}, struct sched_attr *@var{attr}, unsigned int flags) +@standards{Linux, sched.h} +@safety{@mtsafe{}@assafe{}@acsafe{}} +This functions applies the scheduling policy described by +@code{*@var{attr}} to the thread @var{tid} (the value zero denotes the +current thread). + +It is recommended to initialize unused fields to zero, either using +@code{memset}, or using a structure initializer. The +@code{@var{attr->size}} field should be set to @code{sizeof (struct +sched_attr)}, to inform the kernel of the structure version in use. + +The @var{flags} argument must be zero. Other values may become +available in the future. + +On failure, @code{sched_setattr} returns @math{-1} and sets +@code{errno}. The following errors are related the way +extensibility is handled. +@table @code +@item E2BIG +A field in @code{*@var{attr}} has a non-zero value, but is unknown to +the kernel. The application could try to apply a modified policy, where +more fields are zero. + +@item EINVAL +The policy in @code{@var{attr}->sched_policy} is unknown to the kernel, +or flags are set in @code{@var{attr}->sched_flags} that the kernel does +not know how to interpret. The application could try with fewer flags +set, or a different scheduling policy. + +This error also occurs if @var{attr} is @code{NULL} or @var{flags} is +not zero. + +@item EPERM +The current thread is not sufficiently privileged to assign the policy, +either because access to the policy is restricted in general, or because +the current thread does not have the rights to change the scheduling +policy of the thread @var{tid}. +@end table + +Other error codes depend on the scheduling policy. +@end deftypefun + +@deftypefun int sched_getaddr (pid_t @var{tid}, struct sched_attr *@var{attr}, unsigned int size, unsigned int flags) +@standards{Linux, sched.h} +@safety{@mtsafe{}@assafe{}@acsafe{}} +This function obtains the scheduling policy of the thread @var{tid} +(zero denotes the current thread) and store it in @code{*@var{attr}}, +which must have space for at least @var{size} bytes. + +The @var{flags} argument must be zero. Other values may become +available in the future. + +Upon success, @code{@var{attr}->size} contains the size of the structure +version used by the kernel. Fields with offsets greater or equal to +@code{@var{attr}->size} are not updated by the kernel. To obtain +predictable values for unknown fields, use @code{memset} to set +all @var{size} bytes to zero prior to calling @code{sched_getattr}. + +On failure, @code{sched_getattr} returns @math{-1} and sets @code{errno}. +If @code{errno} is @code{E2BIG}, this means that the buffer is not large +large enough, and the application could retry with a larger buffer. +@end deftypefun + @node Traditional Scheduling @subsection Traditional Scheduling @cindex scheduling, traditional diff --git a/manual/startup.texi b/manual/startup.texi index 8ac3b97eed..95b0ed8fc7 100644 --- a/manual/startup.texi +++ b/manual/startup.texi @@ -1014,10 +1014,7 @@ for this function is in @file{stdlib.h}. @deftypefun void abort (void) @standards{ISO, stdlib.h} -@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} -@c The implementation takes a recursive lock and attempts to support -@c calls from signal handlers, but if we're in the middle of flushing or -@c using streams, we may encounter them in inconsistent states. +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{abort} function causes abnormal program termination. This does not execute cleanup functions registered with @code{atexit} or @code{on_exit}. @@ -1025,6 +1022,10 @@ does not execute cleanup functions registered with @code{atexit} or This function actually terminates the process by raising a @code{SIGABRT} signal, and your program can include a handler to intercept this signal; see @ref{Signal Handling}. + +If either the signal handler does not terminate the process, or if the +signal is blocked, @code{abort} will reset the signal disposition to the +default @code{SIG_DFL} action and raise the signal again. @end deftypefun @node Termination Internals diff --git a/manual/stdio.texi b/manual/stdio.texi index 29888a361f..83f4f92e3f 100644 --- a/manual/stdio.texi +++ b/manual/stdio.texi @@ -330,6 +330,14 @@ this ability, so using @code{freopen} is more portable. When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32 bit machine this function is in fact @code{freopen64} since the LFS interface replaces transparently the old interface. + +@Theglibc{} only supports use of @code{freopen} on streams opened with +@code{fopen} or @code{fopen64} and on the original values of the +standard streams @code{stdin}, @code{stdout}, and @code{stderr}; such +a stream may be reopened multiple times with @code{freopen}. If it is +called on another kind of stream (opened with functions such as +@code{popen}, @code{fmemopen}, @code{open_memstream}, and +@code{fopencookie}), @code{freopen} fails and returns a null pointer. @end deftypefun @deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream}) @@ -921,6 +929,9 @@ Therefore, @var{stream} should never be an expression with side-effects. @safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} The @code{putc_unlocked} function is equivalent to the @code{putc} function except that it does not implicitly lock the stream. +Like @code{putc}, it may be implemented as a macro and may evaluate +the @var{stream} argument more than once. Therefore, @var{stream} +should not be an expression with side-effects. @end deftypefun @deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream}) @@ -1124,6 +1135,9 @@ Therefore, @var{stream} should never be an expression with side-effects. @safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} The @code{getc_unlocked} function is equivalent to the @code{getc} function except that it does not implicitly lock the stream. +Like @code{getc}, it may be implemented as a macro and may evaluate +the @var{stream} argument more than once. Therefore, @var{stream} +should not be an expression with side-effects. @end deftypefun @deftypefun wint_t getwc_unlocked (FILE *@var{stream}) @@ -1563,6 +1577,9 @@ The @code{fread_unlocked} function is equivalent to the @code{fread} function except that it does not implicitly lock the stream. This function is a GNU extension. +This function may be implemented as a macro and may evaluate +@var{stream} more than once. Therefore, @var{stream} should not be an +expression with side-effects. @end deftypefun @deftypefun size_t fwrite (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) @@ -1581,6 +1598,9 @@ The @code{fwrite_unlocked} function is equivalent to the @code{fwrite} function except that it does not implicitly lock the stream. This function is a GNU extension. +This function may be implemented as a macro and may evaluate +@var{stream} more than once. Therefore, @var{stream} should not be an +expression with side-effects. @end deftypefun @node Formatted Output @@ -2523,7 +2543,7 @@ store the result in which case @code{-1} is returned. This was changed in order to comply with the @w{ISO C99} standard. @end deftypefun -@deftypefun dprintf (int @var{fd}, @var{template}, ...) +@deftypefun int dprintf (int @var{fd}, @var{template}, ...) @standards{POSIX, stdio.h} @safety{@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} This function formats its arguments according to @var{template} and @@ -4160,6 +4180,15 @@ check indicators that are part of the internal state of the stream object, indicators set if the appropriate condition was detected by a previous I/O operation on that stream. +The end of file and error conditions are mutually exclusive. For a +narrow oriented stream, end of file is not considered an error. For +wide oriented streams, reaching the end of the underlying file can +result an error if the underlying file ends with an incomplete multibyte +sequence. This is reported as an error by @code{ferror}, and not as an +end of file by @code{feof}. End of file on wide oriented streams that +does not fall into the middle of a multibyte sequence is reported via +@code{feof}. + @deftypevr Macro int EOF @standards{ISO, stdio.h} This macro is an integer value that is returned by a number of narrow diff --git a/manual/threads.texi b/manual/threads.texi index 25e99c9606..9ea137cb96 100644 --- a/manual/threads.texi +++ b/manual/threads.texi @@ -592,7 +592,7 @@ destructor for the thread-specific data is not called during destruction, nor is it called during thread exit. @end deftypefun -@deftypefun void *pthread_getspecific (pthread_key_t @var{key}) +@deftypefun {void *} pthread_getspecific (pthread_key_t @var{key}) @standards{POSIX, pthread.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c pthread_getspecific ok diff --git a/manual/time.texi b/manual/time.texi index 6b1080db06..90bc9a2566 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -532,6 +532,7 @@ Systems may support more than just these two POSIX clocks. @deftypefun int clock_gettime (clockid_t @var{clock}, struct timespec *@var{ts}) @standards{POSIX.1, time.h} +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} Get the current time according to the clock identified by @var{clock}, storing it as seconds and nanoseconds in @code{*@var{ts}}. @xref{Time Types}, for a description of @code{struct timespec}. @@ -553,6 +554,7 @@ clock: @deftypefun int clock_getres (clockid_t @var{clock}, struct timespec *@var{res}) @standards{POSIX.1, time.h} +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} Get the actual resolution of the clock identified by @var{clock}, storing it in @code{*@var{ts}}. @@ -1827,7 +1829,7 @@ can be placed in the buffer @var{s} the return value is zero, with the same problems indicated in the @code{strftime} documentation. @end deftypefun -@deftypefun {Deprecated function} {char *} asctime (const struct tm *@var{brokentime}) +@deftypefn {Deprecated function} {char *} asctime (const struct tm *@var{brokentime}) @standards{ISO, time.h} @safety{@prelim{}@mtunsafe{@mtasurace{:asctime} @mtslocale{}}@asunsafe{}@acsafe{}} @c asctime @mtasurace:asctime @mtslocale @@ -1861,9 +1863,9 @@ string.) @strong{Portability note:} This obsolescent function is deprecated in C23. Programs should instead use @code{strftime} or even @code{sprintf}. -@end deftypefun +@end deftypefn -@deftypefun {Deprecated function} {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer}) +@deftypefn {Deprecated function} {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer}) @standards{???, time.h} @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} @c asctime_r @mtslocale @@ -1882,9 +1884,9 @@ it returns @code{NULL}. @strong{Portability Note:} POSIX.1-2024 removed this obsolescent function. Programs should instead use @code{strftime} or even @code{sprintf}. -@end deftypefun +@end deftypefn -@deftypefun {Deprecated function} {char *} ctime (const time_t *@var{time}) +@deftypefn {Deprecated function} {char *} ctime (const time_t *@var{time}) @standards{ISO, time.h} @safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtasurace{:asctime} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} @c ctime @mtasurace:tmbuf @mtasurace:asctime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd @@ -1907,9 +1909,9 @@ Calling @code{ctime} also sets the time zone state as if @strong{Portability note:} This obsolescent function is deprecated in C23. Programs should instead use @code{strftime} or even @code{sprintf}. -@end deftypefun +@end deftypefn -@deftypefun {Deprecated function} {char *} ctime_r (const time_t *@var{time}, char *@var{buffer}) +@deftypefn {Deprecated function} {char *} ctime_r (const time_t *@var{time}, char *@var{buffer}) @standards{???, time.h} @safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} @c ctime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd @@ -1933,7 +1935,7 @@ it returns @code{NULL}. @strong{Portability Note:} POSIX.1-2024 removed this obsolescent function. Programs should instead use @code{strftime} or even @code{sprintf}. -@end deftypefun +@end deftypefn @node Parsing Date and Time @subsection Convert textual time and date information back diff --git a/math/Makefile b/math/Makefile index f06d370383..b64c3eedd5 100644 --- a/math/Makefile +++ b/math/Makefile @@ -1077,6 +1077,7 @@ CFLAGS-test-flt-eval-method.c += -fexcess-precision=standard CFLAGS-test-fe-snans-always-signal.c += $(config-cflags-signaling-nans) CFLAGS-test-nan-const.c += -fno-builtin +CFLAGS-test-nan-payload.c += -fno-builtin CFLAGS-test-ceil-except-2.c += -fno-builtin CFLAGS-test-floor-except-2.c += -fno-builtin diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 6cb594b6ff..92856becc4 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -126,7 +126,7 @@ __MATHCALL (log2p1,, (_Mdouble_ __x)); __MATHCALL (log10p1,, (_Mdouble_ __x)); /* Return log(1 + X). */ -__MATHCALL (logp1,, (_Mdouble_ __x)); +__MATHCALL_VEC (logp1,, (_Mdouble_ __x)); #endif #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 diff --git a/math/test-nan-payload.c b/math/test-nan-payload.c index 4a81dc348b..413791e09f 100644 --- a/math/test-nan-payload.c +++ b/math/test-nan-payload.c @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +#define _LIBC_TEST 1 +#define __STDC_WANT_IEC_60559_TYPES_EXT__ +#include <errno.h> #include <float.h> #include <math.h> #include <stdio.h> @@ -31,7 +34,7 @@ #define CHECK_IS_NAN(TYPE, A) \ do \ { \ - if (isnan (A)) \ + if (isnan (A) && !issignaling (A)) \ puts ("PASS: " #TYPE " " #A); \ else \ { \ @@ -41,6 +44,19 @@ } \ while (0) +#define CHECK_PAYLOAD(TYPE, FUNC, A, P) \ + do \ + { \ + if (FUNC (&(A)) == (P)) \ + puts ("PASS: " #TYPE " payload " #A); \ + else \ + { \ + puts ("FAIL: " #TYPE " payload " #A); \ + result = 1; \ + } \ + } \ + while (0) + #define CHECK_SAME_NAN(TYPE, A, B) \ do \ { \ @@ -67,33 +83,97 @@ } \ while (0) +#define CLEAR_ERRNO \ + do \ + { \ + errno = 12345; \ + } \ + while (0) + +#define CHECK_ERRNO(TYPE, A) \ + do \ + { \ + if (errno == 12345) \ + puts ("PASS: " #TYPE " " #A " errno"); \ + else \ + { \ + puts ("FAIL: " #TYPE " " #A " errno"); \ + result = 1; \ + } \ + } \ + while (0) + /* Cannot test payloads by memcmp for formats where NaNs have padding bits. */ #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106) -#define RUN_TESTS(TYPE, SFUNC, FUNC, MANT_DIG) \ +#define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG) \ do \ { \ + CLEAR_ERRNO; \ TYPE n123 = WRAP_NAN (FUNC, "123"); \ + CHECK_ERRNO (TYPE, n123); \ CHECK_IS_NAN (TYPE, n123); \ + CLEAR_ERRNO; \ TYPE s123 = WRAP_STRTO (SFUNC, "NAN(123)"); \ + CHECK_ERRNO (TYPE, s123); \ CHECK_IS_NAN (TYPE, s123); \ + CLEAR_ERRNO; \ TYPE n456 = WRAP_NAN (FUNC, "456"); \ + CHECK_ERRNO (TYPE, n456); \ CHECK_IS_NAN (TYPE, n456); \ + CLEAR_ERRNO; \ TYPE s456 = WRAP_STRTO (SFUNC, "NAN(456)"); \ + CHECK_ERRNO (TYPE, s456); \ CHECK_IS_NAN (TYPE, s456); \ + CLEAR_ERRNO; \ + TYPE nh123 = WRAP_NAN (FUNC, "0x123"); \ + CHECK_ERRNO (TYPE, nh123); \ + CHECK_IS_NAN (TYPE, nh123); \ + CLEAR_ERRNO; \ + TYPE sh123 = WRAP_STRTO (SFUNC, "NAN(0x123)"); \ + CHECK_ERRNO (TYPE, sh123); \ + CHECK_IS_NAN (TYPE, sh123); \ + CLEAR_ERRNO; \ TYPE n123x = WRAP_NAN (FUNC, "123)"); \ + CHECK_ERRNO (TYPE, n123x); \ CHECK_IS_NAN (TYPE, n123x); \ + CLEAR_ERRNO; \ TYPE nemp = WRAP_NAN (FUNC, ""); \ + CHECK_ERRNO (TYPE, nemp); \ CHECK_IS_NAN (TYPE, nemp); \ + CLEAR_ERRNO; \ TYPE semp = WRAP_STRTO (SFUNC, "NAN()"); \ + CHECK_ERRNO (TYPE, semp); \ CHECK_IS_NAN (TYPE, semp); \ + CLEAR_ERRNO; \ TYPE sx = WRAP_STRTO (SFUNC, "NAN"); \ + CHECK_ERRNO (TYPE, sx); \ CHECK_IS_NAN (TYPE, sx); \ + CLEAR_ERRNO; \ + TYPE novf = WRAP_NAN (FUNC, "9999999999" \ + "99999999999999999999" \ + "9999999999"); \ + CHECK_ERRNO (TYPE, novf); \ + CHECK_IS_NAN (TYPE, novf); \ + CLEAR_ERRNO; \ + TYPE sovf = WRAP_STRTO (SFUNC, "NAN(9999999999" \ + "99999999999999999999" \ + "9999999999)"); \ + CHECK_ERRNO (TYPE, sovf); \ + CHECK_IS_NAN (TYPE, sovf); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, n123, s123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, s123, 123); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, n456, s456); \ + CHECK_PAYLOAD (TYPE, PLFUNC, n456, 456); \ + CHECK_PAYLOAD (TYPE, PLFUNC, s456, 456); \ + if (CAN_TEST_EQ (MANT_DIG)) \ + CHECK_SAME_NAN (TYPE, nh123, sh123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, nh123, 0x123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, sh123, 0x123); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, nemp, semp); \ if (CAN_TEST_EQ (MANT_DIG)) \ @@ -110,9 +190,31 @@ static int do_test (void) { int result = 0; - RUN_TESTS (float, strtof, nanf, FLT_MANT_DIG); - RUN_TESTS (double, strtod, nan, DBL_MANT_DIG); - RUN_TESTS (long double, strtold, nanl, LDBL_MANT_DIG); + RUN_TESTS (float, strtof, nanf, getpayloadf, FLT_MANT_DIG); + RUN_TESTS (double, strtod, nan, getpayload, DBL_MANT_DIG); + RUN_TESTS (long double, strtold, nanl, getpayloadl, LDBL_MANT_DIG); +#if __HAVE_FLOAT16 + RUN_TESTS (_Float16, strtof16, nanf16, getpayloadf16, FLT16_MANT_DIG); +#endif +#if __HAVE_FLOAT32 + RUN_TESTS (_Float32, strtof32, nanf32, getpayloadf32, FLT32_MANT_DIG); +#endif +#if __HAVE_FLOAT64 + RUN_TESTS (_Float64, strtof64, nanf64, getpayloadf64, FLT64_MANT_DIG); +#endif +#if __HAVE_FLOAT128 + RUN_TESTS (_Float128, strtof128, nanf128, getpayloadf128, FLT128_MANT_DIG); +#endif +#if __HAVE_FLOAT32X + RUN_TESTS (_Float32x, strtof32x, nanf32x, getpayloadf32x, FLT32X_MANT_DIG); +#endif +#if __HAVE_FLOAT64X + RUN_TESTS (_Float64x, strtof64x, nanf64x, getpayloadf64x, FLT64X_MANT_DIG); +#endif +#if __HAVE_FLOAT128X + RUN_TESTS (_Float128x, strtof128x, nanf128x, getpayloadf128x, + FLT128X_MANT_DIG); +#endif return result; } diff --git a/math/w_tgammaf_compat.c b/math/w_tgammaf_compat.c index 34e0e096e0..addbdb1109 100644 --- a/math/w_tgammaf_compat.c +++ b/math/w_tgammaf_compat.c @@ -14,6 +14,7 @@ #include <errno.h> #include <math.h> +#include <stddef.h> #include <math_private.h> #include <math-svid-compat.h> #include <libm-alias-float.h> @@ -22,8 +23,7 @@ float __tgammaf(float x) { - int local_signgam; - float y = __ieee754_gammaf_r(x,&local_signgam); + float y = __ieee754_gammaf_r(x, NULL); if(__glibc_unlikely (!isfinite (y) || y == 0) && (isfinite (x) || (isinf (x) && x < 0.0)) @@ -41,7 +41,7 @@ __tgammaf(float x) /* tgammaf overflow */ return __kernel_standard_f(x, x, 140); } - return local_signgam < 0 ? - y : y; + return y; } libm_alias_float (__tgamma, tgamma) #endif diff --git a/misc/Makefile b/misc/Makefile index 7b7f8351bf..a932b1aab4 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -292,6 +292,12 @@ tests-static := tst-empty tests-internal += tst-fd_to_filename tests-static += tst-fd_to_filename +# Tests with long run times. +xtests += \ + tst-mkstemp-fuse \ + tst-mkstemp-fuse-parallel \ + # xtests + ifeq ($(run-built-tests),yes) ifeq (yes,$(build-shared)) ifneq ($(PERL),no) @@ -375,3 +381,4 @@ $(objpfx)tst-select: $(librt) $(objpfx)tst-select-time64: $(librt) $(objpfx)tst-pselect: $(librt) $(objpfx)tst-pselect-time64: $(librt) +$(objpfx)tst-mkstemp-fuse-parallel: $(shared-thread-library) diff --git a/misc/tst-mkstemp-fuse-parallel.c b/misc/tst-mkstemp-fuse-parallel.c new file mode 100644 index 0000000000..219f26cb3b --- /dev/null +++ b/misc/tst-mkstemp-fuse-parallel.c @@ -0,0 +1,219 @@ +/* FUSE-based test for mkstemp. Parallel collision statistics. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +#include <array_length.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/support.h> +#include <support/xthread.h> +#include <support/xunistd.h> + +/* The number of subprocesses that call mkstemp. */ +static pid_t processes[4]; + +/* Enough space to record the expected number of replies (62**3) for + each process. */ +enum { results_allocated = array_length (processes) * 62 * 62 * 62 }; + +/* The thread will store the results there. */ +static uint64_t *results; + +/* Currently used part of the results array. */ +static size_t results_used; + +/* Fail with EEXIST (so that mkstemp tries again). Record observed + names for later statistical analysis. */ +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + if (inh->opcode != FUSE_LOOKUP || results_used >= results_allocated) + { + support_fuse_reply_error (f, EIO); + continue; + } + + char *name = support_fuse_cast (LOOKUP, inh); + TEST_COMPARE_BLOB (name, 3, "new", 3); + TEST_COMPARE (strlen (name), 9); + /* Extract 8 bytes of the name: 'w', the X replacements, and the + null terminator. Treat it as an uint64_t for easy sorting + below. Endianess does not matter because the relative order + of the entries is not important; sorting is only used to find + duplicates. */ + TEST_VERIFY_EXIT (results_used < results_allocated); + memcpy (&results[results_used], name + 2, 8); + ++results_used; + struct fuse_entry_out *out = support_fuse_prepare_entry (f, 2); + out->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } +} + +/* Used to sort the results array, to find duplicates. */ +static int +results_sort (const void *a1, const void *b1) +{ + const uint64_t *a = a1; + const uint64_t *b = b1; + if (*a < *b) + return -1; + if (*a == *b) + return 0; + return 1; +} + +/* Number of occurrences of certain streak lengths. */ +static size_t streak_lengths[6]; + +/* Called for every encountered streak. */ +static inline void +report_streak (uint64_t current, size_t length) +{ + if (length > 1) + { + printf ("info: name \"ne%.8s\" repeats: %zu\n", + (char *) ¤t, length); + TEST_VERIFY_EXIT (length < array_length (streak_lengths)); + } + TEST_VERIFY_EXIT (length < array_length (streak_lengths)); + ++streak_lengths[length]; +} + +static int +do_test (void) +{ + support_fuse_init (); + + results = xmalloc (results_allocated * sizeof (*results)); + + struct shared + { + /* Used to synchronize the start of all subprocesses, to make it + more likely to expose concurrency-related bugs. */ + pthread_barrier_t barrier1; + pthread_barrier_t barrier2; + + /* Filled in after fork. */ + char mountpoint[4096]; + }; + + /* Used to synchronize the start of all subprocesses, to make it + more likely to expose concurrency-related bugs. */ + struct shared *pshared = support_shared_allocate (sizeof (*pshared)); + { + pthread_barrierattr_t attr; + xpthread_barrierattr_init (&attr); + xpthread_barrierattr_setpshared (&attr, PTHREAD_PROCESS_SHARED); + xpthread_barrierattr_destroy (&attr); + xpthread_barrier_init (&pshared->barrier1, &attr, + array_length (processes) + 1); + xpthread_barrier_init (&pshared->barrier2, &attr, + array_length (processes) + 1); + xpthread_barrierattr_destroy (&attr); + } + + for (int i = 0; i < array_length (processes); ++i) + { + processes[i] = xfork (); + if (processes[i] == 0) + { + /* Wait for mountpoint initialization. */ + xpthread_barrier_wait (&pshared->barrier1); + char *path = xasprintf ("%s/newXXXXXX", pshared->mountpoint); + + /* Park this process until all processes have started. */ + xpthread_barrier_wait (&pshared->barrier2); + errno = 0; + TEST_COMPARE (mkstemp (path), -1); + TEST_COMPARE (errno, EEXIST); + free (path); + _exit (0); + } + } + + /* Do this after the forking, to minimize initialization inteference. */ + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + TEST_VERIFY (strlcpy (pshared->mountpoint, support_fuse_mountpoint (f), + sizeof (pshared->mountpoint)) + < sizeof (pshared->mountpoint)); + xpthread_barrier_wait (&pshared->barrier1); + + puts ("info: performing mkstemp calls"); + xpthread_barrier_wait (&pshared->barrier2); + + for (int i = 0; i < array_length (processes); ++i) + { + int status; + xwaitpid (processes[i], &status, 0); + TEST_COMPARE (status, 0); + } + + support_fuse_unmount (f); + xpthread_barrier_destroy (&pshared->barrier2); + xpthread_barrier_destroy (&pshared->barrier1); + + printf ("info: checking results (count %zu)\n", results_used); + qsort (results, results_used, sizeof (*results), results_sort); + + uint64_t current = -1; + size_t streak = 0; + for (size_t i = 0; i < results_used; ++i) + if (results[i] == current) + ++streak; + else + { + report_streak (current, streak); + current = results[i]; + streak = 1; + } + report_streak (current, streak); + + puts ("info: repetition count distribution:"); + for (int i = 1; i < array_length (streak_lengths); ++i) + printf (" length %d: %zu\n", i, streak_lengths[i]); + /* Some arbitrary threshold, hopefully unlikely enough. In over + 260,000 runs of a simulation of this test, at most 26 pairs were + observed, and only one three-way collisions. */ + if (streak_lengths[2] > 30) + FAIL ("unexpected repetition count 2: %zu", streak_lengths[2]); + if (streak_lengths[3] > 2) + FAIL ("unexpected repetition count 3: %zu", streak_lengths[3]); + for (int i = 4; i < array_length (streak_lengths); ++i) + if (streak_lengths[i] > 0) + FAIL ("too many repeats of count %d: %zu", i, streak_lengths[i]); + + free (results); + + return 0; +} + +#include <support/test-driver.c> diff --git a/misc/tst-mkstemp-fuse.c b/misc/tst-mkstemp-fuse.c new file mode 100644 index 0000000000..5ac6a6872a --- /dev/null +++ b/misc/tst-mkstemp-fuse.c @@ -0,0 +1,197 @@ +/* FUSE-based test for mkstemp. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +#include <errno.h> +#include <fcntl.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <support/check.h> +#include <support/fuse.h> +#include <support/support.h> +#include <support/xunistd.h> + +/* Set to true in do_test to cause the first FUSE_CREATE attempt to fail. */ +static _Atomic bool simulate_creat_race; + +/* Basic tests with eventually successful creation. */ +static void +fuse_thread_basic (struct support_fuse *f, void *closure) +{ + char *previous_name = NULL; + int state = 0; + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + + switch (inh->opcode) + { + case FUSE_LOOKUP: + /* File does not exist initially. */ + TEST_COMPARE (inh->nodeid, 1); + if (simulate_creat_race) + { + if (state < 3) + ++state; + else + FAIL ("invalid state: %d", state); + } + else + { + TEST_COMPARE (state, 0); + state = 3; + } + support_fuse_reply_error (f, ENOENT); + break; + case FUSE_CREATE: + { + TEST_COMPARE (inh->nodeid, 1); + char *name; + struct fuse_create_in *p + = support_fuse_cast_name (CREATE, inh, &name); + /* Name follows after struct fuse_create_in. */ + TEST_COMPARE (p->flags & O_ACCMODE, O_RDWR); + TEST_VERIFY (p->flags & O_EXCL); + TEST_VERIFY (p->flags & O_CREAT); + TEST_COMPARE (p->mode & 07777, 0600); + TEST_VERIFY (S_ISREG (p->mode)); + TEST_COMPARE_BLOB (name, 3, "new", 3); + + if (state != 3 && simulate_creat_race) + { + ++state; + support_fuse_reply_error (f, EEXIST); + } + else + { + if (previous_name != NULL) + /* This test has a very small probability of failure + due to a harmless collision (one in 62**6 tests). */ + TEST_VERIFY (strcmp (name, previous_name) != 0); + TEST_COMPARE (state, 3); + ++state; + struct fuse_entry_out *entry; + struct fuse_open_out *open; + support_fuse_prepare_create (f, 2, &entry, &open); + entry->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } + free (previous_name); + previous_name = xstrdup (name); + } + break; + case FUSE_FLUSH: + case FUSE_RELEASE: + TEST_COMPARE (state, 4); + TEST_COMPARE (inh->nodeid, 2); + support_fuse_reply_empty (f); + break; + default: + support_fuse_reply_error (f, EIO); + } + } + free (previous_name); +} + +/* Reply that all files exist. */ +static void +fuse_thread_eexist (struct support_fuse *f, void *closure) +{ + uint64_t counter = 0; + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + + switch (inh->opcode) + { + case FUSE_LOOKUP: + ++counter; + TEST_COMPARE (inh->nodeid, 1); + char *name = support_fuse_cast (LOOKUP, inh); + TEST_COMPARE_BLOB (name, 3, "new", 3); + TEST_COMPARE (strlen (name), 9); + for (int i = 3; i <= 8; ++i) + { + /* The glibc implementation uses letters and digits only. */ + char ch = name[i]; + TEST_VERIFY (('0' <= ch && ch <= '9') + || ('a' <= ch && ch <= 'z') + || ('A' <= ch && ch <= 'Z')); + } + struct fuse_entry_out out = + { + .nodeid = 2, + .attr = { + .mode = S_IFREG | 0600, + .ino = 2, + }, + }; + support_fuse_reply (f, &out, sizeof (out)); + break; + default: + support_fuse_reply_error (f, EIO); + } + } + /* Verify that mkstemp has retried a lot. The current + implementation tries 62 * 62 * 62 times until it goves up. */ + TEST_VERIFY (counter >= 200000); +} + +static int +do_test (void) +{ + support_fuse_init (); + + for (int do_simulate_creat_race = 0; do_simulate_creat_race < 2; + ++do_simulate_creat_race) + { + simulate_creat_race = do_simulate_creat_race; + printf ("info: testing with simulate_creat_race == %d\n", + (int) simulate_creat_race); + struct support_fuse *f = support_fuse_mount (fuse_thread_basic, NULL); + char *path = xasprintf ("%s/newXXXXXX", support_fuse_mountpoint (f)); + int fd = mkstemp (path); + TEST_VERIFY (fd > 2); + xclose (fd); + free (path); + support_fuse_unmount (f); + } + + puts ("info: testing EEXIST failure case for mkstemp"); + { + struct support_fuse *f = support_fuse_mount (fuse_thread_eexist, NULL); + char *path = xasprintf ("%s/newXXXXXX", support_fuse_mountpoint (f)); + errno = 0; + TEST_COMPARE (mkstemp (path), -1); + TEST_COMPARE (errno, EEXIST); + free (path); + support_fuse_unmount (f); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c index 8e04ff7282..4556421a43 100644 --- a/misc/tst-preadvwritev2-common.c +++ b/misc/tst-preadvwritev2-common.c @@ -37,8 +37,11 @@ #ifndef RWF_NOAPPEND # define RWF_NOAPPEND 0 #endif +#ifndef RWF_ATOMIC +# define RWF_ATOMIC 0 +#endif #define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \ - | RWF_APPEND | RWF_NOAPPEND) + | RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC) /* Generic uio_lim.h does not define IOV_MAX. */ #ifndef IOV_MAX diff --git a/nptl/Makefile b/nptl/Makefile index bf4c29b6ed..ceb91afafc 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -276,6 +276,7 @@ LDLIBS-tst-minstack-throw = -lstdc++ tests = \ tst-attr2 \ tst-attr3 \ + tst-attr4 \ tst-cancel4_1 \ tst-cancel4_2 \ tst-cancel7 \ diff --git a/nptl/pthread_join_common.c b/nptl/pthread_join_common.c index 9c685c79cf..273db80543 100644 --- a/nptl/pthread_join_common.c +++ b/nptl/pthread_join_common.c @@ -49,6 +49,12 @@ __pthread_clockjoin_ex (pthread_t threadid, void **thread_return, /* We cannot wait for the thread. */ return EINVAL; + /* Make sure the clock and time specified are valid. */ + if (abstime + && __glibc_unlikely (!futex_abstimed_supported_clockid (clockid) + || ! valid_nanoseconds (abstime->tv_nsec))) + return EINVAL; + struct pthread *self = THREAD_SELF; int result = 0; diff --git a/nptl/pthread_kill.c b/nptl/pthread_kill.c index 71e5a7bf5b..fa5121a583 100644 --- a/nptl/pthread_kill.c +++ b/nptl/pthread_kill.c @@ -69,6 +69,17 @@ __pthread_kill_implementation (pthread_t threadid, int signo, int no_tid) return ret; } +/* Send the signal SIGNO to the caller. Used by abort and called where the + signals are being already blocked and there is no need to synchronize with + exit_lock. */ +int +__pthread_raise_internal (int signo) +{ + /* Use the gettid syscall so it works after vfork. */ + int ret = INTERNAL_SYSCALL_CALL (tgkill, __getpid (), __gettid(), signo); + return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0; +} + int __pthread_kill_internal (pthread_t threadid, int signo) { diff --git a/nptl/tst-attr4.c b/nptl/tst-attr4.c new file mode 100644 index 0000000000..c53781e7f3 --- /dev/null +++ b/nptl/tst-attr4.c @@ -0,0 +1,62 @@ +/* Test initial values of pthread attributes. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sched.h> +#include <stdio.h> +#include <stdint.h> + +#include <support/check.h> +#include <support/test-driver.h> +#include <support/xthread.h> + + +int +do_test (void) +{ + pthread_attr_t a; + int ret; + + xpthread_attr_init (&a); + + size_t stacksize = 0; + verbose_printf ("testing default stack size\n"); + ret = pthread_attr_getstacksize (&a, &stacksize); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (stacksize >= PTHREAD_STACK_MIN); + TEST_VERIFY (stacksize <= SIZE_MAX / 2); + + int policy; + verbose_printf ("testing default scheduler parameters\n"); + ret = pthread_attr_getschedpolicy (&a, &policy); + TEST_VERIFY_EXIT (ret == 0); + struct sched_param param; + ret = pthread_attr_getschedparam (&a, ¶m); + TEST_VERIFY_EXIT (ret == 0); + int min = sched_get_priority_min (policy); + TEST_VERIFY (min != -1); + int max = sched_get_priority_max (policy); + TEST_VERIFY (max != -1); + TEST_VERIFY (param.sched_priority >= min); + TEST_VERIFY (param.sched_priority <= max); + + xpthread_attr_destroy (&a); + + return 0; +} + +#include <support/test-driver.c> diff --git a/nptl/tst-setuid2.c b/nptl/tst-setuid2.c index 33d4e39fff..c410423010 100644 --- a/nptl/tst-setuid2.c +++ b/nptl/tst-setuid2.c @@ -76,7 +76,12 @@ run_on_thread (void (*func) (void)) static void change_thread_ids (void) { +#ifdef __NR_setresuid32 + /* Prefer 32-bit setresuid32 over 16-bit setresuid. */ + long ret = syscall (__NR_setresuid32, 2001, 2002, 2003); +#else long ret = syscall (__NR_setresuid, 2001, 2002, 2003); +#endif if (ret != 0) FAIL ("setresuid (2001, 2002, 2003): %ld", ret); } diff --git a/posix/fork.c b/posix/fork.c index 298765a1ff..bd6371a9f4 100644 --- a/posix/fork.c +++ b/posix/fork.c @@ -62,6 +62,7 @@ __libc_fork (void) call_function_static_weak (__nss_database_fork_prepare_parent, &nss_database_data); + _IO_proc_file_chain_lock (); _IO_list_lock (); /* Acquire malloc locks. This needs to come last because fork @@ -84,6 +85,8 @@ __libc_fork (void) fork_system_setup_after_fork (); + call_function_static_weak (__abort_fork_reset_child); + /* Release malloc locks. */ call_function_static_weak (__malloc_fork_unlock_child); @@ -92,6 +95,7 @@ __libc_fork (void) /* Reset locks in the I/O code. */ _IO_list_resetlock (); + _IO_proc_file_chain_resetlock (); call_function_static_weak (__nss_database_fork_subprocess, &nss_database_data); @@ -121,6 +125,7 @@ __libc_fork (void) /* We execute this even if the 'fork' call failed. */ _IO_list_unlock (); + _IO_proc_file_chain_unlock (); } /* Run the handlers registered for the parent. */ diff --git a/rt/Makefile b/rt/Makefile index 7b50c64f76..bc5f28c6d0 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -77,6 +77,7 @@ tests := tst-shm tst-timer tst-timer2 \ tst-bz28213 \ tst-timer3 tst-timer4 tst-timer5 \ tst-cpuclock2 tst-cputimer1 tst-cputimer2 tst-cputimer3 \ + tst-clock_nanosleep2 \ tst-shm-cancel \ tst-mqueue10 tests-internal := tst-timer-sigmask @@ -84,6 +85,7 @@ tests-internal := tst-timer-sigmask tests-time64 := \ tst-aio6-time64 \ tst-cpuclock2-time64 \ + tst-clock_nanosleep2-time64 \ tst-mqueue1-time64 \ tst-mqueue2-time64 \ tst-mqueue4-time64 \ diff --git a/rt/tst-clock_nanosleep2-time64.c b/rt/tst-clock_nanosleep2-time64.c new file mode 100644 index 0000000000..8deb4201f3 --- /dev/null +++ b/rt/tst-clock_nanosleep2-time64.c @@ -0,0 +1 @@ +#include "tst-clock_nanosleep2.c" diff --git a/rt/tst-clock_nanosleep2.c b/rt/tst-clock_nanosleep2.c new file mode 100644 index 0000000000..e9b2a2716d --- /dev/null +++ b/rt/tst-clock_nanosleep2.c @@ -0,0 +1,255 @@ +/* Test for clock_nanosleep parameter checks and sleep duration. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* This test has two primary goals - first, to validate that invalid + inputs to clock_nanosleep are caught, and second, to validate that + clock_nanosleep sleeps for at least the amount of time requested. + It is assumed that the system may sleep for an arbitrary additional + amount of time beyond the requested time. */ + +#include <unistd.h> +#include <stdint.h> + +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> + +#include <support/xunistd.h> +#include <support/check.h> +#include <support/xthread.h> +#include <support/timespec.h> + +/* This is 1 ms per test, we have 10 tests, so this file runs in on + the order of 0.01 seconds. */ +#define TEST_NSEC 1000000 + +/* Nanoseconds per second. */ +#define NSECMAX 1000000000L + +static pthread_barrier_t barrier; + +/* This function is intended to rack up both user and system time. */ +static void * +chew_cpu (void *arg) +{ + pthread_barrier_wait (&barrier); + + while (1) + { + static volatile char buf[4096]; + for (int i = 0; i < 100; ++i) + for (size_t j = 0; j < sizeof buf; ++j) + buf[j] = 0xaa; + int nullfd = xopen ("/dev/null", O_WRONLY, 0); + for (int i = 0; i < 100; ++i) + for (size_t j = 0; j < sizeof buf; ++j) + buf[j] = 0xbb; + xwrite (nullfd, (char *) buf, sizeof buf); + close (nullfd); + } + + return NULL; +} + +static void +ptime_1 (const char *n, struct timespec t) +{ + /* This is only for debugging failed test cases. */ + printf ("%12s: %lld.%09lld\n", n, (long long int) t.tv_sec, + (long long int) t.tv_nsec); +} +#define ptime(t) ptime_1 (#t, t) + +static void +test_interval_1 (const char *n_clock, clockid_t t_clock) +{ + struct timespec me_before, me_after, quantum, me_sleep, me_slept; + long long int slept, min_slept; + + /* Arbitrary to ensure our time period is sufficiently bigger than + the time step. */ + TEST_VERIFY (clock_getres (t_clock, &quantum) == 0); + printf("Clock quantum: %lld ns, test time: %lld ns\n", + (long long int) quantum.tv_nsec, (long long int) TEST_NSEC); + TEST_VERIFY (quantum.tv_nsec <= TEST_NSEC / 10); + + min_slept = TEST_NSEC; + + me_sleep = make_timespec (0, min_slept); + + printf ("test clock %s for %lld.%09lld sec relative\n", + n_clock, (long long int) me_sleep.tv_sec, + (long long int) me_sleep.tv_nsec); + + TEST_COMPARE (clock_gettime (t_clock, &me_before), 0); + TEST_COMPARE (clock_nanosleep (t_clock, 0, &me_sleep, NULL), 0); + TEST_COMPARE (clock_gettime (t_clock, &me_after), 0); + + me_slept = timespec_sub (me_after, me_before); + slept = support_timespec_ns (me_slept); + + ptime (me_before); + ptime (me_after); + ptime (me_sleep); + ptime (me_slept); + printf ("test slept %lld nsec >= asked for %lld ?\n", slept, min_slept); + + /* This is the important part - verify that the time slept is at + least as much as the time requested. */ + TEST_VERIFY (slept >= min_slept); +} + +static void +test_abs_1 (const char *n_clock, clockid_t t_clock) +{ + struct timespec me_before, me_after, quantum, me_sleep; + + /* Arbitrary to ensure our time period is sufficiently bigger than + the time step. */ + TEST_VERIFY (clock_getres (t_clock, &quantum) == 0); + printf("Clock quantum: %lld ns, test time: %lld ns\n", + (long long int) quantum.tv_nsec, (long long int) TEST_NSEC); + TEST_VERIFY (quantum.tv_nsec <= TEST_NSEC / 10); + + me_sleep = make_timespec (0, TEST_NSEC); + + printf ("test clock %s for %lld.%09lld sec absolute\n", + n_clock, (long long int) me_sleep.tv_sec, + (long long int) me_sleep.tv_nsec); + + TEST_COMPARE (clock_gettime (t_clock, &me_before), 0); + me_sleep = timespec_add (me_sleep, me_before); + TEST_COMPARE (clock_nanosleep (t_clock, TIMER_ABSTIME, &me_sleep, NULL), 0); + TEST_COMPARE (clock_gettime (t_clock, &me_after), 0); + + ptime (me_before); + ptime (me_sleep); + ptime (me_after); + + printf("test slept until %lld.%09lld after requested %lld.%09lld ?\n", + (long long int) me_after.tv_sec, (long long int) me_after.tv_nsec, + (long long int) me_sleep.tv_sec, (long long int) me_sleep.tv_nsec); + + /* This is the important part - verify that the time slept is at + least as much as the time requested. */ + TEST_TIMESPEC_EQUAL_OR_AFTER (me_after, me_sleep); +} + +static void +test_invalids_1 (const char *the_clock_name, int the_clock, + const char *flags_name, int flags) +{ + struct timespec me_before; + + /* Note: do not use make_timespec() in case that function tries to + normalize the fields. */ + + printf ("%s: %s: test tv 0, 0\n", the_clock_name, flags_name); + me_before.tv_sec = 0; + me_before.tv_nsec = 0; + TEST_COMPARE (clock_nanosleep (the_clock, 0, &me_before, NULL), 0); + + printf ("%s: %s: test tv -1, 0\n", the_clock_name, flags_name); + me_before.tv_sec = -1; + me_before.tv_nsec = 0; + TEST_COMPARE (clock_nanosleep (the_clock, 0, &me_before, NULL), EINVAL); + + printf ("%s: %s: test tv 0, -1\n", the_clock_name, flags_name); + me_before.tv_sec = 0; + me_before.tv_nsec = -1; + TEST_COMPARE (clock_nanosleep (the_clock, 0, &me_before, NULL), EINVAL); + + printf ("%s: %s: test tv -1, -1\n", the_clock_name, flags_name); + me_before.tv_sec = -1; + me_before.tv_nsec = -1; + TEST_COMPARE (clock_nanosleep (the_clock, 0, &me_before, NULL), EINVAL); + + printf ("%s: %s: test tv 0, MAX\n", the_clock_name, flags_name); + me_before.tv_sec = 0; + me_before.tv_nsec = NSECMAX; + TEST_COMPARE (clock_nanosleep (the_clock, 0, &me_before, NULL), EINVAL); +} + +static int +do_test (void) +{ + pthread_t th; + + pthread_barrier_init (&barrier, NULL, 2); + + /* Test for proper error detection. */ + +#define test_invalids(c, f) test_invalids_1 (#c, c, #f, f) + test_invalids (CLOCK_REALTIME, 0); +#ifdef CLOCK_TAI + test_invalids (CLOCK_TAI, 0); +#endif + test_invalids (CLOCK_MONOTONIC, 0); +#ifdef CLOCK_BOOTTIME + test_invalids (CLOCK_BOOTTIME, 0); +#endif + test_invalids (CLOCK_PROCESS_CPUTIME_ID, 0); + test_invalids (CLOCK_REALTIME, TIMER_ABSTIME); +#ifdef CLOCK_TAI + test_invalids (CLOCK_TAI, TIMER_ABSTIME); +#endif + test_invalids (CLOCK_MONOTONIC, TIMER_ABSTIME); +#ifdef CLOCK_BOOTTIME + test_invalids (CLOCK_BOOTTIME, TIMER_ABSTIME); +#endif + test_invalids (CLOCK_PROCESS_CPUTIME_ID, TIMER_ABSTIME); + + /* Test for various clocks "working". */ + +#define test_interval(c) test_interval_1 (#c, c) + test_interval (CLOCK_REALTIME); +#ifdef CLOCK_TAI + test_interval (CLOCK_TAI); +#endif + test_interval (CLOCK_MONOTONIC); +#ifdef CLOCK_BOOTTIME + test_interval (CLOCK_BOOTTIME); +#endif + + th = xpthread_create (NULL, chew_cpu, NULL); + xpthread_barrier_wait (&barrier); + test_interval (CLOCK_PROCESS_CPUTIME_ID); + xpthread_cancel (th); + +#define test_abs(c) test_abs_1 (#c, c) + test_abs (CLOCK_REALTIME); +#ifdef CLOCK_TAI + test_abs (CLOCK_TAI); +#endif + test_abs (CLOCK_MONOTONIC); +#ifdef CLOCK_BOOTTIME + test_abs (CLOCK_BOOTTIME); +#endif + + th = xpthread_create (NULL, chew_cpu, NULL); + xpthread_barrier_wait (&barrier); + test_abs (CLOCK_PROCESS_CPUTIME_ID); + xpthread_cancel (th); + + return 0; +} + +#include <support/test-driver.c> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index 7882d7d6fb..f81e6d9aaa 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -189,9 +189,6 @@ class Context(object): self.add_config(arch='arc', os_name='linux-gnuhf', gcc_cfg=['--disable-multilib', '--with-cpu=hs38_linux']) - self.add_config(arch='arceb', - os_name='linux-gnu', - gcc_cfg=['--disable-multilib', '--with-cpu=hs38']) self.add_config(arch='alpha', os_name='linux-gnu') self.add_config(arch='arm', @@ -834,7 +831,7 @@ class Context(object): 'gcc': 'vcs-13', 'glibc': 'vcs-mainline', 'gmp': '6.3.0', - 'linux': '6.10', + 'linux': '6.11', 'mpc': '1.3.1', 'mpfr': '4.2.1', 'mig': 'vcs-mainline', diff --git a/scripts/cross-test-ssh.sh b/scripts/cross-test-ssh.sh index 6f5e027737..5103038d40 100755 --- a/scripts/cross-test-ssh.sh +++ b/scripts/cross-test-ssh.sh @@ -32,6 +32,9 @@ instead of ordinary 'ssh'. If the '--timeoutfactor FACTOR' flag is present, set TIMEOUTFACTOR on the remote machine to the specified FACTOR. +If the '--glibctunables VALUE' flag is present, set GLIBC_TUNABLES on +the remote machine to the specified VALUE. + If the '--allow-time-setting' flag is present, set GLIBC_TEST_ALLOW_TIME_SETTING on the remote machine to indicate that time can be safely adjusted (e.g. on a virtual machine). @@ -66,6 +69,7 @@ appropriately." ssh='ssh' timeoutfactor=$TIMEOUTFACTOR +glibctunables=$GLIBC_TUNABLES while [ $# -gt 0 ]; do case "$1" in @@ -85,6 +89,14 @@ while [ $# -gt 0 ]; do timeoutfactor="$1" ;; + "--glibctunables") + shift + if [ $# -lt 1 ]; then + break + fi + glibctunables="$1" + ;; + "--allow-time-setting") settimeallowed="1" ;; @@ -135,6 +147,12 @@ if [ "$timeoutfactor" ]; then ${command}" fi +# Add command to set glibc tunables, if required. +if [ "$glibctunables" ]; then + command="export GLIBC_TUNABLES=$(bourne_quote "$glibctunables") +${command}" +fi + # Add command to set the info that time on target can be adjusted, # if required. # Serialize execution of this script on target to prevent from unintended diff --git a/signal/sigaction.c b/signal/sigaction.c index 811062ae96..81ae550315 100644 --- a/signal/sigaction.c +++ b/signal/sigaction.c @@ -16,8 +16,9 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> -#include <signal.h> #include <internal-signals.h> +#include <libc-lock.h> +#include <signal.h> /* If ACT is not NULL, change the action for SIG to *ACT. If OACT is not NULL, put the old action for SIG in *OACT. */ @@ -30,7 +31,17 @@ __sigaction (int sig, const struct sigaction *act, struct sigaction *oact) return -1; } - return __libc_sigaction (sig, act, oact); + internal_sigset_t set; + + if (sig == SIGABRT) + __abort_lock_wrlock (&set); + + int r = __libc_sigaction (sig, act, oact); + + if (sig == SIGABRT) + __abort_lock_unlock (&set); + + return r; } libc_hidden_def (__sigaction) weak_alias (__sigaction, sigaction) diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 948d960ccc..e76e40e587 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -22,6 +22,34 @@ subdir := stdio-common include ../Makeconfig +# List of markers for printf family function tests. +xprintf-funcs := p as d f s sn v vas vd vf vs vsn + +# List of data types and formats for individual per-conversion printf tests. +fmt-convs := double ldouble +fmts := E e F f G g + +# List of data types grouping all conversions in single printf tests. +nonfmt-convs := c char int llong long s short +nonfmt-convs += uchar uint ullong ulong ushort + +convs := $(sort $(fmt-convs) $(nonfmt-convs)) + +xprintf-srcs := \ + $(foreach p,$(xprintf-funcs), \ + $(foreach c,$(convs),tst-printf-format-$(p)-$(c))) + +fmt-xprintf-stems := \ + $(foreach f,$(fmts), \ + $(foreach p,$(xprintf-funcs), \ + $(foreach c,$(fmt-convs), \ + tst-printf-format-$(p)-$(c)-$(f)))) +nonfmt-xprintf-stems := \ + $(foreach p,$(xprintf-funcs), \ + $(foreach c,$(nonfmt-convs),tst-printf-format-$(p)-$(c))) + +xprintf-stems := $(sort $(fmt-xprintf-stems) $(nonfmt-xprintf-stems)) + headers := \ bits/printf-ldbl.h \ bits/stdio_lim.h \ @@ -207,8 +235,10 @@ tests := \ tst-cookie \ tst-dprintf-length \ tst-fdopen \ + tst-fdopen2 \ tst-ferror \ tst-fgets \ + tst-fgets2 \ tst-fileno \ tst-fmemopen \ tst-fmemopen2 \ @@ -216,8 +246,23 @@ tests := \ tst-fmemopen4 \ tst-fphex \ tst-fphex-wide \ + tst-fread \ + tst-freopen2 \ + tst-freopen3 \ + tst-freopen4 \ + tst-freopen5 \ + tst-freopen6 \ + tst-freopen64-2 \ + tst-freopen64-3 \ + tst-freopen64-4 \ + tst-freopen64-6 \ + tst-freopen64-7 \ + tst-freopen7 \ tst-fseek \ tst-fwrite \ + tst-fwrite-memstrm \ + tst-fwrite-overflow \ + tst-fwrite-ro \ tst-getline \ tst-getline-enomem \ tst-gets \ @@ -244,6 +289,7 @@ tests := \ tst-scanf-binary-gnu89 \ tst-scanf-bz27650 \ tst-scanf-intn \ + tst-scanf-nan \ tst-scanf-round \ tst-scanf-to_inpunct \ tst-setvbuf1 \ @@ -299,6 +345,7 @@ tests-internal = \ # tests-internal test-srcs = \ + $(xprintf-srcs) \ tst-printf \ tst-printfsz-islongdouble \ tst-unbputc \ @@ -306,6 +353,7 @@ test-srcs = \ ifeq ($(run-built-tests),yes) tests-special += \ + $(foreach f,$(xprintf-stems),$(objpfx)$(f).out) \ $(objpfx)tst-printf.out \ $(objpfx)tst-printfsz-islongdouble.out \ $(objpfx)tst-setvbuf1-cmp.out \ @@ -315,6 +363,16 @@ tests-special += \ ifeq (yes,$(build-shared)) ifneq ($(PERL),no) tests-special += \ + $(foreach f,$(xprintf-stems),$(objpfx)$(f)-mem.out) \ + $(objpfx)tst-freopen2-mem.out \ + $(objpfx)tst-freopen3-mem.out \ + $(objpfx)tst-freopen4-mem.out \ + $(objpfx)tst-freopen5-mem.out \ + $(objpfx)tst-freopen6-mem.out \ + $(objpfx)tst-freopen64-2-mem.out \ + $(objpfx)tst-freopen64-3-mem.out \ + $(objpfx)tst-freopen64-4-mem.out \ + $(objpfx)tst-freopen64-6-mem.out \ $(objpfx)tst-getline-enomem-mem.out \ $(objpfx)tst-getline-mem.out \ $(objpfx)tst-printf-bz18872-mem.out \ @@ -326,6 +384,26 @@ tests-special += \ # tests-special generated += \ + $(foreach f,$(xprintf-stems),$(f)-mem.out) \ + $(foreach f,$(xprintf-stems),$(f).mtrace) \ + tst-freopen2-mem.out \ + tst-freopen2.mtrace \ + tst-freopen3-mem.out \ + tst-freopen3.mtrace \ + tst-freopen4-mem.out \ + tst-freopen4.mtrace \ + tst-freopen5-mem.out \ + tst-freopen5.mtrace \ + tst-freopen6-mem.out \ + tst-freopen6.mtrace \ + tst-freopen64-2-mem.out \ + tst-freopen64-2.mtrace \ + tst-freopen64-3-mem.out \ + tst-freopen64-3.mtrace \ + tst-freopen64-4-mem.out \ + tst-freopen64-4.mtrace \ + tst-freopen64-6-mem.out \ + tst-freopen64-6.mtrace \ tst-getline-enomem-mem.out \ tst-getline-enomem.mtrace \ tst-getline-mem.out \ @@ -445,6 +523,33 @@ tst-getline-ENV = \ tst-getline-enomem-ENV = \ MALLOC_TRACE=$(objpfx)tst-getline-enomem.mtrace \ LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen2-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen2.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen64-2-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen64-2.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen3-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen3.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen64-3-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen64-3.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen4-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen4.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen64-4-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen64-4.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen5-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen5.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen6-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen6.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-freopen64-6-ENV = \ + MALLOC_TRACE=$(objpfx)tst-freopen64-6.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc $(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \ @@ -454,6 +559,21 @@ $(objpfx)tst-printf.out: tst-printf.sh $(objpfx)tst-printf $(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \ $(evaluate-test) +# We can't split a quoted recipe line, so do it via an auxiliary variable. +make-tst-printf-format-out = \ + AWK='$(AWK)' BASH='$(BASH)' \ + $(BASH) $< $@ $(common-objpfx) \ + '$(run-program-prefix-before-env) \ + $(run-program-env) \ + MALLOC_TRACE=$(@:.out=.mtrace) \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so \ + $(run-program-prefix-after-env)' +$(objpfx)tst-printf-format-%.out: \ + tst-printf-format.sh $(foreach c,$(convs),tst-printf-format-$(c).sh) \ + $(foreach f,$(xprintf-srcs),$(objpfx)$(f)) tst-printf-format.awk + $(make-tst-printf-format-out) > $@; \ + $(evaluate-test) + $(objpfx)tst-printfsz-islongdouble.out: \ tst-printfsz-islongdouble.sh $(objpfx)tst-printfsz-islongdouble $(SHELL) $^ '$(test-program-prefix)' $@; \ @@ -467,6 +587,10 @@ $(objpfx)tst-printf-bz18872.c: tst-printf-bz18872.sh $(objpfx)tst-%-mem.out: $(objpfx)tst-%.out $(common-objpfx)malloc/mtrace $(objpfx)tst-$*.mtrace > $@; \ $(evaluate-test) +$(objpfx)tst-printf-format-%-mem.out: $(objpfx)tst-printf-format-%.out + $(common-objpfx)malloc/mtrace \ + $(objpfx)tst-printf-format-$*.mtrace > $@; \ + $(evaluate-test) errlist-h = $(firstword $(wildcard $(addsuffix /errlist.h,$(sysdirs) .))) @@ -529,7 +653,7 @@ CFLAGS-tst-gets.c += -Wno-deprecated-declarations # BZ #11319 was first fixed for regular vdprintf, then reopened because # the fortified version had the same bug. -CFLAGS-tst-bz11319-fortify2.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 +CFLAGS-tst-bz11319-fortify2.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 CFLAGS-tst-memstream-string.c += -fno-builtin-fprintf @@ -554,3 +678,6 @@ $(objpfx)tst-setvbuf1-cmp.out: tst-setvbuf1.expect $(objpfx)tst-setvbuf1.out $(objpfx)tst-printf-round: $(libm) $(objpfx)tst-scanf-round: $(libm) + +$(objpfx)tst-freopen7: $(shared-thread-library) +$(objpfx)tst-freopen64-7: $(shared-thread-library) diff --git a/stdio-common/tst-fdopen2.c b/stdio-common/tst-fdopen2.c new file mode 100644 index 0000000000..0c6625f258 --- /dev/null +++ b/stdio-common/tst-fdopen2.c @@ -0,0 +1,246 @@ +/* Test the fdopen function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <errno.h> +#include <fcntl.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xunistd.h> +#include <support/temp_file.h> + +char *tmp_dir; +char *path_to_file; + +void +prepare_tmp_dir (void) +{ + tmp_dir = support_create_temp_directory ("tst-fdopen2"); + path_to_file = xasprintf ("%s/tst-fdopen2.txt", tmp_dir); +} + +/* open temp file descriptor with mode. */ +int +open_tmp_fd (int mode) +{ + int fd = xopen (path_to_file, mode, 0644); + return fd; +} + + +/* close and remove temp file with close. */ +void +close_tmp_fd (int fd) +{ + xclose (fd); + xunlink (path_to_file); +} + +/* close and remove temp file with fclose. */ +void +close_tmp_fp (FILE *fp) +{ + fclose (fp); + xunlink (path_to_file); +} + +/* test "w" fdopen mode. */ +void +do_test_fdopen_w (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_WRONLY | O_CREAT | O_TRUNC); + + /* test mode mismatch. */ + fp = fdopen (fd, "r"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, r) should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "w"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "AAAA"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite (): %m"); + } + + unsigned char buf2[4]; + rewind (fp); + clearerr (fp); + /* fread should fail in "w" mode */ + ret = fread (buf2, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread should fail in \"w\" mode"); + } + + fclose (fp); +} + +/* test "r" fdopen mode. */ +void +do_test_fdopen_r (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_RDONLY); + + /* test mode mismatch. */ + fp = fdopen (fd, "w"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w) should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "r"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "BBBB"; + /* fwrite should fail in "r" mode. */ + ret = fwrite (buf, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite should fail in \"r\" mode"); + } + + unsigned char buf2[4]; + ret = fread (buf2, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread (): %m"); + } + + fclose (fp); +} + +/* test "a" fdopen mode. */ +void +do_test_fdopen_a (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_WRONLY | O_CREAT | O_APPEND); + + /* test mode mismatch. */ + fp = fdopen (fd, "r+"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, \"r+\") should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "a"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "CCCC"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite (): %m"); + } + + /* fread should fail in "a" mode. */ + unsigned char buf2[4]; + clearerr (fp); + ret = fread (buf2, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread should fail \"a\" mode"); + } + + fclose (fp); +} + +void +do_test_fdopen_mode (int mode, const char *fmode) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (mode); + + fp = fdopen (fd, fmode); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, %s): %m", fd, fmode); + } + + const void *buf = "EEEE"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite () in mode:%s returns %d: %m", fmode, ret); + } + + rewind (fp); + unsigned char buf2[4]; + ret = fread (buf2, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread () in mode:%s returns %d: %m", fmode, ret); + } + + fclose (fp); +} + +static int +do_test (void) +{ + + prepare_tmp_dir (); + + do_test_fdopen_w (); + do_test_fdopen_r (); + do_test_fdopen_a (); + + /* test r+ w+ a+ fdopen modes. */ + do_test_fdopen_mode (O_RDWR, "r+"); + do_test_fdopen_mode (O_RDWR | O_CREAT | O_TRUNC, "w+"); + do_test_fdopen_mode (O_RDWR | O_CREAT | O_APPEND, "a+"); + xunlink (path_to_file); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-fgets2.c b/stdio-common/tst-fgets2.c new file mode 100644 index 0000000000..5b78447ea9 --- /dev/null +++ b/stdio-common/tst-fgets2.c @@ -0,0 +1,253 @@ +/* Test for additional fgets error handling. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <libc-diag.h> +#include <stdio.h> +#include <error.h> +#include <errno.h> +#include <limits.h> +#include <mcheck.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/types.h> + +#include <support/support.h> +#include <support/check.h> + +/* This avoids compiler warnings about passing NULL where a valid + pointer is expected. */ +static void *volatile null = NULL; + +/* Implementation of our FILE stream backend. */ + +static int bytes_read; +static int cookie_valid = 0; +struct Cookie { + const char *buffer; + int bufptr; + int bufsz; +}; + +#define VALIDATE_COOKIE() if (! cookie_valid) { \ + FAIL ("call to %s after file closed", __FUNCTION__); \ + return -1; \ + } + +static ssize_t +io_read (void *vcookie, char *buf, size_t size) +{ + struct Cookie *cookie = (struct Cookie *) vcookie; + + VALIDATE_COOKIE (); + + if (size > cookie->bufsz - cookie->bufptr) + size = cookie->bufsz - cookie->bufptr; + + memcpy (buf, cookie->buffer + cookie->bufptr, size); + cookie->bufptr += size; + bytes_read += size; + return size; +} + +static ssize_t +io_write (void *vcookie, const char *buf, size_t size) +{ + VALIDATE_COOKIE (); + FAIL_EXIT1 ("io_write called"); +} + +static int +io_seek (void *vcookie, off64_t *position, int whence) +{ + VALIDATE_COOKIE (); + FAIL_EXIT1 ("io_seek called"); +} + +static int +io_clean (void *vcookie) +{ + struct Cookie *cookie = (struct Cookie *) vcookie; + + VALIDATE_COOKIE (); + + cookie->buffer = NULL; + cookie->bufsz = 0; + cookie->bufptr = 0; + + cookie_valid = 0; + free (cookie); + return 0; +} + +cookie_io_functions_t io_funcs = { + .read = io_read, + .write = io_write, + .seek = io_seek, + .close = io_clean +}; + +FILE * +io_open (const char *buffer, int buflen, const char *mode, void **vcookie) +{ + FILE *f; + struct Cookie *cookie; + + cookie = (struct Cookie *) xcalloc (1, sizeof (struct Cookie)); + *vcookie = cookie; + cookie_valid = 1; + + cookie->buffer = buffer; + cookie->bufsz = buflen; + bytes_read = 0; + + f = fopencookie (cookie, mode, io_funcs); + if (f == NULL) + FAIL_EXIT1 ("fopencookie failed"); + + clearerr (f); + return f; +} + +/* The test cases. */ + +#define my_open(s,l,m) io_open (s, l, m, (void *) &cookie) + +#define TEST_COMPARE_0x11(buf, len) \ + TEST_COMPARE_BLOB (buf + (len), sizeof (buf) - (len), \ + buf2, sizeof (buf) - (len)); + +#define check_flags(f, expected_eof, expected_err) \ + { \ + if (expected_eof) \ + TEST_VERIFY (feof (f) != 0); \ + else \ + TEST_VERIFY (feof (f) == 0); \ + if (expected_err) \ + TEST_VERIFY (ferror (f) != 0); \ + else \ + TEST_VERIFY (ferror (f) == 0); \ + } + +static int +do_test (void) +{ + FILE *f; + struct Cookie *cookie; + char buf [10]; + char buf2 [10]; + char *returned_string; + + memset (buf2, 0x11, sizeof (buf2)); + + printf ("testing base operation...\n"); + f = my_open ("hello\n", 6, "r"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == buf); + TEST_COMPARE_BLOB (buf, bytes_read + 1, "hello\n\0", 7); + TEST_COMPARE_0x11 (buf, bytes_read + 1); + check_flags (f, 0, 0); + + fclose (f); + + printf ("testing zero size file...\n"); + f = my_open ("hello\n", 0, "r"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + check_flags (f, 1, 0); + fclose (f); + + printf ("testing zero size buffer...\n"); + f = my_open ("hello\n", 6, "r"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, 0, f); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + check_flags (f, 0, 0); + fclose (f); + + printf ("testing NULL buffer with empty stream...\n"); + f = my_open ("hello\n", 0, "r"); + memset (buf, 0x11, sizeof (buf)); + + returned_string = fgets (null, sizeof (buf), f); + + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + check_flags (f, 1, 0); + fclose (f); + + printf ("testing embedded NUL...\n"); + f = my_open ("hel\0lo\n", 7, "r"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == buf); + TEST_COMPARE_BLOB (buf, bytes_read + 1, "hel\0lo\n\0", 8); + TEST_COMPARE_0x11 (buf, bytes_read + 1); + check_flags (f, 0, 0); + fclose (f); + + printf ("testing writable stream...\n"); + f = my_open ("hel\0lo\n", 7, "w"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + check_flags (f, 0, 1); + fclose (f); + + printf ("testing closed fd stream...\n"); + int fd = open ("/dev/null", O_RDONLY); + f = fdopen (fd, "r"); + close (fd); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + check_flags (f, 0, 1); + fclose (f); + +#ifdef IO_DEBUG + /* These tests only pass if glibc is built with -DIO_DEBUG, but are + included for reference. */ + + printf ("testing NULL descriptor...\n"); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, null); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); + + printf ("testing closed descriptor...\n"); + f = my_open ("hello\n", 7, "r"); + fclose (f); + memset (buf, 0x11, sizeof (buf)); + returned_string = fgets (buf, sizeof (buf) - 1, f); + TEST_VERIFY (returned_string == NULL); + TEST_VERIFY (bytes_read == 0); +#endif + + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-fread.c b/stdio-common/tst-fread.c new file mode 100644 index 0000000000..4d9a7895f6 --- /dev/null +++ b/stdio-common/tst-fread.c @@ -0,0 +1,134 @@ +/* Test fread. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <support/check.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +int +do_test (void) +{ + char *temp_dir = support_create_temp_directory ("tst-fread"); + char *file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + FILE *fp; + size_t ret; + char buf[1024]; + + verbose_printf ("test single-byte reads\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 2, fp); + TEST_COMPARE (ret, 2); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ftell (fp), 2); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 3, fp); + TEST_COMPARE (ret, 3); + TEST_COMPARE (buf[0], 'l'); + TEST_COMPARE (buf[1], 'e'); + TEST_COMPARE (buf[2], '1'); + TEST_COMPARE (ftell (fp), 5); + TEST_COMPARE (feof (fp), 0); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 1, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test single-byte reads, EOF part way through\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, sizeof buf, fp); + TEST_COMPARE (ret, 5); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (buf[2], 'l'); + TEST_COMPARE (buf[3], 'e'); + TEST_COMPARE (buf[4], '1'); + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test multi-byte reads\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 2, 2, fp); + TEST_COMPARE (ret, 2); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (buf[2], 'l'); + TEST_COMPARE (buf[3], 'e'); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ftell (fp), 4); + memset (buf, 0, sizeof buf); + ret = fread (buf, 3, 3, fp); + TEST_COMPARE (ret, 0); + /* The bytes written for a partial element read are unspecified. */ + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test read error\n"); + fp = xfopen (file1, "r"); + xclose (fileno (fp)); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, sizeof buf, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (!!ferror (fp), 1); + fclose (fp); + + verbose_printf ("test zero size\n"); + fp = xfopen (file1, "r"); + ret = fread (buf, 0, SIZE_MAX, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 0); + xfclose (fp); + + verbose_printf ("test zero items\n"); + fp = xfopen (file1, "r"); + ret = fread (buf, SIZE_MAX, 0, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 0); + xfclose (fp); + + free (temp_dir); + free (file1); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen2-main.c b/stdio-common/tst-freopen2-main.c new file mode 100644 index 0000000000..74c3125fca --- /dev/null +++ b/stdio-common/tst-freopen2-main.c @@ -0,0 +1,519 @@ +/* Test freopen. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <fcntl.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> +#include <wchar.h> + +#include <support/check.h> +#include <support/descriptors.h> +#include <support/file_contents.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> + +#define START_TEST(DESC) \ + do \ + { \ + fds = support_descriptors_list (); \ + verbose_printf (DESC); \ + } \ + while (0) + +#define END_TEST \ + do \ + { \ + support_descriptors_check (fds); \ + support_descriptors_free (fds); \ + } \ + while (0) + +int +do_test (void) +{ + mtrace (); + struct support_descriptors *fds; + char *temp_dir = support_create_temp_directory ("tst-freopen2"); + char *file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + char *file2 = xasprintf ("%s/file2", temp_dir); + support_write_file_string (file2, "file2"); + add_temp_file (file2); + char *file3 = xasprintf ("%s/file3", temp_dir); + char *file4 = xasprintf ("%s/file4", temp_dir); + char *file1a = xasprintf ("%s/file1a", temp_dir); + FILE *fp; + int ret; + wint_t wc; + + /* Test each pair of old and new modes from r w a. */ + + START_TEST ("Testing r -> r\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "file2"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing r -> w\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("File2new", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file1, "file1"); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "File2new"); + END_TEST; + + START_TEST ("Testing r -> a\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "a", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("3", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "File2new3"); + END_TEST; + + START_TEST ("Testing w -> r\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "File2new3"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing w -> w\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("next", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file1, ""); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "next"); + END_TEST; + + START_TEST ("Testing w -> a\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file2, "a", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("4", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "next4"); + END_TEST; + + START_TEST ("Testing a -> r\n"); + fp = xfopen (file1, "a"); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "next4"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing a -> w\n"); + fp = xfopen (file1, "a"); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("another", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "another"); + END_TEST; + + START_TEST ("Testing a -> a\n"); + fp = xfopen (file1, "a"); + fp = FREOPEN (file2, "a", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("5", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "another5"); + END_TEST; + + /* Test for file originally opened with fopen64. */ + START_TEST ("Testing fopen64 a -> a\n"); + fp = fopen64 (file1, "a"); + TEST_VERIFY_EXIT (fp != NULL); + fp = FREOPEN (file2, "a", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("64", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "another564"); + END_TEST; + + /* Test calling freopen more than once on the same FILE *. */ + + START_TEST ("Testing r -> w -> r\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("freopen-twice", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "freopen-twice"); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "freopen-twice"); + END_TEST; + + START_TEST ("Testing r -> w -> r (exactly one freopen64)\n"); + fp = xfopen (file1, "r"); + fp = OTHER_FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("freopen-twice64", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "freopen-twice64"); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "freopen-twice64"); + END_TEST; + + /* Test changing to/from b (binary, no-op). */ + + START_TEST ("Testing rb -> r\n"); + fp = xfopen (file1, "rb"); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "freopen-twice64"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing r -> rb\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "rb", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "freopen-twice64"); + xfclose (fp); + END_TEST; + + /* Test changing to/from + (read-and-write). */ + + START_TEST ("Testing r -> w+\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "w+", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("latest", fp); + TEST_VERIFY (ret >= 0); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + TEST_COMPARE_FILE_STRING (fp, "latest"); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "latest"); + END_TEST; + + START_TEST ("Testing w -> a+\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file2, "a+", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("suffix", fp); + TEST_VERIFY (ret >= 0); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + TEST_COMPARE_FILE_STRING (fp, "latestsuffix"); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "latestsuffix"); + END_TEST; + + START_TEST ("Testing a -> r+\n"); + fp = xfopen (file1, "a"); + fp = FREOPEN (file2, "r+", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "latestsuffix"); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + ret = fputs ("new", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "newestsuffix"); + END_TEST; + + START_TEST ("Testing r+ -> w\n"); + fp = xfopen (file1, "r+"); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("plusto", fp); + TEST_VERIFY (ret >= 0); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + errno = 0; + TEST_COMPARE (fgetc (fp), EOF); + TEST_COMPARE (errno, EBADF); + clearerr (fp); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "plusto"); + END_TEST; + + START_TEST ("Testing w+ -> a\n"); + fp = xfopen (file1, "w+"); + fp = FREOPEN (file2, "a", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("more", fp); + TEST_VERIFY (ret >= 0); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + errno = 0; + TEST_COMPARE (fgetc (fp), EOF); + TEST_COMPARE (errno, EBADF); + clearerr (fp); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "plustomore"); + END_TEST; + + START_TEST ("Testing a+ -> r\n"); + fp = xfopen (file1, "a+"); + fp = FREOPEN (file2, "rr", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "plustomore"); + ret = fputs ("2", fp); + TEST_COMPARE (ret, EOF); + clearerr (fp); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "plustomore"); + END_TEST; + + /* Test changing to/from e (FD_CLOEXEC). */ + + START_TEST ("Testing re -> r\n"); + fp = xfopen (file1, "re"); + ret = fcntl (fileno (fp), F_GETFD); + TEST_VERIFY (ret != -1); + TEST_COMPARE (ret & FD_CLOEXEC, FD_CLOEXEC); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fcntl (fileno (fp), F_GETFD); + TEST_VERIFY (ret != -1); + TEST_COMPARE (ret & FD_CLOEXEC, 0); + TEST_COMPARE_FILE_STRING (fp, "plustomore"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing r -> re\n"); + fp = xfopen (file1, "r"); + ret = fcntl (fileno (fp), F_GETFD); + TEST_VERIFY (ret != -1); + TEST_COMPARE (ret & FD_CLOEXEC, 0); + fp = FREOPEN (file2, "re", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fcntl (fileno (fp), F_GETFD); + TEST_VERIFY (ret != -1); + TEST_COMPARE (ret & FD_CLOEXEC, FD_CLOEXEC); + TEST_COMPARE_FILE_STRING (fp, "plustomore"); + xfclose (fp); + END_TEST; + + /* Test changing to/from m (mmap) (a no-op as far as testing + semantics is concerned). */ + + START_TEST ("Testing rm -> r\n"); + fp = xfopen (file1, "rm"); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "plustomore"); + xfclose (fp); + END_TEST; + + START_TEST ("Testing r -> rm\n"); + fp = xfopen (file1, "r"); + fp = FREOPEN (file2, "rm", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "plustomore"); + xfclose (fp); + END_TEST; + + /* Test changing to/from x (O_EXCL). */ + + START_TEST ("Testing wx -> w\n"); + fp = xfopen (file3, "wx"); + add_temp_file (file3); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = fputs ("wxtow", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file2, "wxtow"); + END_TEST; + + START_TEST ("Testing w -> wx (file does not exist)\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file4, "wx", fp); + TEST_VERIFY_EXIT (fp != NULL); + add_temp_file (file4); + ret = fputs ("wtowx", fp); + TEST_VERIFY (ret >= 0); + xfclose (fp); + TEST_OPEN_AND_COMPARE_FILE_STRING (file4, "wtowx"); + END_TEST; + + /* Test with ,ccs=CHARSET. */ + + START_TEST ("testing w,ccs=utf-8 -> r\n"); + fp = xfopen (file1, "w,ccs=utf-8"); + ret = fputws (L"\xc0\xc1", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "wxtow"); + xfclose (fp); + END_TEST; + + START_TEST ("testing w,ccs=iso-8859-1 -> r,ccs=utf-8\n"); + fp = xfopen (file2, "w,ccs=iso-8859-1"); + ret = fputws (L"\xc0\xc1", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (file1, "r,ccs=utf-8", fp); + TEST_VERIFY_EXIT (fp != NULL); + wc = fgetwc (fp); + TEST_COMPARE (wc, (wint_t) 0xc0); + wc = fgetwc (fp); + TEST_COMPARE (wc, (wint_t) 0xc1); + wc = fgetwc (fp); + TEST_COMPARE (wc, WEOF); + xfclose (fp); + END_TEST; + + START_TEST ("testing r,ccs=utf-8 -> r\n"); + fp = xfopen (file1, "r,ccs=utf-8"); + fp = FREOPEN (file1, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "\u00c0\u00c1"); + xfclose (fp); + END_TEST; + + /* Test that errors closing the old file are ignored. */ + + START_TEST ("testing errors closing old file ignored\n"); + fp = xfopen ("/dev/full", "w"); + fputc ('x', fp); + fp = FREOPEN (file1, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "\u00c0\u00c1"); + xfclose (fp); + END_TEST; + + /* Test that error / EOF state from the old file are cleared. */ + + START_TEST ("testing error state from old file cleared\n"); + fp = xfopen ("/dev/full", "w"); + fputc ('x', fp); + fflush (fp); + TEST_VERIFY (ferror (fp)); + TEST_VERIFY (!feof (fp)); + fp = FREOPEN (file2, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_VERIFY (!ferror (fp)); + TEST_VERIFY (!feof (fp)); + xfclose (fp); + END_TEST; + + START_TEST ("testing EOF state from old file cleared\n"); + fp = xfopen ("/dev/null", "r"); + fgetc (fp); + TEST_VERIFY (!ferror (fp)); + TEST_VERIFY (feof (fp)); + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_VERIFY (!ferror (fp)); + TEST_VERIFY (!feof (fp)); + xfclose (fp); + END_TEST; + + /* Test freopen with NULL, same mode (should flush content and reset + file offset). */ + + START_TEST ("testing freopen with NULL, same mode\n"); + fp = xfopen (file1, "r+"); + ret = fputs ("same mode", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (NULL, "r+", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "same mode"); + xfclose (fp); + END_TEST; + + /* Test freopen with NULL, different mode. */ + + START_TEST ("testing freopen with NULL, different mode\n"); + fp = xfopen (file1, "w"); + ret = fputs ("different mode", fp); + TEST_VERIFY (ret >= 0); + fp = FREOPEN (NULL, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "different mode"); + xfclose (fp); + END_TEST; + + /* Test freopen with NULL, renamed file. This verifies that + reopening succeeds (and resets the file position indicator to + start of file) even when the original path could no longer be + opened. */ + + START_TEST ("testing freopen with NULL, renamed file\n"); + fp = xfopen (file1, "r+"); + ret = fputs ("file has been renamed", fp); + TEST_VERIFY (ret >= 0); + ret = rename (file1, file1a); + TEST_COMPARE (ret, 0); + fp = FREOPEN (NULL, "r+", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "file has been renamed"); + xfclose (fp); + ret = rename (file1a, file1); + TEST_COMPARE (ret, 0); + END_TEST; + + /* Test freopen with NULL, deleted file. This verifies that + reopening succeeds (and resets the file position indicator to + start of file) even when the original path could no longer be + opened. */ + + START_TEST ("testing freopen with NULL, deleted file\n"); + fp = xfopen (file1, "r+"); + ret = fputs ("file has now been deleted", fp); + TEST_VERIFY (ret >= 0); + ret = remove (file1); + TEST_COMPARE (ret, 0); + fp = FREOPEN (NULL, "r+", fp); + TEST_VERIFY_EXIT (fp != NULL); + TEST_COMPARE_FILE_STRING (fp, "file has now been deleted"); + xfclose (fp); + /* Recreate the file so it is present when expected for temporary + file deletion. */ + support_write_file_string (file1, "file1"); + END_TEST; + + free (temp_dir); + free (file1); + free (file2); + free (file3); + free (file4); + free (file1a); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen2.c b/stdio-common/tst-freopen2.c new file mode 100644 index 0000000000..11ec7a9783 --- /dev/null +++ b/stdio-common/tst-freopen2.c @@ -0,0 +1,3 @@ +#define FREOPEN freopen +#define OTHER_FREOPEN freopen64 +#include <tst-freopen2-main.c> diff --git a/stdio-common/tst-freopen3-main.c b/stdio-common/tst-freopen3-main.c new file mode 100644 index 0000000000..990a6e5921 --- /dev/null +++ b/stdio-common/tst-freopen3-main.c @@ -0,0 +1,92 @@ +/* Test freopen failure. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <fcntl.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> + +#include <support/check.h> +#include <support/descriptors.h> +#include <support/file_contents.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> + +#define START_TEST(DESC) \ + do \ + { \ + fds = support_descriptors_list (); \ + verbose_printf (DESC); \ + } \ + while (0) + +#define END_TEST \ + do \ + { \ + support_descriptors_check (fds); \ + support_descriptors_free (fds); \ + } \ + while (0) + +int +do_test (void) +{ + mtrace (); + struct support_descriptors *fds; + char *temp_dir = support_create_temp_directory ("tst-freopen3"); + char *file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + char *file2 = xasprintf ("%s/file2", temp_dir); + support_write_file_string (file2, "file2"); + add_temp_file (file2); + char *file_nodir = xasprintf ("%s/nodir/file", temp_dir); + FILE *fp; + int ret; + int fd; + + START_TEST ("Testing w -> wx (file exists)\n"); + fp = xfopen (file1, "w"); + fp = FREOPEN (file2, "wx", fp); + TEST_VERIFY (fp == NULL); + END_TEST; + + /* Test old file is closed even when opening the new file fails. */ + + START_TEST ("testing r -> r (opening new file fails)\n"); + fp = xfopen (file1, "r"); + fd = fileno (fp); + fp = FREOPEN (file_nodir, "r", fp); + TEST_VERIFY (fp == NULL); + errno = 0; + ret = fcntl (fd, F_GETFL); + TEST_COMPARE (ret, -1); + TEST_COMPARE (errno, EBADF); + END_TEST; + + free (temp_dir); + free (file1); + free (file2); + free (file_nodir); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen3.c b/stdio-common/tst-freopen3.c new file mode 100644 index 0000000000..5041b6b233 --- /dev/null +++ b/stdio-common/tst-freopen3.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen +#include <tst-freopen3-main.c> diff --git a/stdio-common/tst-freopen4-main.c b/stdio-common/tst-freopen4-main.c new file mode 100644 index 0000000000..7284677a97 --- /dev/null +++ b/stdio-common/tst-freopen4-main.c @@ -0,0 +1,102 @@ +/* Test freopen in chroot. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> + +#include <support/check.h> +#include <support/file_contents.h> +#include <support/namespace.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +int +do_test (void) +{ + mtrace (); + char *temp_dir; + FILE *fp; + int ret; + + /* These chroot tests verify that either reopening a renamed or + deleted file works even in the absence of /proc, or that it fails + (without memory leaks); thus, for example, such reopening does + not crash in the absence of /proc. */ + + support_become_root (); + if (!support_can_chroot ()) + return EXIT_UNSUPPORTED; + + temp_dir = support_create_temp_directory ("tst-freopen4"); + xchroot (temp_dir); + + /* Test freopen with NULL, renamed file. This verifies that + reopening succeeds (and resets the file position indicator to + start of file) even when the original path could no longer be + opened, or fails without a memory leak. (It is not possible to + use <support/descriptors.h> to test for file descriptor leaks + here, because that also depends on /proc.) */ + + verbose_printf ("testing freopen with NULL, renamed file\n"); + fp = xfopen ("/file1", "w+"); + ret = fputs ("file has been renamed", fp); + TEST_VERIFY (ret >= 0); + ret = rename ("/file1", "/file1a"); + TEST_COMPARE (ret, 0); + fp = FREOPEN (NULL, "r+", fp); + if (fp != NULL) + { + puts ("freopen of renamed file succeeded"); + TEST_COMPARE_FILE_STRING (fp, "file has been renamed"); + xfclose (fp); + } + else + puts ("freopen of renamed file failed (OK)"); + ret = rename ("/file1a", "/file1"); + TEST_COMPARE (ret, 0); + + /* Test freopen with NULL, deleted file. This verifies that + reopening succeeds (and resets the file position indicator to + start of file) even when the original path could no longer be + opened, or fails without a memory leak. */ + + verbose_printf ("testing freopen with NULL, deleted file\n"); + fp = xfopen ("/file1", "r+"); + ret = fputs ("file has now been deleted", fp); + TEST_VERIFY (ret >= 0); + ret = remove ("/file1"); + TEST_COMPARE (ret, 0); + fp = FREOPEN (NULL, "r+", fp); + if (fp != NULL) + { + puts ("freopen of deleted file succeeded"); + TEST_COMPARE_FILE_STRING (fp, "file has now been deleted"); + xfclose (fp); + } + else + puts ("freopen of deleted file failed (OK)"); + + free (temp_dir); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen4.c b/stdio-common/tst-freopen4.c new file mode 100644 index 0000000000..f39ec0d217 --- /dev/null +++ b/stdio-common/tst-freopen4.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen +#include <tst-freopen4-main.c> diff --git a/stdio-common/tst-freopen5.c b/stdio-common/tst-freopen5.c new file mode 100644 index 0000000000..f32626bccf --- /dev/null +++ b/stdio-common/tst-freopen5.c @@ -0,0 +1,144 @@ +/* Test freopen and freopen64 with large offsets. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> + +#include <support/check.h> +#include <support/descriptors.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> + +#define START_TEST(DESC) \ + do \ + { \ + fds = support_descriptors_list (); \ + verbose_printf (DESC); \ + } \ + while (0) + +#define END_TEST \ + do \ + { \ + support_descriptors_check (fds); \ + support_descriptors_free (fds); \ + } \ + while (0) + +int +do_test (void) +{ + mtrace (); + struct support_descriptors *fds; + FILE *fp; + int ret; + + char *temp_dir = support_create_temp_directory ("tst-freopen5"); + /* This file is removed at the end of each test rather than left + around between tests to avoid problems with subsequent tests + reopening it as a large (2GB + 1 byte) file. */ + char *file1 = xasprintf ("%s/file1", temp_dir); + + /* fopen with freopen64: large offsets OK. */ + START_TEST ("testing fopen with freopen64\n"); + fp = fopen ("/dev/null", "r"); + TEST_VERIFY_EXIT (fp != NULL); + fp = freopen64 (file1, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + setbuf (fp, NULL); + ret = fseeko64 (fp, 1LL << 32, SEEK_SET); + TEST_COMPARE (ret, 0); + ret = fputc ('x', fp); + TEST_COMPARE (ret, 'x'); + xfclose (fp); + ret = remove (file1); + TEST_COMPARE (ret, 0); + END_TEST; + + /* fopen64 with freopen64: large offsets OK. */ + START_TEST ("testing fopen64 with freopen64\n"); + fp = fopen64 ("/dev/null", "r"); + TEST_VERIFY_EXIT (fp != NULL); + fp = freopen64 (file1, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + setbuf (fp, NULL); + ret = fseeko64 (fp, 1LL << 32, SEEK_SET); + TEST_COMPARE (ret, 0); + ret = fputc ('x', fp); + TEST_COMPARE (ret, 'x'); + xfclose (fp); + ret = remove (file1); + TEST_COMPARE (ret, 0); + END_TEST; + + /* fopen with freopen: large offsets not OK on 32-bit systems. */ + START_TEST ("testing fopen with freopen\n"); + fp = fopen ("/dev/null", "r"); + TEST_VERIFY_EXIT (fp != NULL); + fp = freopen (file1, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + setbuf (fp, NULL); + ret = fseeko64 (fp, 1LL << 32, SEEK_SET); + TEST_COMPARE (ret, 0); + errno = 0; + ret = fputc ('x', fp); + if (sizeof (off_t) == 4) + { + TEST_COMPARE (ret, EOF); + TEST_COMPARE (errno, EFBIG); + } + else + TEST_COMPARE (ret, 'x'); + fclose (fp); + ret = remove (file1); + TEST_COMPARE (ret, 0); + END_TEST; + + /* fopen64 with freopen: large offsets not OK on 32-bit systems. */ + START_TEST ("testing fopen64 with freopen\n"); + fp = fopen64 ("/dev/null", "r"); + TEST_VERIFY_EXIT (fp != NULL); + fp = freopen (file1, "w", fp); + TEST_VERIFY_EXIT (fp != NULL); + setbuf (fp, NULL); + ret = fseeko64 (fp, 1LL << 32, SEEK_SET); + TEST_COMPARE (ret, 0); + errno = 0; + ret = fputc ('x', fp); + if (sizeof (off_t) == 4) + { + TEST_COMPARE (ret, EOF); + TEST_COMPARE (errno, EFBIG); + } + else + TEST_COMPARE (ret, 'x'); + fclose (fp); + ret = remove (file1); + TEST_COMPARE (ret, 0); + END_TEST; + + free (temp_dir); + free (file1); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen6-main.c b/stdio-common/tst-freopen6-main.c new file mode 100644 index 0000000000..f493f42fd7 --- /dev/null +++ b/stdio-common/tst-freopen6-main.c @@ -0,0 +1,98 @@ +/* Test freopen of stdin / stdout / stderr. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <support/check.h> +#include <support/file_contents.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> + +int +do_test (void) +{ + mtrace (); + char *temp_dir = support_create_temp_directory ("tst-freopen6"); + char *file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + FILE *fp; + int ret; + + verbose_printf ("Testing reopening stdin\n"); + fp = FREOPEN (file1, "r", stdin); + TEST_VERIFY_EXIT (fp == stdin); + ret = getchar (); + TEST_COMPARE (ret, 'f'); + ret = getchar (); + TEST_COMPARE (ret, 'i'); + ret = getchar (); + TEST_COMPARE (ret, 'l'); + ret = getchar (); + TEST_COMPARE (ret, 'e'); + ret = getchar (); + TEST_COMPARE (ret, '1'); + ret = getchar (); + TEST_COMPARE (ret, EOF); + xfclose (fp); + + verbose_printf ("Testing reopening stderr\n"); + fp = FREOPEN (file1, "w+", stderr); + TEST_VERIFY_EXIT (fp == stderr); + errno = EINVAL; + perror ("test"); + ret = fseek (fp, 0, SEEK_SET); + TEST_COMPARE (ret, 0); + TEST_COMPARE_FILE_STRING (fp, "test: Invalid argument\n"); + xfclose (fp); + + verbose_printf ("Testing reopening stdout\n"); + /* Defer checks until the old stdout has been restored to make it + more likely any errors are written to the old stdout (rather than + the temporary file used for the redirected stdout). */ + int old_stdout = dup (STDOUT_FILENO); + TEST_VERIFY_EXIT (old_stdout != -1); + int ret_fseek = 0; + int ret_compare = 0; + fp = FREOPEN (file1, "w+", stdout); + int fp_eq_stdout = fp == stdout; + if (fp != NULL) + { + printf ("reopened\n"); + ret_fseek = fseek (fp, 0, SEEK_SET); + ret_compare = support_compare_file_string (fp, "reopened\n"); + } + xfclose (fp); + stdout = fdopen (old_stdout, "w"); + TEST_VERIFY (fp_eq_stdout); + TEST_COMPARE (ret_fseek, 0); + TEST_COMPARE (ret_compare, 0); + xfclose (stdout); + + free (temp_dir); + free (file1); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen6.c b/stdio-common/tst-freopen6.c new file mode 100644 index 0000000000..8fd6957b54 --- /dev/null +++ b/stdio-common/tst-freopen6.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen +#include <tst-freopen6-main.c> diff --git a/stdio-common/tst-freopen64-2.c b/stdio-common/tst-freopen64-2.c new file mode 100644 index 0000000000..88fdc64d8c --- /dev/null +++ b/stdio-common/tst-freopen64-2.c @@ -0,0 +1,3 @@ +#define FREOPEN freopen64 +#define OTHER_FREOPEN freopen +#include <tst-freopen2-main.c> diff --git a/stdio-common/tst-freopen64-3.c b/stdio-common/tst-freopen64-3.c new file mode 100644 index 0000000000..b91b6d2c03 --- /dev/null +++ b/stdio-common/tst-freopen64-3.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen64 +#include <tst-freopen3-main.c> diff --git a/stdio-common/tst-freopen64-4.c b/stdio-common/tst-freopen64-4.c new file mode 100644 index 0000000000..1411be2bfa --- /dev/null +++ b/stdio-common/tst-freopen64-4.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen64 +#include <tst-freopen4-main.c> diff --git a/stdio-common/tst-freopen64-6.c b/stdio-common/tst-freopen64-6.c new file mode 100644 index 0000000000..3ec509a36c --- /dev/null +++ b/stdio-common/tst-freopen64-6.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen64 +#include <tst-freopen6-main.c> diff --git a/stdio-common/tst-freopen64-7.c b/stdio-common/tst-freopen64-7.c new file mode 100644 index 0000000000..f34c280521 --- /dev/null +++ b/stdio-common/tst-freopen64-7.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen64 +#include <tst-freopen7-main.c> diff --git a/stdio-common/tst-freopen7-main.c b/stdio-common/tst-freopen7-main.c new file mode 100644 index 0000000000..965e0b4adc --- /dev/null +++ b/stdio-common/tst-freopen7-main.c @@ -0,0 +1,155 @@ +/* Test freopen cancellation handling. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <fcntl.h> +#include <mcheck.h> +#include <pthread.h> +#include <semaphore.h> +#include <stdio.h> +#include <stdlib.h> +#include <wchar.h> + +#include <support/check.h> +#include <support/file_contents.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> +#include <support/xthread.h> +#include <support/xunistd.h> + +char *file1, *file2, *file3, *fifo; + +sem_t sem; + +void * +test_rc_to_r (void *p) +{ + int ret; + FILE *fp, *fp2; + ret = sem_post (&sem); + TEST_VERIFY_EXIT (ret == 0); + fp = xfopen (file1, "rc"); + for (int i = 0; i < 1000000; i++) + { + fgetc (fp); + fseek (fp, 0, SEEK_SET); + } + fp2 = xfopen (file3, "wc"); + fputs ("rc_to_r got to freopen", fp2); + xfclose (fp2); + /* Cancellation should occur at some point from here onwards + (possibly leaking memory and file descriptors associated with the + FILE). */ + fp = FREOPEN (file2, "r", fp); + TEST_VERIFY_EXIT (fp != NULL); + for (;;) + { + fgetc (fp); + fseek (fp, 0, SEEK_SET); + } +} + +void * +test_r_to_rc (void *p) +{ + int ret; + FILE *fp; + fp = xfopen (file1, "r"); + fp = FREOPEN (fifo, "rc", fp); + TEST_VERIFY_EXIT (fp != NULL); + ret = sem_post (&sem); + TEST_VERIFY_EXIT (ret == 0); + /* No cancellation should occur for I/O on fifo. */ + ret = fgetc (fp); + /* At this point, the other thread has called pthread_cancel and + then written a byte to the fifo, so this thread is cancelled at + the next cancellation point. */ + TEST_VERIFY (ret == 'x'); + xfclose (fp); + fp = xfopen (file3, "wc"); + fputs ("r_to_rc got to fclose", fp); + xfclose (fp); + pthread_testcancel (); + FAIL_EXIT1 ("test_r_to_rc not cancelled\n"); +} + +int +do_test (void) +{ + char *temp_dir = support_create_temp_directory ("tst-freopen-cancel"); + file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + file2 = xasprintf ("%s/file2", temp_dir); + support_write_file_string (file2, "file2"); + add_temp_file (file2); + file3 = xasprintf ("%s/file3", temp_dir); + support_write_file_string (file3, "file3"); + add_temp_file (file3); + fifo = xasprintf ("%s/fifo", temp_dir); + xmkfifo (fifo, 0666); + add_temp_file (fifo); + int ret; + pthread_t thr; + void *retval; + + /* Test changing to/from c (cancellation disabled). */ + + verbose_printf ("Testing rc -> r\n"); + ret = sem_init (&sem, 0, 0); + TEST_VERIFY_EXIT (ret == 0); + thr = xpthread_create (NULL, test_rc_to_r, NULL); + ret = sem_wait (&sem); + TEST_VERIFY_EXIT (ret == 0); + xpthread_cancel (thr); + ret = pthread_join (thr, &retval); + TEST_COMPARE (ret, 0); + TEST_VERIFY (retval == PTHREAD_CANCELED); + TEST_OPEN_AND_COMPARE_FILE_STRING (file3, "rc_to_r got to freopen"); + + verbose_printf ("Testing r -> rc\n"); + ret = sem_init (&sem, 0, 0); + TEST_VERIFY_EXIT (ret == 0); + thr = xpthread_create (NULL, test_r_to_rc, NULL); + FILE *fp = xfopen (fifo, "w"); + ret = sem_wait (&sem); + TEST_VERIFY_EXIT (ret == 0); + /* This call happens while, or before, the other thread is waiting + to read a character from the fifo. It thus verifies that + cancellation does not occur from the fgetc call in that thread + (it should instead occur only in pthread_testcancel call), + because the expected string is only written to file3 after that + thread closes the fifo. */ + xpthread_cancel (thr); + fputc ('x', fp); + xfclose (fp); + ret = pthread_join (thr, &retval); + TEST_COMPARE (ret, 0); + TEST_VERIFY (retval == PTHREAD_CANCELED); + TEST_OPEN_AND_COMPARE_FILE_STRING (file3, "r_to_rc got to fclose"); + + free (temp_dir); + free (file1); + free (file2); + free (file3); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-freopen7.c b/stdio-common/tst-freopen7.c new file mode 100644 index 0000000000..03d0de798e --- /dev/null +++ b/stdio-common/tst-freopen7.c @@ -0,0 +1,2 @@ +#define FREOPEN freopen +#include <tst-freopen7-main.c> diff --git a/stdio-common/tst-fwrite-memstrm.c b/stdio-common/tst-fwrite-memstrm.c new file mode 100644 index 0000000000..7ee3831430 --- /dev/null +++ b/stdio-common/tst-fwrite-memstrm.c @@ -0,0 +1,177 @@ +/* Test fwrite on a memory stream. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <support/check.h> +#include <support/temp_file.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +void +test_ro (void) +{ + FILE *f; + char *out; + + /* Try to allocate a small buffer for this test. */ + out = malloc (2); + TEST_VERIFY_EXIT (out != NULL); + + /* Try to open the allocated buffer as a read-only stream. */ + f = fmemopen (out, 2, "r"); + TEST_VERIFY_EXIT (f != NULL); + + /* Try to write to the temporary file with nmemb = 0, then check that + fwrite returns 0. No errors are expected from this. */ + TEST_COMPARE (fwrite ("a", 1, 0, f), 0); + TEST_COMPARE (ferror (f), 0); + + /* Try to write to the temporary file with size = 0, then check that + fwrite returns 0. No errors are expected from this. */ + TEST_COMPARE (fwrite ("a", 0, 1, f), 0); + TEST_COMPARE (ferror (f), 0); + + /* Try to write a single byte to the temporary file, then check that + fwrite returns 0. Check if an error was reported. */ + TEST_COMPARE (fwrite ("a", 1, 1, f), 0); + TEST_COMPARE (ferror (f), 1); + + clearerr (f); + xfclose (f); + free (out); +} + +/* Length of the output buffer in bytes. */ +#define RWBUF_SIZE 16 * 1024 +/* Maximum number of bytes to be written in output buffer. The rest will be + used to check against overflow. */ +#define RWBUF_SIZE_WRITABLE RWBUF_SIZE-2048 + +/* Use the following byte to identify areas that should have not been + modified. */ +#define KNOWN_BYTE 0xaa + +void +test_one_rw (const char *in, size_t size, size_t nmemb, + size_t expected_ret) +{ + FILE *f; + char *out, *expected_out; + /* Total number of bytes expected to be written. */ + size_t expected_bytes = size * nmemb; + + printf ("Testing with size = %zd, nmemb = %zd\n", size, nmemb); + + TEST_VERIFY_EXIT (expected_ret <= RWBUF_SIZE_WRITABLE); + TEST_VERIFY_EXIT (expected_bytes <= RWBUF_SIZE_WRITABLE); + + /* Try to allocate a buffer for this test and initialize it with + known contents. */ + out = malloc (RWBUF_SIZE); + TEST_VERIFY_EXIT (out != NULL); + memset (out, KNOWN_BYTE, RWBUF_SIZE); + + /* Try to allocate a buffer and fill it with the contents that are expected + to be in memory after flushing/closing the memory stream. */ + expected_out = malloc (RWBUF_SIZE); + TEST_VERIFY_EXIT (expected_out != NULL); + if (expected_bytes > 0) + { + memcpy (expected_out, in, expected_bytes); + expected_out[expected_bytes] = 0; + memset (expected_out + expected_bytes + 1, KNOWN_BYTE, + RWBUF_SIZE - expected_bytes - 1); + } + else + { + /* No changes to the output are expected. */ + memset (expected_out, KNOWN_BYTE, RWBUF_SIZE); + } + + /* Try to open the allocated buffer as a read-write stream. */ + f = fmemopen (out, RWBUF_SIZE, "w"); + TEST_VERIFY_EXIT (f != NULL); + + /* Try to write to the memory stream. Check if fwrite() returns the + expected value. No errors are expected. */ + TEST_COMPARE (fwrite (in, size, nmemb, f), expected_ret); + TEST_COMPARE (ferror (f), 0); + + xfclose (f); + + /* Ensure the output has the expected contents. */ + TEST_COMPARE (memcmp (out, expected_out, expected_bytes), 0); + + free (expected_out); + free (out); +} + +void +test_rw (void) +{ + char * in; + int i, j; + size_t size[] = {1, 8, 11, 16, 17, 0}; + size_t nmemb[] = {32, 83, 278, 709, 4097, RWBUF_SIZE / 2, + RWBUF_SIZE_WRITABLE, 0}; + size_t n; + + /* Try to write to the temporary file with nmemb = 0, then check that + fwrite returns 0; */ + test_one_rw ("a", 1, 0, 0); + + /* Try to write to the temporary file with size = 0, then check that + fwrite returns 0; */ + test_one_rw ("a", 0, 1, 0); + + /* Try to write a single byte to the temporary file, then check that + fwrite returns 1; */ + test_one_rw ("a", 1, 2, 2); + + in = malloc (RWBUF_SIZE); + TEST_VERIFY_EXIT (in != NULL); + for (i = 0; i < RWBUF_SIZE / 2; i++) + in[i] = i % 0xff; + + /* Test with all posibilities of size[] x nmemb[]. */ + for (i = 0; nmemb[i] != 0; i++) + { + for (j = 0; size[j] != 0; j++) + { + n = nmemb[i] / size[j]; + test_one_rw (in, size[j], n, n); + } + /* Run the test with a single item of maximum size. */ + test_one_rw (in, nmemb[i], 1, 1); + } + + free (in); +} + +static int +do_test (void) +{ + test_ro (); + test_rw (); + + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-fwrite-overflow.c b/stdio-common/tst-fwrite-overflow.c new file mode 100644 index 0000000000..fe503fd589 --- /dev/null +++ b/stdio-common/tst-fwrite-overflow.c @@ -0,0 +1,130 @@ +/* Test the overflow of fwrite's internal buffer. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* stdio.h provides BUFSIZ, which is the size of fwrite's internal buffer. */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <support/check.h> +#include <support/temp_file.h> +#include <support/support.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +/* Length of the buffers in bytes. */ +#define RWBUF_SIZE (2 * BUFSIZ) + +void +test_one_rw (const char *in, size_t size, size_t nmemb, size_t blocks) +{ + int fd; + FILE *f; + char *out; + size_t written, to_write; + const size_t requested = size * nmemb; + + printf ("Testing with size = %zd, nmemb = %zd, blocks = %zd\n", + size, nmemb, blocks); + + TEST_VERIFY_EXIT (requested <= RWBUF_SIZE); + /* Ensure fwrite's internal buffer will overflow. */ + TEST_VERIFY_EXIT (requested > BUFSIZ); + + /* Create a temporary file and open it for reading and writing. */ + fd = create_temp_file ("tst-fwrite-overflow", NULL); + TEST_VERIFY_EXIT (fd != -1); + f = fdopen (fd, "w+"); + TEST_VERIFY_EXIT (f != NULL); + + /* Call fwrite() as many times as needed, until all data is written, + limiting the amount of data written per call to block items. */ + for (written = 0; written < nmemb; written += to_write) + { + if (written + blocks <= nmemb) + to_write = blocks; + else + to_write = nmemb - written; + /* Check if fwrite() returns the expected value. No errors are + expected. */ + TEST_COMPARE (fwrite (in + size * written, size, to_write, f), + to_write); + TEST_COMPARE (ferror (f), 0); + } + TEST_VERIFY_EXIT (written == nmemb); + + /* Ensure all the data is flushed to file. */ + TEST_COMPARE (fflush (f), 0); + + /* We have to check if the contents in the file are correct. Go back to + the beginning of the file. */ + rewind (f); + /* Try to allocate a buffer and save the contents of the generated file to + it. */ + out = xmalloc (RWBUF_SIZE); + TEST_COMPARE (fread (out, size, nmemb, f), nmemb); + + /* Ensure the output has the expected contents. */ + TEST_COMPARE (memcmp (out, in, requested), 0); + + xfclose (f); + free (out); +} + +static int +do_test (void) +{ + char * in; + int i, j; + size_t nmemb[] = {BUFSIZ + 1, RWBUF_SIZE, 0}; + /* Maximum number of items written for each fwrite call. */ + size_t block[] = {100, 1024, 2047, 0}; + /* The largest block must fit entirely in fwrite's buffer. */ + _Static_assert (2047 < BUFSIZ, + "a block must fit in fwrite's internal buffer"); + + in = xmalloc (RWBUF_SIZE); + for (i = 0; i < RWBUF_SIZE; i++) + in[i] = i % 0xff; + + for (i = 0; nmemb[i] != 0; i++) + for (j = 0; block[j] != 0; j++) + { + /* Run a test with an array of nmemb bytes. Write at most block + items per fwrite call. */ + test_one_rw (in, 1, nmemb[i], block[j]); + /* Run a test that overflows fwrite's internal buffer in a single call + by writting a single item of nmemb bytes. + This call should not use the buffer and should be written directly + to the file. */ + test_one_rw (in, nmemb[i], 1, nmemb[i]); + } + + for (j = 0; block[j] != 0; j++) + { + /* Run a test with size=2 and the minimum nmemb value that still + overflows the buffer. Write at most block items per fwrite call. */ + test_one_rw (in, 2, BUFSIZ / 2 + 1, block[j]); + /* Likewise, but size=3. */ + test_one_rw (in, 3, BUFSIZ / 3 + 1, block[j]); + } + + free (in); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-fwrite-ro.c b/stdio-common/tst-fwrite-ro.c new file mode 100644 index 0000000000..7013bee53c --- /dev/null +++ b/stdio-common/tst-fwrite-ro.c @@ -0,0 +1,65 @@ +/* Test fwrite on a read-only stream. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <support/check.h> +#include <support/temp_file.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +/* A small buffer size is enough to run this test. */ +#define BUFSIZE 4 + +static int +do_test (void) +{ + int fd; + FILE *f; + struct stat64 st; + + /* Create a temporary file and open it in read-only mode. */ + fd = create_temp_file ("tst-fwrite-ro", NULL); + TEST_VERIFY_EXIT (fd != -1); + f = fdopen (fd, "r"); + TEST_VERIFY_EXIT (f != NULL); + + /* Try to write to the temporary file with nmemb = 0, then check that + fwrite returns 0. No errors are expected from this. */ + TEST_COMPARE (fwrite ("a", 1, 0, f), 0); + TEST_COMPARE (ferror (f), 0); + + /* Try to write to the temporary file with size = 0, then check that + fwrite returns 0. No errors are expected from this. */ + TEST_COMPARE (fwrite ("a", 0, 1, f), 0); + TEST_COMPARE (ferror (f), 0); + + /* Try to write a single byte to the temporary file, then check that + fwrite returns 0. Check if an error was reported. */ + TEST_COMPARE (fwrite ("a", 1, 1, f), 0); + TEST_COMPARE (ferror (f), 1); + clearerr (f); + + xfstat64 (fd, &st); + TEST_COMPARE (st.st_size, 0); + + xfclose (f); + + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-printf-format-as-c.c b/stdio-common/tst-printf-format-as-c.c new file mode 100644 index 0000000000..9eaf7aec73 --- /dev/null +++ b/stdio-common/tst-printf-format-as-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-as-char.c b/stdio-common/tst-printf-format-as-char.c new file mode 100644 index 0000000000..d9266d5760 --- /dev/null +++ b/stdio-common/tst-printf-format-as-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-as-double.c b/stdio-common/tst-printf-format-as-double.c new file mode 100644 index 0000000000..370ce8c11b --- /dev/null +++ b/stdio-common/tst-printf-format-as-double.c @@ -0,0 +1,22 @@ +/* Test for formatted 'asprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define TIMEOUT (DEFAULT_TIMEOUT * 32) + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-as-int.c b/stdio-common/tst-printf-format-as-int.c new file mode 100644 index 0000000000..e6e10a9769 --- /dev/null +++ b/stdio-common/tst-printf-format-as-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-as-ldouble.c b/stdio-common/tst-printf-format-as-ldouble.c new file mode 100644 index 0000000000..e7f72208ce --- /dev/null +++ b/stdio-common/tst-printf-format-as-ldouble.c @@ -0,0 +1,22 @@ +/* Test for formatted 'asprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define TIMEOUT (DEFAULT_TIMEOUT * 128) + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-as-llong.c b/stdio-common/tst-printf-format-as-llong.c new file mode 100644 index 0000000000..beaad73c23 --- /dev/null +++ b/stdio-common/tst-printf-format-as-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/sysdeps/aarch64/memset-reg.h b/stdio-common/tst-printf-format-as-long.c index 6c7f60b37e..7d968a873c 100644 --- a/sysdeps/aarch64/memset-reg.h +++ b/stdio-common/tst-printf-format-as-long.c @@ -1,5 +1,5 @@ -/* Register aliases for memset to be used across implementations. - Copyright (C) 2017-2024 Free Software Foundation, Inc. +/* Test for formatted 'asprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,15 +16,5 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#define dstin x0 -#define val x1 -#define valw w1 -#define count x2 -#define dst x3 -#define dstend x4 -#define tmp1 x5 -#define tmp1w w5 -#define tmp2 x6 -#define tmp2w w6 -#define zva_len x7 -#define zva_lenw w7 +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-as-s.c b/stdio-common/tst-printf-format-as-s.c new file mode 100644 index 0000000000..baa883d531 --- /dev/null +++ b/stdio-common/tst-printf-format-as-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-as-short.c b/stdio-common/tst-printf-format-as-short.c new file mode 100644 index 0000000000..8d0b078815 --- /dev/null +++ b/stdio-common/tst-printf-format-as-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-as-uchar.c b/stdio-common/tst-printf-format-as-uchar.c new file mode 100644 index 0000000000..8e46254a2f --- /dev/null +++ b/stdio-common/tst-printf-format-as-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-as-uint.c b/stdio-common/tst-printf-format-as-uint.c new file mode 100644 index 0000000000..8cf38d71a2 --- /dev/null +++ b/stdio-common/tst-printf-format-as-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-as-ullong.c b/stdio-common/tst-printf-format-as-ullong.c new file mode 100644 index 0000000000..30b31ed8f7 --- /dev/null +++ b/stdio-common/tst-printf-format-as-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-as-ulong.c b/stdio-common/tst-printf-format-as-ulong.c new file mode 100644 index 0000000000..9b108aa2b5 --- /dev/null +++ b/stdio-common/tst-printf-format-as-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-as-ushort.c b/stdio-common/tst-printf-format-as-ushort.c new file mode 100644 index 0000000000..44b912fc38 --- /dev/null +++ b/stdio-common/tst-printf-format-as-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'asprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-as.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-as.h b/stdio-common/tst-printf-format-as.h new file mode 100644 index 0000000000..c30d2e2c42 --- /dev/null +++ b/stdio-common/tst-printf-format-as.h @@ -0,0 +1,46 @@ +/* Test feature wrapper for formatted 'asprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> + +#define printf_under_test(...) \ +({ \ + __label__ out; \ + int result; \ + char *str; \ + \ + result = asprintf (&str, __VA_ARGS__); \ + if (result < 0) \ + { \ + perror ("asprintf"); \ + goto out; \ + } \ + if (fwrite (str, sizeof (*str), result, stdout) != result) \ + { \ + perror ("fwrite"); \ + result = -1; \ + } \ + free (str); \ +out: \ + result; \ +}) + +#ifndef TIMEOUT +# define TIMEOUT (DEFAULT_TIMEOUT * 12) +#endif diff --git a/stdio-common/tst-printf-format-c.sh b/stdio-common/tst-printf-format-c.sh new file mode 100644 index 0000000000..2b8d72050f --- /dev/null +++ b/stdio-common/tst-printf-format-c.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Testing of the 'c' printf conversion. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +echo Verifying c +(set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-c c | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion c output error, first line:\n/") 2>&1 || + exit 1 diff --git a/stdio-common/tst-printf-format-char.sh b/stdio-common/tst-printf-format-char.sh new file mode 100644 index 0000000000..99219679df --- /dev/null +++ b/stdio-common/tst-printf-format-char.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Testing of signed char printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=0 + +for f in d i; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-char $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-d-c.c b/stdio-common/tst-printf-format-d-c.c new file mode 100644 index 0000000000..61fd06654d --- /dev/null +++ b/stdio-common/tst-printf-format-d-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-d-char.c b/stdio-common/tst-printf-format-d-char.c new file mode 100644 index 0000000000..baa6e1683e --- /dev/null +++ b/stdio-common/tst-printf-format-d-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-d-double.c b/stdio-common/tst-printf-format-d-double.c new file mode 100644 index 0000000000..e432a9570d --- /dev/null +++ b/stdio-common/tst-printf-format-d-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-d-int.c b/stdio-common/tst-printf-format-d-int.c new file mode 100644 index 0000000000..6d59b23517 --- /dev/null +++ b/stdio-common/tst-printf-format-d-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-d-ldouble.c b/stdio-common/tst-printf-format-d-ldouble.c new file mode 100644 index 0000000000..67a2bae1bc --- /dev/null +++ b/stdio-common/tst-printf-format-d-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-d-llong.c b/stdio-common/tst-printf-format-d-llong.c new file mode 100644 index 0000000000..950a2b84b9 --- /dev/null +++ b/stdio-common/tst-printf-format-d-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-d-long.c b/stdio-common/tst-printf-format-d-long.c new file mode 100644 index 0000000000..4fabb41b0b --- /dev/null +++ b/stdio-common/tst-printf-format-d-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-d-s.c b/stdio-common/tst-printf-format-d-s.c new file mode 100644 index 0000000000..1ef896e6e7 --- /dev/null +++ b/stdio-common/tst-printf-format-d-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-d-short.c b/stdio-common/tst-printf-format-d-short.c new file mode 100644 index 0000000000..17767bb30d --- /dev/null +++ b/stdio-common/tst-printf-format-d-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-d-uchar.c b/stdio-common/tst-printf-format-d-uchar.c new file mode 100644 index 0000000000..732479ecab --- /dev/null +++ b/stdio-common/tst-printf-format-d-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-d-uint.c b/stdio-common/tst-printf-format-d-uint.c new file mode 100644 index 0000000000..5b68aec803 --- /dev/null +++ b/stdio-common/tst-printf-format-d-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-d-ullong.c b/stdio-common/tst-printf-format-d-ullong.c new file mode 100644 index 0000000000..0e20a1dccd --- /dev/null +++ b/stdio-common/tst-printf-format-d-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-d-ulong.c b/stdio-common/tst-printf-format-d-ulong.c new file mode 100644 index 0000000000..62085ace80 --- /dev/null +++ b/stdio-common/tst-printf-format-d-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-d-ushort.c b/stdio-common/tst-printf-format-d-ushort.c new file mode 100644 index 0000000000..7d8ef76d60 --- /dev/null +++ b/stdio-common/tst-printf-format-d-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'dprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-d.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-d.h b/stdio-common/tst-printf-format-d.h new file mode 100644 index 0000000000..af7f26c17b --- /dev/null +++ b/stdio-common/tst-printf-format-d.h @@ -0,0 +1,58 @@ +/* Test feature wrapper for formatted 'dprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +/* We need to go through the POSIX-mandated dance to switch between + handles on an open file description. */ + +#define printf_under_test(...) \ +({ \ + __label__ out; \ + int result; \ + \ + result = fflush (stdout); \ + if (result == EOF) \ + { \ + perror ("fflush"); \ + goto out; \ + } \ + result = lseek (STDOUT_FILENO, 0, SEEK_END); \ + if (result < 0 && errno == ESPIPE) \ + result = 0; \ + if (result < 0) \ + { \ + perror ("lseek"); \ + goto out; \ + } \ + result = dprintf (STDOUT_FILENO, __VA_ARGS__); \ + if (result < 0) \ + { \ + perror ("dprintf"); \ + goto out; \ + } \ + result = fseek (stdout, 0, SEEK_END); \ + if (result < 0 && errno == ESPIPE) \ + result = 0; \ + if (result < 0) \ + perror ("fseek"); \ +out: \ + result; \ +}) diff --git a/stdio-common/tst-printf-format-double.sh b/stdio-common/tst-printf-format-double.sh new file mode 100644 index 0000000000..b4e61acfdc --- /dev/null +++ b/stdio-common/tst-printf-format-double.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# Testing of double printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +format=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +# For floating-point formats we need to use the bignum mode even if the +# regular mode would do, because GAWK in the latter mode uses sprintf(3) +# internally to process the conversion requested, so any bug in our code +# would then be verified against itself, defeating the objective of doing +# the verification against an independent implementation. +AWK="${AWK:-awk} -M" + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="-1.79769313486231570814527423731704357e+308" +val=$(echo "$ref" | $AWK '{ printf "%.35e\n", $1 }' 2>&1) && + test "$val" = "$ref" && status=0 + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +# Check for any additional conversions that AWK handles conditionally +# according to its version and/or the environment it has been built in. +# The 'A' and 'a' conversions are not suitable to use at this point, as +# output produced by AWK is different apparently due to a subtlety in +# rounding, so do not try them. +declare -A conversion_disabled +ref="-inf" +for f in f F; do + conversion_disabled[$f]=true + val=$(echo "$ref" | $AWK '{ printf "%'$f'\n", $1 }' 2>&1) && + test "${val^^}" = "${ref^^}" && unset conversion_disabled[$f] +done + +if test "${conversion_disabled[$format]+set}" = set; then + echo Unsupported $format + status=77 +else + echo Verifying $format + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-double $format | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | + sed "s/^/Conversion $format output error, first line:\n/") 2>&1 || + status=1 +fi + +exit $status diff --git a/stdio-common/tst-printf-format-f-c.c b/stdio-common/tst-printf-format-f-c.c new file mode 100644 index 0000000000..1db9e2b5f3 --- /dev/null +++ b/stdio-common/tst-printf-format-f-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-f-char.c b/stdio-common/tst-printf-format-f-char.c new file mode 100644 index 0000000000..a492f31862 --- /dev/null +++ b/stdio-common/tst-printf-format-f-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-f-double.c b/stdio-common/tst-printf-format-f-double.c new file mode 100644 index 0000000000..906ef0b90b --- /dev/null +++ b/stdio-common/tst-printf-format-f-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-f-int.c b/stdio-common/tst-printf-format-f-int.c new file mode 100644 index 0000000000..92dc0c9197 --- /dev/null +++ b/stdio-common/tst-printf-format-f-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-f-ldouble.c b/stdio-common/tst-printf-format-f-ldouble.c new file mode 100644 index 0000000000..0a0c88d64c --- /dev/null +++ b/stdio-common/tst-printf-format-f-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-f-llong.c b/stdio-common/tst-printf-format-f-llong.c new file mode 100644 index 0000000000..ceb8d035fa --- /dev/null +++ b/stdio-common/tst-printf-format-f-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-f-long.c b/stdio-common/tst-printf-format-f-long.c new file mode 100644 index 0000000000..a4a5dca5eb --- /dev/null +++ b/stdio-common/tst-printf-format-f-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-f-s.c b/stdio-common/tst-printf-format-f-s.c new file mode 100644 index 0000000000..da0e0f8bac --- /dev/null +++ b/stdio-common/tst-printf-format-f-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-f-short.c b/stdio-common/tst-printf-format-f-short.c new file mode 100644 index 0000000000..3abd134d0a --- /dev/null +++ b/stdio-common/tst-printf-format-f-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-f-uchar.c b/stdio-common/tst-printf-format-f-uchar.c new file mode 100644 index 0000000000..f104cde37b --- /dev/null +++ b/stdio-common/tst-printf-format-f-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-f-uint.c b/stdio-common/tst-printf-format-f-uint.c new file mode 100644 index 0000000000..0e1fdb4b36 --- /dev/null +++ b/stdio-common/tst-printf-format-f-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-f-ullong.c b/stdio-common/tst-printf-format-f-ullong.c new file mode 100644 index 0000000000..b4669fcbb7 --- /dev/null +++ b/stdio-common/tst-printf-format-f-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-f-ulong.c b/stdio-common/tst-printf-format-f-ulong.c new file mode 100644 index 0000000000..3f4f900362 --- /dev/null +++ b/stdio-common/tst-printf-format-f-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-f-ushort.c b/stdio-common/tst-printf-format-f-ushort.c new file mode 100644 index 0000000000..d49c237140 --- /dev/null +++ b/stdio-common/tst-printf-format-f-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'fprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-f.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-f.h b/stdio-common/tst-printf-format-f.h new file mode 100644 index 0000000000..efb3283a03 --- /dev/null +++ b/stdio-common/tst-printf-format-f.h @@ -0,0 +1,29 @@ +/* Test feature wrapper for formatted 'fprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> + +#define printf_under_test(...) \ +({ \ + int result; \ + \ + result = fprintf (stdout, __VA_ARGS__); \ + if (result < 0) \ + perror ("fprintf"); \ + result; \ +}) diff --git a/stdio-common/tst-printf-format-int.sh b/stdio-common/tst-printf-format-int.sh new file mode 100644 index 0000000000..32dcfb160a --- /dev/null +++ b/stdio-common/tst-printf-format-int.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="-2147483648" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in d i; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-int $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-ldouble.sh b/stdio-common/tst-printf-format-ldouble.sh new file mode 100644 index 0000000000..4bfecadea9 --- /dev/null +++ b/stdio-common/tst-printf-format-ldouble.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# Testing of long double printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +format=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +# For floating-point formats we need to use the bignum mode even if the +# regular mode would do, because GAWK in the latter mode uses sprintf(3) +# internally to process the conversion requested, so any bug in our code +# would then be verified against itself, defeating the objective of doing +# the verification against an independent implementation. +AWK="${AWK:-awk} -M" + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="-1.18973149535723176508575932662800702e+4932" +val=$(echo "$ref" | $AWK '{ PREC=113; printf "%.35e\n", $1 }' 2>&1) && + test "$val" = "$ref" && status=0 + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +# Check for any additional conversions that AWK handles conditionally +# according to its version and/or the environment it has been built in. +# The 'A' and 'a' conversions are not suitable to use at this point, as +# output produced by AWK is different apparently due to a subtlety in +# rounding, so do not try them. +declare -A conversion_disabled +ref="-inf" +for f in f F; do + conversion_disabled[$f]=true + val=$(echo "$ref" | $AWK '{ printf "%'$f'\n", $1 }' 2>&1) && + test "${val^^}" = "${ref^^}" && unset conversion_disabled[$f] +done + +if test "${conversion_disabled[$format]+set}" = set; then + echo Unsupported $format + status=77 +else + echo Verifying $format + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-ldouble $format | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | + sed "s/^/Conversion $format output error, first line:\n/") 2>&1 || + status=1 +fi + +exit $status diff --git a/stdio-common/tst-printf-format-llong.sh b/stdio-common/tst-printf-format-llong.sh new file mode 100644 index 0000000000..b028a2c89b --- /dev/null +++ b/stdio-common/tst-printf-format-llong.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of long long int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="9223372036854775807" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in d i; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-llong $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-long.sh b/stdio-common/tst-printf-format-long.sh new file mode 100644 index 0000000000..77c67ea5bf --- /dev/null +++ b/stdio-common/tst-printf-format-long.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of long int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="9223372036854775807" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in d i; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-long $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-p-c.c b/stdio-common/tst-printf-format-p-c.c new file mode 100644 index 0000000000..ba46f55431 --- /dev/null +++ b/stdio-common/tst-printf-format-p-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-p-char.c b/stdio-common/tst-printf-format-p-char.c new file mode 100644 index 0000000000..7640bf8f66 --- /dev/null +++ b/stdio-common/tst-printf-format-p-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-p-double.c b/stdio-common/tst-printf-format-p-double.c new file mode 100644 index 0000000000..8271ec7bea --- /dev/null +++ b/stdio-common/tst-printf-format-p-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-p-int.c b/stdio-common/tst-printf-format-p-int.c new file mode 100644 index 0000000000..cdfaaacc34 --- /dev/null +++ b/stdio-common/tst-printf-format-p-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-p-ldouble.c b/stdio-common/tst-printf-format-p-ldouble.c new file mode 100644 index 0000000000..266989db32 --- /dev/null +++ b/stdio-common/tst-printf-format-p-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-p-llong.c b/stdio-common/tst-printf-format-p-llong.c new file mode 100644 index 0000000000..936f626a45 --- /dev/null +++ b/stdio-common/tst-printf-format-p-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-p-long.c b/stdio-common/tst-printf-format-p-long.c new file mode 100644 index 0000000000..c82c3cac09 --- /dev/null +++ b/stdio-common/tst-printf-format-p-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-p-s.c b/stdio-common/tst-printf-format-p-s.c new file mode 100644 index 0000000000..4b0201ae94 --- /dev/null +++ b/stdio-common/tst-printf-format-p-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-p-short.c b/stdio-common/tst-printf-format-p-short.c new file mode 100644 index 0000000000..2bf17f1b25 --- /dev/null +++ b/stdio-common/tst-printf-format-p-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-p-uchar.c b/stdio-common/tst-printf-format-p-uchar.c new file mode 100644 index 0000000000..02a70c3f15 --- /dev/null +++ b/stdio-common/tst-printf-format-p-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-p-uint.c b/stdio-common/tst-printf-format-p-uint.c new file mode 100644 index 0000000000..e61455e010 --- /dev/null +++ b/stdio-common/tst-printf-format-p-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-p-ullong.c b/stdio-common/tst-printf-format-p-ullong.c new file mode 100644 index 0000000000..16b2541acd --- /dev/null +++ b/stdio-common/tst-printf-format-p-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-p-ulong.c b/stdio-common/tst-printf-format-p-ulong.c new file mode 100644 index 0000000000..0b3a7fd256 --- /dev/null +++ b/stdio-common/tst-printf-format-p-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-p-ushort.c b/stdio-common/tst-printf-format-p-ushort.c new file mode 100644 index 0000000000..fa62f500ab --- /dev/null +++ b/stdio-common/tst-printf-format-p-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'printf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-p.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-p.h b/stdio-common/tst-printf-format-p.h new file mode 100644 index 0000000000..a9ffbb0d0e --- /dev/null +++ b/stdio-common/tst-printf-format-p.h @@ -0,0 +1,29 @@ +/* Test feature wrapper for formatted 'printf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> + +#define printf_under_test(...) \ +({ \ + int result; \ + \ + result = printf (__VA_ARGS__); \ + if (result < 0) \ + perror ("printf"); \ + result; \ +}) diff --git a/stdio-common/tst-printf-format-s-c.c b/stdio-common/tst-printf-format-s-c.c new file mode 100644 index 0000000000..87dad077b9 --- /dev/null +++ b/stdio-common/tst-printf-format-s-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-s-char.c b/stdio-common/tst-printf-format-s-char.c new file mode 100644 index 0000000000..f67ac94a5d --- /dev/null +++ b/stdio-common/tst-printf-format-s-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-s-double.c b/stdio-common/tst-printf-format-s-double.c new file mode 100644 index 0000000000..16186b5dc5 --- /dev/null +++ b/stdio-common/tst-printf-format-s-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-s-int.c b/stdio-common/tst-printf-format-s-int.c new file mode 100644 index 0000000000..2ed7b2df47 --- /dev/null +++ b/stdio-common/tst-printf-format-s-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-s-ldouble.c b/stdio-common/tst-printf-format-s-ldouble.c new file mode 100644 index 0000000000..0362cc50f7 --- /dev/null +++ b/stdio-common/tst-printf-format-s-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-s-llong.c b/stdio-common/tst-printf-format-s-llong.c new file mode 100644 index 0000000000..b49f84998a --- /dev/null +++ b/stdio-common/tst-printf-format-s-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-s-long.c b/stdio-common/tst-printf-format-s-long.c new file mode 100644 index 0000000000..49224d7f29 --- /dev/null +++ b/stdio-common/tst-printf-format-s-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-s-s.c b/stdio-common/tst-printf-format-s-s.c new file mode 100644 index 0000000000..3a400f8907 --- /dev/null +++ b/stdio-common/tst-printf-format-s-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-s-short.c b/stdio-common/tst-printf-format-s-short.c new file mode 100644 index 0000000000..c98a808cff --- /dev/null +++ b/stdio-common/tst-printf-format-s-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-s-uchar.c b/stdio-common/tst-printf-format-s-uchar.c new file mode 100644 index 0000000000..befc368949 --- /dev/null +++ b/stdio-common/tst-printf-format-s-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-s-uint.c b/stdio-common/tst-printf-format-s-uint.c new file mode 100644 index 0000000000..f3a4c49632 --- /dev/null +++ b/stdio-common/tst-printf-format-s-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-s-ullong.c b/stdio-common/tst-printf-format-s-ullong.c new file mode 100644 index 0000000000..4ce5590379 --- /dev/null +++ b/stdio-common/tst-printf-format-s-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-s-ulong.c b/stdio-common/tst-printf-format-s-ulong.c new file mode 100644 index 0000000000..81f9eea893 --- /dev/null +++ b/stdio-common/tst-printf-format-s-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-s-ushort.c b/stdio-common/tst-printf-format-s-ushort.c new file mode 100644 index 0000000000..4b1cca6e6c --- /dev/null +++ b/stdio-common/tst-printf-format-s-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'sprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-s.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-s.h b/stdio-common/tst-printf-format-s.h new file mode 100644 index 0000000000..7d1e72cffb --- /dev/null +++ b/stdio-common/tst-printf-format-s.h @@ -0,0 +1,60 @@ +/* Test feature wrapper for formatted 'sprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> + +#include <support/next_to_fault.h> + +#define SPRINTF_BUFFER_SIZE 65536 + +static struct support_next_to_fault ntf; + +#define PREPARE printf_under_test_init +static void +printf_under_test_init (int argc, char **argv) +{ + ntf = support_next_to_fault_allocate (SPRINTF_BUFFER_SIZE); +} + +static void __attribute__ ((destructor)) +printf_under_test_fini (void) +{ + support_next_to_fault_free (&ntf); +} + +#define printf_under_test(...) \ +({ \ + __label__ out; \ + char *str = ntf.buffer; \ + int result; \ + \ + result = sprintf (str, __VA_ARGS__); \ + if (result < 0) \ + { \ + perror ("sprintf"); \ + goto out; \ + } \ + if (fwrite (str, sizeof (*str), result, stdout) != result) \ + { \ + perror ("fwrite"); \ + result = -1; \ + } \ +out: \ + result; \ +}) diff --git a/stdio-common/tst-printf-format-s.sh b/stdio-common/tst-printf-format-s.sh new file mode 100644 index 0000000000..fa0690f980 --- /dev/null +++ b/stdio-common/tst-printf-format-s.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Testing of the 's' printf conversion. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +echo Verifying s +(set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-s s | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion s output error, first line:\n/") 2>&1 || + exit 1 diff --git a/stdio-common/tst-printf-format-short.sh b/stdio-common/tst-printf-format-short.sh new file mode 100644 index 0000000000..a610a15fa1 --- /dev/null +++ b/stdio-common/tst-printf-format-short.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Testing of short int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=0 + +for f in d i; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-short $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-skeleton-c.c b/stdio-common/tst-printf-format-skeleton-c.c new file mode 100644 index 0000000000..3f9bbc91e3 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-c.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 3 +#define HUGE_WIDTH 4 +#define REF_FMT "c" +#define REF_VAL(v) (v) +typedef unsigned char type_t; +static const type_t vals[] = { 0, 42, UCHAR_MAX }; +static const char length[] = ""; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-char.c b/stdio-common/tst-printf-format-skeleton-char.c new file mode 100644 index 0000000000..8c7b44b061 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-char.c @@ -0,0 +1,31 @@ +/* Test skeleton for formatted printf output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 3 +#define HUGE_WIDTH 5 +#define REF_FMT "i" +#define REF_VAL(v) ((((v) & 0xff) ^ 0x80) - 0x80) +typedef int type_t; +static const type_t vals[] = + { SCHAR_MIN - 123, SCHAR_MIN - 1, SCHAR_MIN, -123, -1, 0, 1, 42, SCHAR_MAX, + SCHAR_MAX + 1, SCHAR_MAX + 42 }; +static const char length[] = "hh"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-double.c b/stdio-common/tst-printf-format-skeleton-double.c new file mode 100644 index 0000000000..03ac594736 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-double.c @@ -0,0 +1,33 @@ +/* Test skeleton for formatted printf output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <float.h> +#include <math.h> + +#define MID_WIDTH 20 +#define HUGE_WIDTH 320 +#define REF_FMT ".35e" +#define REF_VAL(v) (v) +#define PREC DBL_MANT_DIG +typedef double type_t; +static const type_t vals[] = + { -HUGE_VAL, -DBL_MAX, -DBL_MIN, copysign (0, -1), -NAN, NAN, 0, DBL_MIN, + DBL_MAX, HUGE_VAL }; +static const char length[] = ""; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-int.c b/stdio-common/tst-printf-format-skeleton-int.c new file mode 100644 index 0000000000..5d2076c53f --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-int.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 8 +#define HUGE_WIDTH 15 +#define REF_FMT "i" +#define REF_VAL(v) (v) +typedef int type_t; +static const type_t vals[] = { INT_MIN, -123, -1, 0, 1, 42, INT_MAX }; +static const char length[] = ""; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-ldouble.c b/stdio-common/tst-printf-format-skeleton-ldouble.c new file mode 100644 index 0000000000..ed47e77963 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-ldouble.c @@ -0,0 +1,38 @@ +/* Test skeleton for formatted printf output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <float.h> +#include <math.h> +#include <support/test-driver.h> + +#define MID_WIDTH 20 +#define HUGE_WIDTH 4950 +#define REF_FMT ".35Le" +#define REF_VAL(v) (v) +#define PREC LDBL_MANT_DIG +typedef long double type_t; +static const type_t vals[] = + { -HUGE_VAL, -LDBL_MAX, -LDBL_MIN, copysign (0, -1), -NAN, NAN, 0, LDBL_MIN, + LDBL_MAX, HUGE_VAL }; +static const char length[] = "L"; + +#ifndef TIMEOUT +# define TIMEOUT (DEFAULT_TIMEOUT * 64) +#endif + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-llong.c b/stdio-common/tst-printf-format-skeleton-llong.c new file mode 100644 index 0000000000..9a4b7a39af --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-llong.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 15 +#define HUGE_WIDTH 25 +#define REF_FMT "lli" +#define REF_VAL(v) (v) +typedef long long int type_t; +static const type_t vals[] = { LLONG_MIN, -123, -1, 0, 1, 42, LLONG_MAX }; +static const char length[] = "ll"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-long.c b/stdio-common/tst-printf-format-skeleton-long.c new file mode 100644 index 0000000000..bf011b7fdb --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-long.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 15 +#define HUGE_WIDTH 25 +#define REF_FMT "li" +#define REF_VAL(v) (v) +typedef long int type_t; +static const type_t vals[] = { LONG_MIN, -123, -1, 0, 1, 42, LONG_MAX }; +static const char length[] = "l"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-s.c b/stdio-common/tst-printf-format-skeleton-s.c new file mode 100644 index 0000000000..59aab9fc89 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-s.c @@ -0,0 +1,30 @@ +/* Test skeleton for formatted printf output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 5 +#define HUGE_WIDTH 10 +#define REF_FMT "s" +#define REF_VAL(v) (v) +typedef const char *type_t; +static const type_t vals[] = + { "", "The", "quick", "brown fox", "jumps over the lazy dog" }; +static const char length[] = ""; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-short.c b/stdio-common/tst-printf-format-skeleton-short.c new file mode 100644 index 0000000000..1b7c8c09d7 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-short.c @@ -0,0 +1,31 @@ +/* Test skeleton for formatted printf output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 4 +#define HUGE_WIDTH 7 +#define REF_FMT "i" +#define REF_VAL(v) ((((v) & 0xffff) ^ 0x8000) - 0x8000) +typedef int type_t; +static const type_t vals[] = + { SHRT_MIN - 123, SHRT_MIN - 1, SHRT_MIN, -123, -1, 0, 1, 42, SHRT_MAX, + SHRT_MAX + 1, SHRT_MAX + 42 }; +static const char length[] = "h"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-uchar.c b/stdio-common/tst-printf-format-skeleton-uchar.c new file mode 100644 index 0000000000..389188d746 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-uchar.c @@ -0,0 +1,30 @@ +/* Test skeleton for formatted printf output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 3 +#define HUGE_WIDTH 4 +#define REF_FMT "u" +#define REF_VAL(v) ((v) & 0xff) +typedef unsigned int type_t; +static const type_t vals[] = + { 0, 1, 42, UCHAR_MAX, UCHAR_MAX + 1, UCHAR_MAX + 42 }; +static const char length[] = "hh"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-uint.c b/stdio-common/tst-printf-format-skeleton-uint.c new file mode 100644 index 0000000000..6a41591114 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-uint.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 7 +#define HUGE_WIDTH 14 +#define REF_FMT "u" +#define REF_VAL(v) (v) +typedef unsigned int type_t; +static const type_t vals[] = { 0, 1, 42, UINT_MAX }; +static const char length[] = ""; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-ullong.c b/stdio-common/tst-printf-format-skeleton-ullong.c new file mode 100644 index 0000000000..a2ad7893cf --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-ullong.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for unsigned long long int convs. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 14 +#define HUGE_WIDTH 24 +#define REF_FMT "llu" +#define REF_VAL(v) (v) +typedef unsigned long long int type_t; +static const type_t vals[] = { 0, 1, 42, UINT_MAX, ULLONG_MAX }; +static const char length[] = "ll"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-ulong.c b/stdio-common/tst-printf-format-skeleton-ulong.c new file mode 100644 index 0000000000..05cd4e0efc --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-ulong.c @@ -0,0 +1,29 @@ +/* Test skeleton for formatted printf output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 14 +#define HUGE_WIDTH 24 +#define REF_FMT "lu" +#define REF_VAL(v) (v) +typedef unsigned long int type_t; +static const type_t vals[] = { 0, 1, 42, ULONG_MAX }; +static const char length[] = "l"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton-ushort.c b/stdio-common/tst-printf-format-skeleton-ushort.c new file mode 100644 index 0000000000..5cc2e0283a --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton-ushort.c @@ -0,0 +1,30 @@ +/* Test skeleton for formatted printf output for unsigned short int convs. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <limits.h> + +#define MID_WIDTH 3 +#define HUGE_WIDTH 6 +#define REF_FMT "u" +#define REF_VAL(v) ((v) & 0xffff) +typedef unsigned int type_t; +static const type_t vals[] = + { 0, 1, 42, USHRT_MAX, USHRT_MAX + 1, USHRT_MAX + 42 }; +static const char length[] = "h"; + +#include "tst-printf-format-skeleton.c" diff --git a/stdio-common/tst-printf-format-skeleton.c b/stdio-common/tst-printf-format-skeleton.c new file mode 100644 index 0000000000..e564d3a853 --- /dev/null +++ b/stdio-common/tst-printf-format-skeleton.c @@ -0,0 +1,380 @@ +/* Test skeleton for formatted printf output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* The following definitions have to be supplied by the source including + this skeleton: + + Macros: + MID_WIDTH Medium width/precision positive integer constant. Choose + such as to cause some, but not all the strings produced + to be truncated for the conversions handled. + HUGE_WIDTH Large width/precision positive integer constant. Choose + such as to cause none of the strings produced to be + truncated for the conversions handled. + REF_FMT Reference output format string. Use no flags and such + a precision and length modifier, where applicable, and + a conversion as to make sure the output produced allows + the original value to be reproduced. + REF_VAL(v) Reference value V transformation. For conversions with + a truncating length modifier define such as to reproduce + the truncation operation, otherwise let V pass through. + PREC [optional] Working precision positive integer constant. + Set to the number of binary digits in the significand for + the argument type handled; usually for floating-point + conversions only, but it may be required for 128-bit or + wider integer data types as well. + + Typedefs: + type_t Variadic function argument type. Define to the promoted + type corresponding to the conversion argument type + handled. + + Variables: + vals Array of TYPE_T values. Choose such as to cover boundary + and any special cases. + length Length modifier string. Define according to the + conversion argument type handled. + + The feature to be tested is wrapped into 'printf_under_test'. It is up + to the source including this skeleton if this is going to be a macro + or an actual function. + + See tst-*printf-format-*.c for usage examples. */ + +#include <array_length.h> +#include <dlfcn.h> +#include <mcheck.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* Set to nonzero to select all possible tuples with repetitions of 1..n + elements from the set of flags as defined in FLAGS array below; n is + the length of FLAGS array. Otherwise select all possible tuples with + repetitions of 1..2 elements, followed by tuples of 3..n elements where + the index of each element k; k = 2..n in FLAGS is lower than the index + of element k-1 in FLAGS. */ +#ifndef TST_PRINTF_DUPS +# define TST_PRINTF_DUPS 0 +#endif +/* Set to nonzero to report the precision (number of significand digits) + required for floating-point calculations. */ +#ifndef PREC +# define PREC 0 +#endif + +/* The list of conversions permitted for the '#' flag, the '0' flag, + and precision respectively. */ +#define HASH_FORMATS "boxXaAeEfFgG" +#define ZERO_FORMATS "bdiouxXaAeEfFgG" +#define PREC_FORMATS "bdiouxXaAeEfFgGs" + +/* Output format conversion flags. */ +static struct +{ + /* Flag character. */ + char f; + /* List of conversion specifiers the flag is valid for; NULL if all. */ + const char *s; +} const flags[] = + { {'-'}, {'+'}, {' '}, {'#', HASH_FORMATS}, {'0', ZERO_FORMATS} }; + +/* Helper to initialize elements of the PW array for the width and + precision to be specified as a positive integer directly in the + format, and then as both a negative and a positive argument to '*'. */ +#define STR(v) #v +#define WPINIT(v) {0, STR (v)}, {v, NULL}, {-v, NULL} + +/* Width and precision settings to iterate over; zero is initialized + directly as it has no corresponding negated value and other values + use the helper above. */ +static struct wp +{ + /* Integer argument to '*', used if S is NULL. */ + int i; + /* String denoting an integer to use in the format, or NULL to use '*'. */ + const char *s; +} const wp[] = + { {0, "0"}, {0, NULL}, WPINIT (1), WPINIT (2), + WPINIT (MID_WIDTH), WPINIT (HUGE_WIDTH) }; + +/* Produce a record according to '%' and zero or more output format flags + already provided in FMT at indices 0..IDX-1, width W if non-NULL, '.' + precision specifier if POINT set to true, precision P if non-NULL, + any length modifiers L, conversion C, and value VAL. + + Record formats produced: + + %<FLAGS><L><C>:<VAL>: + %<FLAGS>.<L><C>:<VAL>: + %<FLAGS><W><L><C>:<VAL>: + %<FLAGS><W>.<L><C>:<VAL>: + %<FLAGS>.<P><L><C>:<VAL>: + %<FLAGS><W>.<P><L><C>:<VAL>: + %<FLAGS>*<L><C>:<W>:<VAL>: + %<FLAGS>*.<L><C>:<W>:<VAL>: + %<FLAGS>.*<L><C>:<P>:<VAL>: + %<FLAGS>*.*<L><C>:<W>:<P>:<VAL>: + + Return 0 on success, -1 on failure. */ + +static int +do_printf (char *fmt, size_t idx, + const struct wp *w, bool point, const struct wp *p, + const char *l, char c, type_t val) +{ + int wpval[2] = { 0 }; + size_t nint = 0; + int result; + size_t i; + + if (w != NULL) + { + if (w->s == NULL) + { + fmt[idx++] = '*'; + wpval[nint++] = w->i; + } + else + for (i = 0; w->s[i] != '\0'; i++) + fmt[idx++] = w->s[i]; + } + if (point) + fmt[idx++] = '.'; + if (p != NULL) + { + if (p->s == NULL) + { + fmt[idx++] = '*'; + wpval[nint++] = p->i; + } + else + for (i = 0; p->s[i] != '\0'; i++) + fmt[idx++] = p->s[i]; + } + for (i = 0; length[i] != '\0'; i++) + fmt[idx++] = length[i]; + fmt[idx++] = c; + fmt[idx] = ':'; + fmt[idx + 1] = '\0'; + if (fputs (fmt, stdout) == EOF) + { + perror ("fputs"); + return -1; + } + fmt[idx++] = '\0'; + if (nint > 0) + { + result = printf ("%i:", wpval[0]); + if (result < 0) + { + perror ("printf"); + return -1; + } + if (nint > 1) + { + result = printf ("%i:", wpval[1]); + if (result < 0) + { + perror ("printf"); + return -1; + } + } + } + switch (nint) + { + case 0: + result = printf_under_test (fmt, val); + break; + case 1: + result = printf_under_test (fmt, wpval[0], val); + break; + case 2: + result = printf_under_test (fmt, wpval[0], wpval[1], val); + break; + default: + fputs ("Broken test, nint > 2\n", stderr); + return -1; + } + if (result < 0) + return -1; + if (fputs (":\n", stdout) == EOF) + { + perror ("fputs"); + return -1; + } + return 0; +} + +/* Produce a list of records according to '%' and zero or more output + format flags already provided in FMT at indices 0..IDX-1, iterating + over widths and precisions defined in global WP array, any length + modifiers L, conversion C, and value VAL. Inline '0' is omitted for + the width, as it is a flag already handled among the flags supplied. + Precision is omitted where the conversion does not allow it. + + Return 0 on success, -1 on failure. */ + +static int +do_printf_flags (char *fmt, size_t idx, const char *l, char c, type_t val) +{ + bool do_prec = strchr (PREC_FORMATS, c) != NULL; + size_t i; + + if (do_printf (fmt, idx, NULL, false, NULL, l, c, val) < 0) + return -1; + if (do_prec && do_printf (fmt, idx, NULL, true, NULL, l, c, val) < 0) + return -1; + for (i = 0; i < array_length (wp); i++) + { + size_t j; + + if (do_prec && do_printf (fmt, idx, NULL, true, wp + i, l, c, val) < 0) + return -1; + /* Inline '0' is a flag rather than width and is handled elsewhere. */ + if (wp[i].s != NULL && wp[i].s[0] == '0' && wp[i].s[1] == '\0') + continue; + if (do_printf (fmt, idx, wp + i, false, NULL, l, c, val) < 0) + return -1; + if (do_prec) + { + if (do_printf (fmt, idx, wp + i, true, NULL, l, c, val) < 0) + return -1; + for (j = 0; j < array_length (wp); j++) + if (do_printf (fmt, idx, wp + i, true, wp + j, l, c, val) < 0) + return -1; + } + } + return 0; +} + +/* Produce a list of records using the formatted output specifier + supplied in ARGV[1] preceded by any length modifier supplied in + the global LENGTH variable, iterating over format flags defined + in the global FLAGS array, and values supplied in the global VALS + array. Note that the output specifier supplied is not verified + against TYPE_T, so undefined behavior will result if this is used + incorrectly. + + If PREC is nonzero, then this record: + + prec:<PREC> + + is produced at the beginning. Then for each VAL from VALS a block + of records is produced starting with: + + val:<VAL> + + where VAL is formatted according to REF_FMT output format. The + block continues with records as shown with DO_PRINTF above using + flags iterated over according to TST_PRINTF_DUPS. + + See the top of this file for the definitions that have to be + provided by the source including this skeleton. */ + +static int +do_test (int argc, char *argv[]) +{ + char fmt[100] = {'%'}; + size_t j; + size_t v; + char c; + + if (argc < 2 || *argv[1] == '\0') + { + fprintf (stderr, "Usage: %s <specifier>\n", basename (argv[0])); + return EXIT_FAILURE; + } + + mtrace (); + + if (PREC && printf ("prec:%i\n", PREC) < 0) + { + perror ("printf"); + return EXIT_FAILURE; + } + + c = *argv[1]; + for (v = 0; v < array_length (vals); v++) + { + if (printf ("val:%" REF_FMT "\n", REF_VAL (vals[v])) < 0) + { + perror ("printf"); + return EXIT_FAILURE; + } + + if (do_printf_flags (fmt, 1, length, c, vals[v]) < 0) + return EXIT_FAILURE; + for (j = 0; j < array_length (flags); j++) + { + bool done = false; + size_t i[j + 1]; + size_t k; + + memset (i, 0, sizeof (i)); + while (!done) + { + bool skip = false; + size_t idx = 1; + char f; + + for (k = 0; k <= j; k++) + { + const char *s = flags[i[k]].s; + + if (s && strchr (s, c) == NULL) + skip = true; + if (!TST_PRINTF_DUPS && j > 1 && k > 0 && i[k] >= i[k - 1]) + skip = true; + if (skip) + break; + + f = flags[i[k]].f; + fmt[idx++] = f; + } + if (!skip && do_printf_flags (fmt, idx, length, c, vals[v]) < 0) + return EXIT_FAILURE; + for (k = 0; k <= j; k++) + { + i[k]++; + if (i[k] < array_length (flags)) + break; + else if (k == j) + done = true; + else + i[k] = 0; + } + } + } + } + + return EXIT_SUCCESS; +} + +/* Interpose 'dladdr' with a stub to speed up malloc tracing. */ + +int +dladdr (const void *, Dl_info *) +{ + return 0; +} + +#define TEST_FUNCTION_ARGV do_test +#include <support/test-driver.c> diff --git a/stdio-common/tst-printf-format-sn-c.c b/stdio-common/tst-printf-format-sn-c.c new file mode 100644 index 0000000000..59f51d635b --- /dev/null +++ b/stdio-common/tst-printf-format-sn-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-sn-char.c b/stdio-common/tst-printf-format-sn-char.c new file mode 100644 index 0000000000..8b682dd2d5 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-sn-double.c b/stdio-common/tst-printf-format-sn-double.c new file mode 100644 index 0000000000..4719a58d84 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-sn-int.c b/stdio-common/tst-printf-format-sn-int.c new file mode 100644 index 0000000000..94c42f246f --- /dev/null +++ b/stdio-common/tst-printf-format-sn-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-sn-ldouble.c b/stdio-common/tst-printf-format-sn-ldouble.c new file mode 100644 index 0000000000..921f3ffe3b --- /dev/null +++ b/stdio-common/tst-printf-format-sn-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-sn-llong.c b/stdio-common/tst-printf-format-sn-llong.c new file mode 100644 index 0000000000..013552791e --- /dev/null +++ b/stdio-common/tst-printf-format-sn-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-sn-long.c b/stdio-common/tst-printf-format-sn-long.c new file mode 100644 index 0000000000..58c8912746 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-sn-s.c b/stdio-common/tst-printf-format-sn-s.c new file mode 100644 index 0000000000..aa3f170c14 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-sn-short.c b/stdio-common/tst-printf-format-sn-short.c new file mode 100644 index 0000000000..f7baa1211d --- /dev/null +++ b/stdio-common/tst-printf-format-sn-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-sn-uchar.c b/stdio-common/tst-printf-format-sn-uchar.c new file mode 100644 index 0000000000..6ae5f121bd --- /dev/null +++ b/stdio-common/tst-printf-format-sn-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-sn-uint.c b/stdio-common/tst-printf-format-sn-uint.c new file mode 100644 index 0000000000..f0a0c3063f --- /dev/null +++ b/stdio-common/tst-printf-format-sn-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-sn-ullong.c b/stdio-common/tst-printf-format-sn-ullong.c new file mode 100644 index 0000000000..0dc0a50c4f --- /dev/null +++ b/stdio-common/tst-printf-format-sn-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-sn-ulong.c b/stdio-common/tst-printf-format-sn-ulong.c new file mode 100644 index 0000000000..23ff5a27d7 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-sn-ushort.c b/stdio-common/tst-printf-format-sn-ushort.c new file mode 100644 index 0000000000..1c5cffbeb4 --- /dev/null +++ b/stdio-common/tst-printf-format-sn-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'snprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-sn.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-sn.h b/stdio-common/tst-printf-format-sn.h new file mode 100644 index 0000000000..ec2645bf57 --- /dev/null +++ b/stdio-common/tst-printf-format-sn.h @@ -0,0 +1,60 @@ +/* Test feature wrapper for formatted 'snprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> + +#include <support/next_to_fault.h> + +#define SPRINTF_BUFFER_SIZE 65536 + +static struct support_next_to_fault ntf; + +#define PREPARE printf_under_test_init +static void +printf_under_test_init (int argc, char **argv) +{ + ntf = support_next_to_fault_allocate (SPRINTF_BUFFER_SIZE); +} + +static void __attribute__ ((destructor)) +printf_under_test_fini (void) +{ + support_next_to_fault_free (&ntf); +} + +#define printf_under_test(...) \ +({ \ + __label__ out; \ + char *str = ntf.buffer; \ + int result; \ + \ + result = snprintf (str, ntf.length, __VA_ARGS__); \ + if (result < 0) \ + { \ + perror ("snprintf"); \ + goto out; \ + } \ + if (fwrite (str, sizeof (*str), result, stdout) != result) \ + { \ + perror ("fwrite"); \ + result = -1; \ + } \ +out: \ + result; \ +}) diff --git a/stdio-common/tst-printf-format-uchar.sh b/stdio-common/tst-printf-format-uchar.sh new file mode 100644 index 0000000000..8385d479cc --- /dev/null +++ b/stdio-common/tst-printf-format-uchar.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Testing of unsigned char printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=0 + +for f in o u x X; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-uchar $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-uint.sh b/stdio-common/tst-printf-format-uint.sh new file mode 100644 index 0000000000..6806c99ce0 --- /dev/null +++ b/stdio-common/tst-printf-format-uint.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of unsigned int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="4294967295" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in o u x X; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-uint $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-ullong.sh b/stdio-common/tst-printf-format-ullong.sh new file mode 100644 index 0000000000..c4fa69c2d1 --- /dev/null +++ b/stdio-common/tst-printf-format-ullong.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of unsigned long long int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="18446744073709551615" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in o u x X; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-ullong $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-ulong.sh b/stdio-common/tst-printf-format-ulong.sh new file mode 100644 index 0000000000..fce881afe3 --- /dev/null +++ b/stdio-common/tst-printf-format-ulong.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Testing of unsigned long int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=77 + +# Verify that AWK can handle the range required. It also catches: +# "gawk: warning: -M ignored: MPFR/GMP support not compiled in" +# message produced where bignum support is not there, which is the +# only indication as the use of '-M' does not affect the exit status +# in this case. +ref="18446744073709551615" +for AWK in "$AWK -M" "$AWK"; do + val=$(echo "$ref" | $AWK '{ printf "%d\n", $1 }' 2>&1) || continue + test "$val" = "$ref" && status=0 && break +done + +test $status -eq 0 || { echo "No working AWK found" && exit $status; } + +for f in o u x X; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-ulong $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-ushort.sh b/stdio-common/tst-printf-format-ushort.sh new file mode 100644 index 0000000000..2f411b777e --- /dev/null +++ b/stdio-common/tst-printf-format-ushort.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Testing of unsigned short int printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +xprintf=$1; shift +common_objpfx=$1; shift +test_program_prefix=$1; shift + +AWK=${AWK:-awk} + +status=0 + +for f in o u x X; do + echo Verifying $f + (set -o pipefail + ${test_program_prefix} \ + ${common_objpfx}stdio-common/tst-printf-format-${xprintf}-ushort $f | + $AWK -f tst-printf-format.awk 2>&1 | + head -n 1 | sed "s/^/Conversion $f output error, first line:\n/") 2>&1 || + status=1 +done + +exit $status diff --git a/stdio-common/tst-printf-format-v-c.c b/stdio-common/tst-printf-format-v-c.c new file mode 100644 index 0000000000..94aa3042aa --- /dev/null +++ b/stdio-common/tst-printf-format-v-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-v-char.c b/stdio-common/tst-printf-format-v-char.c new file mode 100644 index 0000000000..c813d81e53 --- /dev/null +++ b/stdio-common/tst-printf-format-v-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-v-double.c b/stdio-common/tst-printf-format-v-double.c new file mode 100644 index 0000000000..90cc1704eb --- /dev/null +++ b/stdio-common/tst-printf-format-v-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-v-int.c b/stdio-common/tst-printf-format-v-int.c new file mode 100644 index 0000000000..6529425b26 --- /dev/null +++ b/stdio-common/tst-printf-format-v-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-v-ldouble.c b/stdio-common/tst-printf-format-v-ldouble.c new file mode 100644 index 0000000000..813f4a510d --- /dev/null +++ b/stdio-common/tst-printf-format-v-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-v-llong.c b/stdio-common/tst-printf-format-v-llong.c new file mode 100644 index 0000000000..270ad08bf5 --- /dev/null +++ b/stdio-common/tst-printf-format-v-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-v-long.c b/stdio-common/tst-printf-format-v-long.c new file mode 100644 index 0000000000..2f5f653fec --- /dev/null +++ b/stdio-common/tst-printf-format-v-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-v-s.c b/stdio-common/tst-printf-format-v-s.c new file mode 100644 index 0000000000..ebc253b3e8 --- /dev/null +++ b/stdio-common/tst-printf-format-v-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-v-short.c b/stdio-common/tst-printf-format-v-short.c new file mode 100644 index 0000000000..92a59d9fd3 --- /dev/null +++ b/stdio-common/tst-printf-format-v-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-v-uchar.c b/stdio-common/tst-printf-format-v-uchar.c new file mode 100644 index 0000000000..045ffd2864 --- /dev/null +++ b/stdio-common/tst-printf-format-v-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-v-uint.c b/stdio-common/tst-printf-format-v-uint.c new file mode 100644 index 0000000000..17b1ce3aa7 --- /dev/null +++ b/stdio-common/tst-printf-format-v-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-v-ullong.c b/stdio-common/tst-printf-format-v-ullong.c new file mode 100644 index 0000000000..590b04f339 --- /dev/null +++ b/stdio-common/tst-printf-format-v-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-v-ulong.c b/stdio-common/tst-printf-format-v-ulong.c new file mode 100644 index 0000000000..6747677a42 --- /dev/null +++ b/stdio-common/tst-printf-format-v-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-v-ushort.c b/stdio-common/tst-printf-format-v-ushort.c new file mode 100644 index 0000000000..1e78271562 --- /dev/null +++ b/stdio-common/tst-printf-format-v-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-v.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-v.h b/stdio-common/tst-printf-format-v.h new file mode 100644 index 0000000000..711b290b59 --- /dev/null +++ b/stdio-common/tst-printf-format-v.h @@ -0,0 +1,34 @@ +/* Test feature wrapper for formatted 'vprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> + +static int +printf_under_test (const char *restrict fmt, ...) +{ + va_list ap; + int result; + + va_start (ap, fmt); + result = vprintf (fmt, ap); + va_end (ap); + if (result < 0) + perror ("vprintf"); + return result; +} diff --git a/stdio-common/tst-printf-format-vas-c.c b/stdio-common/tst-printf-format-vas-c.c new file mode 100644 index 0000000000..f8cf814c8c --- /dev/null +++ b/stdio-common/tst-printf-format-vas-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-vas-char.c b/stdio-common/tst-printf-format-vas-char.c new file mode 100644 index 0000000000..39c6e73977 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-vas-double.c b/stdio-common/tst-printf-format-vas-double.c new file mode 100644 index 0000000000..25a21bb0ad --- /dev/null +++ b/stdio-common/tst-printf-format-vas-double.c @@ -0,0 +1,22 @@ +/* Test for formatted 'vasprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define TIMEOUT (DEFAULT_TIMEOUT * 32) + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-vas-int.c b/stdio-common/tst-printf-format-vas-int.c new file mode 100644 index 0000000000..9cd70c8fcb --- /dev/null +++ b/stdio-common/tst-printf-format-vas-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-vas-ldouble.c b/stdio-common/tst-printf-format-vas-ldouble.c new file mode 100644 index 0000000000..60c3933fab --- /dev/null +++ b/stdio-common/tst-printf-format-vas-ldouble.c @@ -0,0 +1,22 @@ +/* Test for formatted 'vasprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define TIMEOUT (DEFAULT_TIMEOUT * 128) + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-vas-llong.c b/stdio-common/tst-printf-format-vas-llong.c new file mode 100644 index 0000000000..5d5322b8b9 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-vas-long.c b/stdio-common/tst-printf-format-vas-long.c new file mode 100644 index 0000000000..d9651053f8 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-vas-s.c b/stdio-common/tst-printf-format-vas-s.c new file mode 100644 index 0000000000..6d74ab83e3 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-vas-short.c b/stdio-common/tst-printf-format-vas-short.c new file mode 100644 index 0000000000..a6d76a9705 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-vas-uchar.c b/stdio-common/tst-printf-format-vas-uchar.c new file mode 100644 index 0000000000..c3dee11b7d --- /dev/null +++ b/stdio-common/tst-printf-format-vas-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-vas-uint.c b/stdio-common/tst-printf-format-vas-uint.c new file mode 100644 index 0000000000..e56e89374d --- /dev/null +++ b/stdio-common/tst-printf-format-vas-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-vas-ullong.c b/stdio-common/tst-printf-format-vas-ullong.c new file mode 100644 index 0000000000..05691bc318 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-vas-ulong.c b/stdio-common/tst-printf-format-vas-ulong.c new file mode 100644 index 0000000000..767d9cb6a6 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-vas-ushort.c b/stdio-common/tst-printf-format-vas-ushort.c new file mode 100644 index 0000000000..284d79f753 --- /dev/null +++ b/stdio-common/tst-printf-format-vas-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vasprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vas.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-vas.h b/stdio-common/tst-printf-format-vas.h new file mode 100644 index 0000000000..3e38e729ec --- /dev/null +++ b/stdio-common/tst-printf-format-vas.h @@ -0,0 +1,50 @@ +/* Test feature wrapper for formatted 'vasprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> + +static int +printf_under_test (const char *restrict fmt, ...) +{ + va_list ap; + int result; + char *str; + + va_start (ap, fmt); + result = vasprintf (&str, fmt, ap); + va_end (ap); + if (result < 0) + { + perror ("vasprintf"); + goto out; + } + if (fwrite (str, sizeof (*str), result, stdout) != result) + { + perror ("fwrite"); + result = -1; + } + free (str); +out: + return result; +} + +#ifndef TIMEOUT +# define TIMEOUT (DEFAULT_TIMEOUT * 12) +#endif diff --git a/stdio-common/tst-printf-format-vd-c.c b/stdio-common/tst-printf-format-vd-c.c new file mode 100644 index 0000000000..209b178489 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-vd-char.c b/stdio-common/tst-printf-format-vd-char.c new file mode 100644 index 0000000000..8286b6d5b2 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-vd-double.c b/stdio-common/tst-printf-format-vd-double.c new file mode 100644 index 0000000000..e89a2ca598 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-vd-int.c b/stdio-common/tst-printf-format-vd-int.c new file mode 100644 index 0000000000..598a888b1c --- /dev/null +++ b/stdio-common/tst-printf-format-vd-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-vd-ldouble.c b/stdio-common/tst-printf-format-vd-ldouble.c new file mode 100644 index 0000000000..d3ada6ff0b --- /dev/null +++ b/stdio-common/tst-printf-format-vd-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-vd-llong.c b/stdio-common/tst-printf-format-vd-llong.c new file mode 100644 index 0000000000..ea6ea7b215 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-vd-long.c b/stdio-common/tst-printf-format-vd-long.c new file mode 100644 index 0000000000..4ee1cdacff --- /dev/null +++ b/stdio-common/tst-printf-format-vd-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-vd-s.c b/stdio-common/tst-printf-format-vd-s.c new file mode 100644 index 0000000000..df7cf9a6fb --- /dev/null +++ b/stdio-common/tst-printf-format-vd-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-vd-short.c b/stdio-common/tst-printf-format-vd-short.c new file mode 100644 index 0000000000..87128c8303 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-vd-uchar.c b/stdio-common/tst-printf-format-vd-uchar.c new file mode 100644 index 0000000000..90dea71947 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-vd-uint.c b/stdio-common/tst-printf-format-vd-uint.c new file mode 100644 index 0000000000..feb95dc018 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-vd-ullong.c b/stdio-common/tst-printf-format-vd-ullong.c new file mode 100644 index 0000000000..8f62fb0aee --- /dev/null +++ b/stdio-common/tst-printf-format-vd-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-vd-ulong.c b/stdio-common/tst-printf-format-vd-ulong.c new file mode 100644 index 0000000000..59b2015cd3 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-vd-ushort.c b/stdio-common/tst-printf-format-vd-ushort.c new file mode 100644 index 0000000000..5d096502d9 --- /dev/null +++ b/stdio-common/tst-printf-format-vd-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vdprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vd.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-vd.h b/stdio-common/tst-printf-format-vd.h new file mode 100644 index 0000000000..d721edadc6 --- /dev/null +++ b/stdio-common/tst-printf-format-vd.h @@ -0,0 +1,62 @@ +/* Test feature wrapper for formatted 'vdprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <unistd.h> + +/* We need to go through the POSIX-mandated dance to switch between + handles on an open file description. */ + +static int +printf_under_test (const char *restrict fmt, ...) +{ + va_list ap; + int result; + + result = fflush (stdout); + if (result == EOF) + { + perror ("fflush"); + goto out; + } + result = lseek (STDOUT_FILENO, 0, SEEK_END); + if (result < 0 && errno == ESPIPE) + result = 0; + if (result < 0) + { + perror ("lseek"); + goto out; + } + va_start (ap, fmt); + result = vdprintf (STDOUT_FILENO, fmt, ap); + va_end (ap); + if (result < 0) + { + perror ("vdprintf"); + goto out; + } + result = fseek (stdout, 0, SEEK_END); + if (result < 0 && errno == ESPIPE) + result = 0; + if (result < 0) + perror ("fseek"); +out: + return result; +} diff --git a/stdio-common/tst-printf-format-vf-c.c b/stdio-common/tst-printf-format-vf-c.c new file mode 100644 index 0000000000..b31b551327 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-vf-char.c b/stdio-common/tst-printf-format-vf-char.c new file mode 100644 index 0000000000..daa2886adb --- /dev/null +++ b/stdio-common/tst-printf-format-vf-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-vf-double.c b/stdio-common/tst-printf-format-vf-double.c new file mode 100644 index 0000000000..63ec8c0cae --- /dev/null +++ b/stdio-common/tst-printf-format-vf-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-vf-int.c b/stdio-common/tst-printf-format-vf-int.c new file mode 100644 index 0000000000..e687099b10 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-vf-ldouble.c b/stdio-common/tst-printf-format-vf-ldouble.c new file mode 100644 index 0000000000..801e359dab --- /dev/null +++ b/stdio-common/tst-printf-format-vf-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-vf-llong.c b/stdio-common/tst-printf-format-vf-llong.c new file mode 100644 index 0000000000..a1b9ae340c --- /dev/null +++ b/stdio-common/tst-printf-format-vf-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-vf-long.c b/stdio-common/tst-printf-format-vf-long.c new file mode 100644 index 0000000000..7afc127b84 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-vf-s.c b/stdio-common/tst-printf-format-vf-s.c new file mode 100644 index 0000000000..6faa6d0dfe --- /dev/null +++ b/stdio-common/tst-printf-format-vf-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-vf-short.c b/stdio-common/tst-printf-format-vf-short.c new file mode 100644 index 0000000000..c3d17ca501 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-vf-uchar.c b/stdio-common/tst-printf-format-vf-uchar.c new file mode 100644 index 0000000000..643438c693 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-vf-uint.c b/stdio-common/tst-printf-format-vf-uint.c new file mode 100644 index 0000000000..844192cc9c --- /dev/null +++ b/stdio-common/tst-printf-format-vf-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-vf-ullong.c b/stdio-common/tst-printf-format-vf-ullong.c new file mode 100644 index 0000000000..ab58abd7f8 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-vf-ulong.c b/stdio-common/tst-printf-format-vf-ulong.c new file mode 100644 index 0000000000..e76251f9d0 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-vf-ushort.c b/stdio-common/tst-printf-format-vf-ushort.c new file mode 100644 index 0000000000..bf78a919a6 --- /dev/null +++ b/stdio-common/tst-printf-format-vf-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vfprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vf.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-vf.h b/stdio-common/tst-printf-format-vf.h new file mode 100644 index 0000000000..f824364f4c --- /dev/null +++ b/stdio-common/tst-printf-format-vf.h @@ -0,0 +1,34 @@ +/* Test feature wrapper for formatted 'vfprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> + +static int +printf_under_test (const char *restrict fmt, ...) +{ + va_list ap; + int result; + + va_start (ap, fmt); + result = vfprintf (stdout, fmt, ap); + va_end (ap); + if (result < 0) + perror ("vfprintf"); + return result; +} diff --git a/stdio-common/tst-printf-format-vs-c.c b/stdio-common/tst-printf-format-vs-c.c new file mode 100644 index 0000000000..72bcb5f049 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-vs-char.c b/stdio-common/tst-printf-format-vs-char.c new file mode 100644 index 0000000000..30135cf1be --- /dev/null +++ b/stdio-common/tst-printf-format-vs-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-vs-double.c b/stdio-common/tst-printf-format-vs-double.c new file mode 100644 index 0000000000..56290d383e --- /dev/null +++ b/stdio-common/tst-printf-format-vs-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-vs-int.c b/stdio-common/tst-printf-format-vs-int.c new file mode 100644 index 0000000000..f954e1f4f8 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-vs-ldouble.c b/stdio-common/tst-printf-format-vs-ldouble.c new file mode 100644 index 0000000000..3088e42813 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-vs-llong.c b/stdio-common/tst-printf-format-vs-llong.c new file mode 100644 index 0000000000..348ec2c3d7 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-vs-long.c b/stdio-common/tst-printf-format-vs-long.c new file mode 100644 index 0000000000..874e3ba479 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-vs-s.c b/stdio-common/tst-printf-format-vs-s.c new file mode 100644 index 0000000000..051f1b79bf --- /dev/null +++ b/stdio-common/tst-printf-format-vs-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-vs-short.c b/stdio-common/tst-printf-format-vs-short.c new file mode 100644 index 0000000000..36595a82b4 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-vs-uchar.c b/stdio-common/tst-printf-format-vs-uchar.c new file mode 100644 index 0000000000..8e35614110 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-vs-uint.c b/stdio-common/tst-printf-format-vs-uint.c new file mode 100644 index 0000000000..4a13d6c409 --- /dev/null +++ b/stdio-common/tst-printf-format-vs-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-vs-ullong.c b/stdio-common/tst-printf-format-vs-ullong.c new file mode 100644 index 0000000000..313dfaf02b --- /dev/null +++ b/stdio-common/tst-printf-format-vs-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-vs-ulong.c b/stdio-common/tst-printf-format-vs-ulong.c new file mode 100644 index 0000000000..5ab7e2e7fe --- /dev/null +++ b/stdio-common/tst-printf-format-vs-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-vs-ushort.c b/stdio-common/tst-printf-format-vs-ushort.c new file mode 100644 index 0000000000..a4af138a2f --- /dev/null +++ b/stdio-common/tst-printf-format-vs-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vs.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-vs.h b/stdio-common/tst-printf-format-vs.h new file mode 100644 index 0000000000..e00e1b085b --- /dev/null +++ b/stdio-common/tst-printf-format-vs.h @@ -0,0 +1,64 @@ +/* Test feature wrapper for formatted 'vsprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> + +#include <support/next_to_fault.h> + +#define SPRINTF_BUFFER_SIZE 65536 + +static struct support_next_to_fault ntf; + +#define PREPARE printf_under_test_init +static void +printf_under_test_init (int argc, char **argv) +{ + ntf = support_next_to_fault_allocate (SPRINTF_BUFFER_SIZE); +} + +static void __attribute__ ((destructor)) +printf_under_test_fini (void) +{ + support_next_to_fault_free (&ntf); +} + +static int +printf_under_test (const char *restrict fmt, ...) +{ + char *str = ntf.buffer; + va_list ap; + int result; + + va_start (ap, fmt); + result = vsprintf (str, fmt, ap); + va_end (ap); + if (result < 0) + { + perror ("vsprintf"); + goto out; + } + if (fwrite (str, sizeof (*str), result, stdout) != result) + { + perror ("fwrite"); + result = -1; + } +out: + return result; +} diff --git a/stdio-common/tst-printf-format-vsn-c.c b/stdio-common/tst-printf-format-vsn-c.c new file mode 100644 index 0000000000..47c8a0f5df --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-c.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for the 'c' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-c.c" diff --git a/stdio-common/tst-printf-format-vsn-char.c b/stdio-common/tst-printf-format-vsn-char.c new file mode 100644 index 0000000000..48d4393a46 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-char.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for signed char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-char.c" diff --git a/stdio-common/tst-printf-format-vsn-double.c b/stdio-common/tst-printf-format-vsn-double.c new file mode 100644 index 0000000000..06c1003fb5 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-double.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-double.c" diff --git a/stdio-common/tst-printf-format-vsn-int.c b/stdio-common/tst-printf-format-vsn-int.c new file mode 100644 index 0000000000..2aae92616f --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-int.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-int.c" diff --git a/stdio-common/tst-printf-format-vsn-ldouble.c b/stdio-common/tst-printf-format-vsn-ldouble.c new file mode 100644 index 0000000000..0b5aafb124 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-ldouble.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for long double conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-ldouble.c" diff --git a/stdio-common/tst-printf-format-vsn-llong.c b/stdio-common/tst-printf-format-vsn-llong.c new file mode 100644 index 0000000000..8e79b8384f --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-llong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-llong.c" diff --git a/stdio-common/tst-printf-format-vsn-long.c b/stdio-common/tst-printf-format-vsn-long.c new file mode 100644 index 0000000000..e94f7dec23 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-long.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-long.c" diff --git a/stdio-common/tst-printf-format-vsn-s.c b/stdio-common/tst-printf-format-vsn-s.c new file mode 100644 index 0000000000..efd8a4c23f --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-s.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for the 's' conversion. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-s.c" diff --git a/stdio-common/tst-printf-format-vsn-short.c b/stdio-common/tst-printf-format-vsn-short.c new file mode 100644 index 0000000000..3d375b59e7 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-short.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-short.c" diff --git a/stdio-common/tst-printf-format-vsn-uchar.c b/stdio-common/tst-printf-format-vsn-uchar.c new file mode 100644 index 0000000000..6d0f396481 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-uchar.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for unsigned char conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-uchar.c" diff --git a/stdio-common/tst-printf-format-vsn-uint.c b/stdio-common/tst-printf-format-vsn-uint.c new file mode 100644 index 0000000000..b637f7bdb1 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-uint.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for unsigned int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-uint.c" diff --git a/stdio-common/tst-printf-format-vsn-ullong.c b/stdio-common/tst-printf-format-vsn-ullong.c new file mode 100644 index 0000000000..d2442715f0 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-ullong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for unsigned long long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-ullong.c" diff --git a/stdio-common/tst-printf-format-vsn-ulong.c b/stdio-common/tst-printf-format-vsn-ulong.c new file mode 100644 index 0000000000..67417d1740 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-ulong.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for unsigned long int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-ulong.c" diff --git a/stdio-common/tst-printf-format-vsn-ushort.c b/stdio-common/tst-printf-format-vsn-ushort.c new file mode 100644 index 0000000000..396ea43ae7 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn-ushort.c @@ -0,0 +1,20 @@ +/* Test for formatted 'vsnprintf' output for unsigned short int conversions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include "tst-printf-format-vsn.h" +#include "tst-printf-format-skeleton-ushort.c" diff --git a/stdio-common/tst-printf-format-vsn.h b/stdio-common/tst-printf-format-vsn.h new file mode 100644 index 0000000000..4f25f1af76 --- /dev/null +++ b/stdio-common/tst-printf-format-vsn.h @@ -0,0 +1,64 @@ +/* Test feature wrapper for formatted 'vsnprintf' output. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> + +#include <support/next_to_fault.h> + +#define SPRINTF_BUFFER_SIZE 65536 + +static struct support_next_to_fault ntf; + +#define PREPARE printf_under_test_init +static void +printf_under_test_init (int argc, char **argv) +{ + ntf = support_next_to_fault_allocate (SPRINTF_BUFFER_SIZE); +} + +static void __attribute__ ((destructor)) +printf_under_test_fini (void) +{ + support_next_to_fault_free (&ntf); +} + +static int +printf_under_test (const char *restrict fmt, ...) +{ + char *str = ntf.buffer; + va_list ap; + int result; + + va_start (ap, fmt); + result = vsnprintf (str, ntf.length, fmt, ap); + va_end (ap); + if (result < 0) + { + perror ("vsnprintf"); + goto out; + } + if (fwrite (str, sizeof (*str), result, stdout) != result) + { + perror ("fwrite"); + result = -1; + } +out: + return result; +} diff --git a/stdio-common/tst-printf-format.awk b/stdio-common/tst-printf-format.awk new file mode 100644 index 0000000000..8b4bc7b1e4 --- /dev/null +++ b/stdio-common/tst-printf-format.awk @@ -0,0 +1,127 @@ +# Testing of printf conversions. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +BEGIN { + FS = ":" +} + +/^prec:/ { + PREC = $2 + next +} + +/^val:/ { + val = $2 + # Prepend "+" for +Inf or +NaN value lacking a sign, because gawk + # interpretes them as strings rather than numeric values in the + # non-bignum mode unless a sign has been explicitly given. Keep + # original 'val' for reporting. + value = gensub(/^(INF|NAN|inf|nan)/, "+\\1", 1, val) + next +} + +/^%/ { + # Discard the trailing empty field, used to improve legibility of data. + input = $--NF + format = $1 + width = $2 + precision = "." $(NF - 1) + # Discard any negative precision, which is to be taken as if omitted. + sub(/\.-.*/, "", precision) + # Simplify handling and paste the precision and width specified as + # arguments to '*' directly into the format. + sub(/\.\*/, precision, format) + sub(/\*/, width, format) + # Discard length modifiers. They are only relevant to C data types. + sub(/([DHLjhltz]|wf?[1-9][0-9]*)/, "", format) + # Discard the '#' flag with the octal conversion if output starts with + # 0 in the absence of this flag. In that case no extra 0 is supposed + # to be produced, but gawk prepends it anyway. + if (format ~ /#.*o/) + { + tmpfmt = gensub(/#/, "", "g", format) + tmpout = sprintf(tmpfmt, value) + if (tmpout ~ /^ *0/) + format = tmpfmt + } + # Likewise with the hexadecimal conversion where zero value with the + # precision of zero is supposed to produce no characters, but gawk + # outputs 0 instead. + else if (format ~ /#.*[Xx]/) + { + tmpfmt = gensub(/#/, "", "g", format) + tmpout = sprintf(tmpfmt, value) + if (tmpout ~ /^ *$/) + format = tmpfmt + } + # AWK interpretes input opportunistically as a number, which interferes + # with how the 'c' conversion works: "a" input will result in "a" output + # however "0" input will result in "^@" output rather than "0". Force + # the value to be interpreted as a string then, by appending "". + output = sprintf(format, value "") + # Make up for various anomalies with the handling of +/-Inf and +/-NaN + # values and reprint the output produced using the string conversion, + # with the field width carried over and the relevant flags handled by + # hand. + if (format ~ /[EFGefg]/ && value ~ /(INF|NAN|inf|nan)/) + { + minus = format ~ /-/ ? "-" : "" + sign = value ~ /-/ ? "-" : format ~ /\+/ ? "+" : format ~ / / ? " " : "" + if (format ~ /^%[^\.1-9]*[1-9][0-9]*/) + width = gensub(/^%[^\.1-9]*([1-9][0-9]*).*$/, "\\1", 1, format) + else + width = "" + output = gensub(/[-+ ]/, "", "g", output) + output = sprintf("%" minus width "s", sign output) + } + # Produce "+" where the '+' flag has been used with a signed integer + # conversion for zero value, observing any field width in effect. + # In that case "+" is always supposed to be produced, but with the + # precision of zero gawk in the non-bignum mode produces any padding + # requested only. + else if (format ~ /\+.*[di]/ && value == 0) + { + output = gensub(/^( *) $/, format ~ /-/ ? "+\\1" : "\\1+", 1, output) + output = gensub(/^$/, "+", 1, output) + } + # Produce " " where the space flag has been used with a signed integer + # conversion for zero value. In that case at least one " " is + # supposed to be produced, but with the precision of zero gawk in the + # non-bignum mode produces nothing. + else if (format ~ / .*[di]/ && value == 0) + { + output = gensub(/^$/, " ", 1, output) + } + if (output != input) + { + printf "(\"%s\"%s%s, %s) => \"%s\", expected \"%s\"\n", \ + $1, (NF > 2 ? ", " $2 : ""), (NF > 3 ? ", " $3 : ""), val, \ + input, output > "/dev/stderr" + status = 1 + } + next +} + +{ + printf "unrecognized input: \"%s\"\n", $0 > "/dev/stderr" + status = 1 +} + +END { + exit status +} diff --git a/stdio-common/tst-printf-format.sh b/stdio-common/tst-printf-format.sh new file mode 100644 index 0000000000..466c4a5f4f --- /dev/null +++ b/stdio-common/tst-printf-format.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Formatted printf output test script dispatcher. +# Copyright (C) 2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +set -e + +output=${1##*/}; shift + +tmp=${output#tst-printf-format-} +tmp=${tmp%.out} + +# We are given the name of the make target in $1. With the common prefix +# and suffix both removed we are left with the inner part, which encodes +# the function under test, the conversion type, and optionally the format +# specifier, all separated with hyphens, i.e. F-T-S or F-T. Extract them +# and call the script corresponding to the conversion type, passing the +# function under test and any format specifier as arguments. + +xprintf=${tmp%%-*}; tmp=${tmp#*-} +conv=${tmp%%-*}; tmp=${tmp#${conv}} +fmt=${tmp#*-} +script=tst-printf-format-$conv.sh + +exec ${BASH:-bash} $script $xprintf $fmt "$@" diff --git a/stdio-common/tst-scanf-nan.c b/stdio-common/tst-scanf-nan.c new file mode 100644 index 0000000000..7450b37c4e --- /dev/null +++ b/stdio-common/tst-scanf-nan.c @@ -0,0 +1,83 @@ +/* Test scanf formats for nan, nan(), nan(n-char-sequence) types. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdint.h> +#include <stdio.h> + +#include <support/check.h> + +#define CHECK_SCANF_RET(OK, STR, FMT, ...) \ + do \ + { \ + int ret = sscanf (STR, FMT, __VA_ARGS__); \ + TEST_VERIFY (ret == (OK)); \ + } \ + while (0) + +/* Valid nan types: + 1. nan + 2. nan() + 3. nan([a-zA-Z0-9_]+) + Any other nan format is invalid and should produce a conversion error. + The return value denotes the number of valid conversions. On conversion + error the rest of the input is discarded. */ +static int +do_test (void) +{ + int a; + float b; + double c; + long double d; + + /* All valid inputs. */ + CHECK_SCANF_RET (1, "nan", "%lf", &c); + CHECK_SCANF_RET (1, "nan()", "%lf", &c); + CHECK_SCANF_RET (1, "nan(12345)", "%lf", &c); + CHECK_SCANF_RET (2, "nan12", "%lf%d", &c, &a); + CHECK_SCANF_RET (2, "nan nan()", "%f%Lf", &b, &d); + CHECK_SCANF_RET (2, "nan nan(12345foo)", "%lf%Lf", &c, &d); + CHECK_SCANF_RET (3, "nan nan() 12.234", "%lf%Lf%f", &c, &d, &b); + CHECK_SCANF_RET (4, "nannan()nan(foo)1234", "%lf%f%Lf%d", &c, &b, &d, &a); + + /* Partially valid inputs. */ + CHECK_SCANF_RET (1, "nan( )", "%3lf", &c); + CHECK_SCANF_RET (1, "nan nan(", "%lf%f", &c, &b); + + /* Invalid inputs. */ + + /* Dangling parentheses. */ + CHECK_SCANF_RET (0, "nan(", "%lf", &c); + CHECK_SCANF_RET (0, "nan(123", "%lf", &c); + CHECK_SCANF_RET (0, "nan(12345", "%lf%d", &c, &a); + + /* Field width is not sufficient for valid conversion. */ + CHECK_SCANF_RET (0, "nan()", "%4Lf", &d); + CHECK_SCANF_RET (0, "nan(1", "%5lf", &c); + + /* Space is not a valid character. */ + CHECK_SCANF_RET (0, "nan( )", "%lf", &c); + CHECK_SCANF_RET (0, "nan( )12.34", "%Lf%f", &d, &b); + CHECK_SCANF_RET (0, "nan(12 foo)", "%f", &b); + + /* Period '.' is not a valid character. */ + CHECK_SCANF_RET (0, "nan(12.34) nan(FooBar)", "%lf%Lf", &c, &d); + + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/vfscanf-internal.c b/stdio-common/vfscanf-internal.c index 1b82deffa7..5f38f991cc 100644 --- a/stdio-common/vfscanf-internal.c +++ b/stdio-common/vfscanf-internal.c @@ -2028,7 +2028,51 @@ digits_extended_fail: if (width > 0) --width; char_buffer_add (&charbuf, c); - /* It is "nan". */ + /* It is at least "nan". Now we check for nan() and + nan(n-char-sequence). */ + if (width != 0 && inchar () != EOF) + { + if (c == L_('(')) + { + if (width > 0) + --width; + char_buffer_add (&charbuf, c); + /* A '(' was observed, check for a closing ')', there + may or may not be a n-char-sequence in between. We + have to check the longest prefix until there is a + conversion error or closing parenthesis. */ + do + { + if (__glibc_unlikely (width == 0 + || inchar () == EOF)) + { + /* Conversion error because we ran out of + characters. */ + conv_error (); + break; + } + if (!((c >= L_('0') && c <= L_('9')) + || (c >= L_('A') && c <= L_('Z')) + || (c >= L_('a') && c <= L_('z')) + || c == L_('_') || c == L_(')'))) + { + /* Invalid character was observed. Only valid + characters are [a-zA-Z0-9_] and ')'. */ + conv_error (); + break; + } + if (width > 0) + --width; + char_buffer_add (&charbuf, c); + } + while (c != L_(')')); + /* The loop only exits successfully when ')' is the + last character. */ + } + else + /* It is only 'nan'. */ + ungetc (c, s); + } goto scan_float; } else if (TOLOWER (c) == L_('i')) diff --git a/stdlib/abort.c b/stdlib/abort.c index e2b84baac4..f74ff3bb20 100644 --- a/stdlib/abort.c +++ b/stdlib/abort.c @@ -15,13 +15,11 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#include <libc-lock.h> #include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> #include <internal-signals.h> +#include <libc-lock.h> +#include <pthreadP.h> +#include <unistd.h> /* Try to get a machine dependent instruction which will make the program crash. This is used in case everything else fails. */ @@ -35,89 +33,63 @@ struct abort_msg_s *__abort_msg; libc_hidden_def (__abort_msg) -/* We must avoid to run in circles. Therefore we remember how far we - already got. */ -static int stage; +/* The lock is used to prevent multiple thread to change the SIGABRT + to SIG_IGN while abort tries to change to SIG_DFL, and to avoid + a new process to see a wrong disposition if there is a SIGABRT + handler installed. */ +__libc_rwlock_define_initialized (static, lock); -/* We should be prepared for multiple threads trying to run abort. */ -__libc_lock_define_initialized_recursive (static, lock); +void +__abort_fork_reset_child (void) +{ + __libc_rwlock_init (lock); +} +void +__abort_lock_rdlock (internal_sigset_t *set) +{ + internal_signal_block_all (set); + __libc_rwlock_rdlock (lock); +} + +void +__abort_lock_wrlock (internal_sigset_t *set) +{ + internal_signal_block_all (set); + __libc_rwlock_wrlock (lock); +} -/* Cause an abnormal program termination with core-dump. */ void +__abort_lock_unlock (const internal_sigset_t *set) +{ + __libc_rwlock_unlock (lock); + internal_signal_restore_set (set); +} + +/* Cause an abnormal program termination with core-dump. */ +_Noreturn void abort (void) { - struct sigaction act; - - /* First acquire the lock. */ - __libc_lock_lock_recursive (lock); - - /* Now it's for sure we are alone. But recursive calls are possible. */ - - /* Unblock SIGABRT. */ - if (stage == 0) - { - ++stage; - internal_sigset_t sigs; - internal_sigemptyset (&sigs); - internal_sigaddset (&sigs, SIGABRT); - internal_sigprocmask (SIG_UNBLOCK, &sigs, NULL); - } - - /* Send signal which possibly calls a user handler. */ - if (stage == 1) - { - /* This stage is special: we must allow repeated calls of - `abort' when a user defined handler for SIGABRT is installed. - This is risky since the `raise' implementation might also - fail but I don't see another possibility. */ - int save_stage = stage; - - stage = 0; - __libc_lock_unlock_recursive (lock); - - raise (SIGABRT); - - __libc_lock_lock_recursive (lock); - stage = save_stage + 1; - } - - /* There was a handler installed. Now remove it. */ - if (stage == 2) - { - ++stage; - memset (&act, '\0', sizeof (struct sigaction)); - act.sa_handler = SIG_DFL; - __sigfillset (&act.sa_mask); - act.sa_flags = 0; - __sigaction (SIGABRT, &act, NULL); - } - - /* Try again. */ - if (stage == 3) - { - ++stage; - raise (SIGABRT); - } - - /* Now try to abort using the system specific command. */ - if (stage == 4) - { - ++stage; - ABORT_INSTRUCTION; - } - - /* If we can't signal ourselves and the abort instruction failed, exit. */ - if (stage == 5) - { - ++stage; - _exit (127); - } - - /* If even this fails try to use the provided instruction to crash - or otherwise make sure we never return. */ - while (1) - /* Try for ever and ever. */ - ABORT_INSTRUCTION; + raise (SIGABRT); + + /* There is a SIGABRT handle installed and it returned, or SIGABRT was + blocked or ignored. In this case use a AS-safe lock to prevent sigaction + to change the signal disposition again, set the handle to default + disposition, and re-raise the signal. Even if POSIX state this step is + optional, this a QoI by forcing the process termination through the + signal handler. */ + __abort_lock_wrlock (NULL); + + struct sigaction act = {.sa_handler = SIG_DFL, .sa_flags = 0 }; + __sigfillset (&act.sa_mask); + __libc_sigaction (SIGABRT, &act, NULL); + __pthread_raise_internal (SIGABRT); + internal_signal_unblock_signal (SIGABRT); + + /* This code should be unreachable, try the arch-specific code and the + syscall fallback. */ + ABORT_INSTRUCTION; + + _exit (127); } libc_hidden_def (abort) diff --git a/stdlib/strtod_nan_main.c b/stdlib/strtod_nan_main.c index 4cb286d2b3..39fb7e9f75 100644 --- a/stdlib/strtod_nan_main.c +++ b/stdlib/strtod_nan_main.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +#include <errno.h> #include <ieee754.h> #include <locale.h> #include <math.h> @@ -50,7 +51,9 @@ STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc) STRING_TYPE *endp; unsigned long long int mant; + int save_errno = errno; mant = STRTOULL (str, &endp, 0); + __set_errno (save_errno); if (endp == cp) SET_NAN_PAYLOAD (retval, mant); diff --git a/stdlib/tst-strtod-underflow.c b/stdlib/tst-strtod-underflow.c index a5ced18599..8598b95b6d 100644 --- a/stdlib/tst-strtod-underflow.c +++ b/stdlib/tst-strtod-underflow.c @@ -17,6 +17,10 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +/* Defining _LIBC_TEST ensures long double math functions are + declared in the headers. */ +#define _LIBC_TEST 1 +#define __STDC_WANT_IEC_60559_TYPES_EXT__ #include <errno.h> #include <fenv.h> #include <float.h> @@ -25,6 +29,60 @@ #include <stdlib.h> #include <tininess.h> +#include "tst-strtod.h" + +/* Logic for selecting between tests for different formats is as in + tst-strtod-skeleton.c, but here it is selecting string inputs with + different underflow properties, rather than generated test + data. */ + +#define _CONCAT(a, b) a ## b +#define CONCAT(a, b) _CONCAT (a, b) + +#define MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ + const char *s_ ## FSUF; + +#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 +# define CHOOSE_ld(f,d,...) d +#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381 +# define CHOOSE_ld(f,d,ld64i,...) ld64i +#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382 +# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m +#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024 +# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106 +#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 +# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113 +#else +# error "unknown long double format" +#endif + +#define CHOOSE_f(f,...) f +#define CHOOSE_f32(f,...) f +#define CHOOSE_d(f,d,...) d +#define CHOOSE_f64(f,d,...) d +#define CHOOSE_f32x(f,d,...) d +#define CHOOSE_f128(f,d,ld64i,ld64m,ld106,ld113,...) ld113 + +#if __HAVE_FLOAT64X +# if FLT64X_MANT_DIG == 113 && FLT64X_MAX_EXP == 16384 +# define CHOOSE_f64x(f,d,ld64i,ld64m,ld106,ld113,...) ld113 +# elif (FLT64X_MANT_DIG == 64 \ + && FLT64X_MAX_EXP == 16384 \ + && FLT64X_MIN_EXP == -16381) +# define CHOOSE_f64x(f,d,ld64i,...) ld64i +# else +# error "unknown _Float64x format" +# endif +#endif + +#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \ + CHOOSE_ ## FSUF (__VA_ARGS__), +#define XNTRY(...) \ + GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__) + +#define TEST(f, d, ld64i, ld64m, ld106, ld113, u) \ + { XNTRY(f, d, ld64i, ld64m, ld106, ld113) u } + enum underflow_case { /* Result is exact or outside the subnormal range. */ @@ -55,38 +113,194 @@ enum underflow_case struct test { - const char *s; + GEN_TEST_STRTOD_FOREACH (MEMBER) enum underflow_case c; }; static const struct test tests[] = { - { "0x1p-1022", UNDERFLOW_NONE }, - { "-0x1p-1022", UNDERFLOW_NONE }, - { "0x0p-10000000000000000000000000", UNDERFLOW_NONE }, - { "-0x0p-10000000000000000000000000", UNDERFLOW_NONE }, - { "0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS }, - { "-0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS }, - { "0x1.000000000000000000001p-1022", UNDERFLOW_NONE }, - { "-0x1.000000000000000000001p-1022", UNDERFLOW_NONE }, - { "0x1p-1075", UNDERFLOW_ALWAYS }, - { "-0x1p-1075", UNDERFLOW_ALWAYS }, - { "0x1p-1023", UNDERFLOW_NONE }, - { "-0x1p-1023", UNDERFLOW_NONE }, - { "0x1p-1074", UNDERFLOW_NONE }, - { "-0x1p-1074", UNDERFLOW_NONE }, - { "0x1.ffffffffffffep-1023", UNDERFLOW_NONE }, - { "-0x1.ffffffffffffep-1023", UNDERFLOW_NONE }, - { "0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS }, - { "-0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS }, - { "0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_UPWARD }, - { "-0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_DOWNWARD }, - { "0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_UPWARD }, - { "-0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_DOWNWARD }, - { "0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO }, - { "-0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_UPWARD_ZERO }, - { "0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO }, - { "-0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_UPWARD_ZERO }, + TEST ("0x1p-126", + "0x1p-1022", + "0x1p-16382", + "0x1p-16383", + "0x1p-969", + "0x1p-16382", + UNDERFLOW_NONE), + TEST ("-0x1p-126", + "-0x1p-1022", + "-0x1p-16382", + "-0x1p-16383", + "-0x1p-969", + "-0x1p-16382", + UNDERFLOW_NONE), + TEST ("0x0p-10000000000000000000000000", + "0x0p-10000000000000000000000000", + "0x0p-10000000000000000000000000", + "0x0p-10000000000000000000000000", + "0x0p-10000000000000000000000000", + "0x0p-10000000000000000000000000", + UNDERFLOW_NONE), + TEST ("-0x0p-10000000000000000000000000", + "-0x0p-10000000000000000000000000", + "-0x0p-10000000000000000000000000", + "-0x0p-10000000000000000000000000", + "-0x0p-10000000000000000000000000", + "-0x0p-10000000000000000000000000", + UNDERFLOW_NONE), + TEST ("0x1p-10000000000000000000000000", + "0x1p-10000000000000000000000000", + "0x1p-10000000000000000000000000", + "0x1p-10000000000000000000000000", + "0x1p-10000000000000000000000000", + "0x1p-10000000000000000000000000", + UNDERFLOW_ALWAYS), + TEST ("-0x1p-10000000000000000000000000", + "-0x1p-10000000000000000000000000", + "-0x1p-10000000000000000000000000", + "-0x1p-10000000000000000000000000", + "-0x1p-10000000000000000000000000", + "-0x1p-10000000000000000000000000", + UNDERFLOW_ALWAYS), + TEST ("0x1.000000000000000000001p-126", + "0x1.000000000000000000001p-1022", + "0x1.000000000000000000001p-16382", + "0x1.000000000000000000001p-16383", + "0x1.000000000000000000001p-969", + "0x1.00000000000000000000000000000000000000001p-16382", + UNDERFLOW_NONE), + TEST ("-0x1.000000000000000000001p-126", + "-0x1.000000000000000000001p-1022", + "-0x1.000000000000000000001p-16382", + "-0x1.000000000000000000001p-16383", + "-0x1.000000000000000000001p-969", + "-0x1.00000000000000000000000000000000000000001p-16382", + UNDERFLOW_NONE), + TEST ("0x1p-150", + "0x1p-1075", + "0x1p-16446", + "0x1p-16447", + "0x1p-1075", + "0x1p-16495", + UNDERFLOW_ALWAYS), + TEST ("-0x1p-150", + "-0x1p-1075", + "-0x1p-16446", + "-0x1p-16447", + "-0x1p-1075", + "-0x1p-16495", + UNDERFLOW_ALWAYS), + TEST ("0x1p-127", + "0x1p-1023", + "0x1p-16383", + "0x1p-16384", + "0x1p-970", + "0x1p-16383", + UNDERFLOW_NONE), + TEST ("-0x1p-127", + "-0x1p-1023", + "-0x1p-16383", + "-0x1p-16384", + "-0x1p-970", + "-0x1p-16383", + UNDERFLOW_NONE), + TEST ("0x1p-149", + "0x1p-1074", + "0x1p-16445", + "0x1p-16446", + "0x1p-1074", + "0x1p-16494", + UNDERFLOW_NONE), + TEST ("-0x1p-149", + "-0x1p-1074", + "-0x1p-16445", + "-0x1p-16446", + "-0x1p-1074", + "-0x1p-16494", + UNDERFLOW_NONE), + TEST ("0x1.fffffcp-127", + "0x1.ffffffffffffep-1023", + "0x1.fffffffffffffffcp-16383", + "0x1.fffffffffffffffcp-16384", + "0x1.ffffffffffffffffffffffffffp-970", + "0x1.fffffffffffffffffffffffffffep-16383", + UNDERFLOW_NONE), + TEST ("-0x1.fffffcp-127", + "-0x1.ffffffffffffep-1023", + "-0x1.fffffffffffffffcp-16383", + "-0x1.fffffffffffffffcp-16384", + "-0x1.ffffffffffffffffffffffffffp-970", + "-0x1.fffffffffffffffffffffffffffep-16383", + UNDERFLOW_NONE), + TEST ("0x1.fffffep-127", + "0x1.fffffffffffffp-1023", + "0x1.fffffffffffffffep-16383", + "0x1.fffffffffffffffep-16384", + "0x1.ffffffffffffffffffffffffff8p-970", + "0x1.ffffffffffffffffffffffffffffp-16383", + UNDERFLOW_ALWAYS), + TEST ("-0x1.fffffep-127", + "-0x1.fffffffffffffp-1023", + "-0x1.fffffffffffffffep-16383", + "-0x1.fffffffffffffffep-16384", + "-0x1.ffffffffffffffffffffffffff8p-970", + "-0x1.ffffffffffffffffffffffffffffp-16383", + UNDERFLOW_ALWAYS), + TEST ("0x1.fffffe0001p-127", + "0x1.fffffffffffff0001p-1023", + "0x1.fffffffffffffffe0001p-16383", + "0x1.fffffffffffffffe0001p-16384", + "0x1.ffffffffffffffffffffffffff80001p-970", + "0x1.ffffffffffffffffffffffffffff0001p-16383", + UNDERFLOW_EXCEPT_UPWARD), + TEST ("-0x1.fffffe0001p-127", + "-0x1.fffffffffffff0001p-1023", + "-0x1.fffffffffffffffe0001p-16383", + "-0x1.fffffffffffffffe0001p-16384", + "-0x1.ffffffffffffffffffffffffff80001p-970", + "-0x1.ffffffffffffffffffffffffffff0001p-16383", + UNDERFLOW_EXCEPT_DOWNWARD), + TEST ("0x1.fffffeffffp-127", + "0x1.fffffffffffff7fffp-1023", + "0x1.fffffffffffffffeffffp-16383", + "0x1.fffffffffffffffeffffp-16384", + "0x1.ffffffffffffffffffffffffffbffffp-970", + "0x1.ffffffffffffffffffffffffffff7fffp-16383", + UNDERFLOW_EXCEPT_UPWARD), + TEST ("-0x1.fffffeffffp-127", + "-0x1.fffffffffffff7fffp-1023", + "-0x1.fffffffffffffffeffffp-16383", + "-0x1.fffffffffffffffeffffp-16384", + "-0x1.ffffffffffffffffffffffffffbffffp-970", + "-0x1.ffffffffffffffffffffffffffff7fffp-16383", + UNDERFLOW_EXCEPT_DOWNWARD), + TEST ("0x1.ffffffp-127", + "0x1.fffffffffffff8p-1023", + "0x1.ffffffffffffffffp-16383", + "0x1.ffffffffffffffffp-16384", + "0x1.ffffffffffffffffffffffffffcp-970", + "0x1.ffffffffffffffffffffffffffff8p-16383", + UNDERFLOW_ONLY_DOWNWARD_ZERO), + TEST ("-0x1.ffffffp-127", + "-0x1.fffffffffffff8p-1023", + "-0x1.ffffffffffffffffp-16383", + "-0x1.ffffffffffffffffp-16384", + "-0x1.ffffffffffffffffffffffffffcp-970", + "-0x1.ffffffffffffffffffffffffffff8p-16383", + UNDERFLOW_ONLY_UPWARD_ZERO), + TEST ("0x1.ffffffffffp-127", + "0x1.fffffffffffffffffp-1023", + "0x1.ffffffffffffffffffffp-16383", + "0x1.ffffffffffffffffffffp-16384", + "0x1.ffffffffffffffffffffffffffffffp-970", + "0x1.ffffffffffffffffffffffffffffffffp-16383", + UNDERFLOW_ONLY_DOWNWARD_ZERO), + TEST ("-0x1.ffffffffffp-127", + "-0x1.fffffffffffffffffp-1023", + "-0x1.ffffffffffffffffffffp-16383", + "-0x1.ffffffffffffffffffffp-16384", + "-0x1.ffffffffffffffffffffffffffffffp-970", + "-0x1.ffffffffffffffffffffffffffffffffp-16383", + UNDERFLOW_ONLY_UPWARD_ZERO), }; /* Return whether to expect underflow from a particular testcase, in a @@ -133,39 +347,62 @@ static bool support_underflow_exception = false; volatile double d = DBL_MIN; volatile double dd; -static int -test_in_one_mode (const char *s, enum underflow_case c, int rm, - const char *mode_name) +static bool +test_got_fe_underflow (void) { - int result = 0; - feclearexcept (FE_ALL_EXCEPT); - errno = 0; - double d = strtod (s, NULL); - int got_errno = errno; #ifdef FE_UNDERFLOW - bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0; + return fetestexcept (FE_UNDERFLOW) != 0; #else - bool got_fe_underflow = false; + return false; #endif - printf ("strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\n", - s, mode_name, d, got_errno, got_fe_underflow ? "" : "no "); - bool this_expect_underflow = expect_underflow (c, rm); - if (got_errno != 0 && got_errno != ERANGE) - { - puts ("FAIL: errno neither 0 nor ERANGE"); - result = 1; - } - else if (this_expect_underflow != (errno == ERANGE)) - { - puts ("FAIL: underflow from errno differs from expectations"); - result = 1; - } - if (support_underflow_exception && got_fe_underflow != this_expect_underflow) - { - puts ("FAIL: underflow from exceptions differs from expectations"); - result = 1; - } - return result; +} + +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static int \ +test_strto ## FSUF (int i, int rm, const char *mode_name) \ +{ \ + const char *s = tests[i].s_ ## FSUF; \ + enum underflow_case c = tests[i].c; \ + int result = 0; \ + feclearexcept (FE_ALL_EXCEPT); \ + errno = 0; \ + FTYPE d = strto ## FSUF (s, NULL); \ + int got_errno = errno; \ + bool got_fe_underflow = test_got_fe_underflow (); \ + char buf[FSTRLENMAX]; \ + FTOSTR (buf, sizeof (buf), "%a", d); \ + printf ("strto" #FSUF \ + " (%s) (%s) returned %s, errno = %d, " \ + "%sunderflow exception\n", \ + s, mode_name, buf, got_errno, \ + got_fe_underflow ? "" : "no "); \ + bool this_expect_underflow = expect_underflow (c, rm); \ + if (got_errno != 0 && got_errno != ERANGE) \ + { \ + puts ("FAIL: errno neither 0 nor ERANGE"); \ + result = 1; \ + } \ + else if (this_expect_underflow != (errno == ERANGE)) \ + { \ + puts ("FAIL: underflow from errno differs from expectations"); \ + result = 1; \ + } \ + if (support_underflow_exception \ + && got_fe_underflow != this_expect_underflow) \ + { \ + puts ("FAIL: underflow from exceptions " \ + "differs from expectations"); \ + result = 1; \ + } \ + return result; \ +} + +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) + +static int +test_in_one_mode (size_t i, int rm, const char *mode_name) +{ + return STRTOD_TEST_FOREACH (test_strto, i, rm, mode_name); } static int @@ -191,12 +428,12 @@ do_test (void) #endif for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) { - result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest, + result |= test_in_one_mode (i, fe_tonearest, "default rounding mode"); #ifdef FE_DOWNWARD if (!fesetround (FE_DOWNWARD)) { - result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD, + result |= test_in_one_mode (i, FE_DOWNWARD, "FE_DOWNWARD"); fesetround (save_round_mode); } @@ -204,7 +441,7 @@ do_test (void) #ifdef FE_TOWARDZERO if (!fesetround (FE_TOWARDZERO)) { - result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO, + result |= test_in_one_mode (i, FE_TOWARDZERO, "FE_TOWARDZERO"); fesetround (save_round_mode); } @@ -212,7 +449,7 @@ do_test (void) #ifdef FE_UPWARD if (!fesetround (FE_UPWARD)) { - result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD, + result |= test_in_one_mode (i, FE_UPWARD, "FE_UPWARD"); fesetround (save_round_mode); } diff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c index a7df82ebbd..d00bc13323 100644 --- a/stdlib/tst-strtod2.c +++ b/stdlib/tst-strtod2.c @@ -1,43 +1,112 @@ +#include <math.h> #include <stdio.h> #include <stdlib.h> -struct test -{ - const char *str; - double result; - size_t offset; -} tests[] = -{ - { "0xy", 0.0, 1 }, - { "0x.y", 0.0, 1 }, - { "0x0.y", 0.0, 4 }, - { "0x.0y", 0.0, 4 }, - { ".y", 0.0, 0 }, - { "0.y", 0.0, 2 }, - { ".0y", 0.0, 2 } -}; +#include "tst-strtod.h" + +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +struct test_strto ## FSUF \ +{ \ + const char *str; \ + FTYPE result; \ + size_t offset; \ +} tests_strto ## FSUF[] = \ +{ \ + { "0xy", 0.0 ## LSUF, 1 }, \ + { "0x.y", 0.0 ## LSUF, 1 }, \ + { "0x0.y", 0.0 ## LSUF, 4 }, \ + { "0x.0y", 0.0 ## LSUF, 4 }, \ + { ".y", 0.0 ## LSUF, 0 }, \ + { "0.y", 0.0 ## LSUF, 2 }, \ + { ".0y", 0.0 ## LSUF, 2 }, \ + { "1.0e", 1.0 ## LSUF, 3 }, \ + { "1.0e+", 1.0 ## LSUF, 3 }, \ + { "1.0e-", 1.0 ## LSUF, 3 }, \ + { "1.0ex", 1.0 ## LSUF, 3 }, \ + { "1.0e+x", 1.0 ## LSUF, 3 }, \ + { "1.0e-x", 1.0 ## LSUF, 3 }, \ + { "0x1p", 1.0 ## LSUF, 3 }, \ + { "0x1p+", 1.0 ## LSUF, 3 }, \ + { "0x1p-", 1.0 ## LSUF, 3 }, \ + { "0x1px", 1.0 ## LSUF, 3 }, \ + { "0x1p+x", 1.0 ## LSUF, 3 }, \ + { "0x1p-x", 1.0 ## LSUF, 3 }, \ + { "", 0.0 ## LSUF, 0 }, \ + { ".", 0.0 ## LSUF, 0 }, \ + { "-", 0.0 ## LSUF, 0 }, \ + { "-.", 0.0 ## LSUF, 0 }, \ + { ".e", 0.0 ## LSUF, 0 }, \ + { "-.e", 0.0 ## LSUF, 0 }, \ + { " \t", 0.0 ## LSUF, 0 }, \ + { " \t.", 0.0 ## LSUF, 0 }, \ + { " \t-", 0.0 ## LSUF, 0 }, \ + { " \t-.", 0.0 ## LSUF, 0 }, \ + { " \t.e", 0.0 ## LSUF, 0 }, \ + { " \t-.e", 0.0 ## LSUF, 0 }, \ + { " \t\f\r\n\v1", 1.0 ## LSUF, 7 }, \ + { " \t\f\r\n\v-1.5e2", -150.0 ## LSUF, 12 }, \ + { "INFx", INFINITY, 3 }, \ + { "infx", INFINITY, 3 }, \ + { "INFINITx", INFINITY, 3 }, \ + { "infinitx", INFINITY, 3 }, \ + { "INFINITYY", INFINITY, 8 }, \ + { "infinityy", INFINITY, 8 }, \ + { "NANx", NAN, 3 }, \ + { "nanx", NAN, 3 }, \ + { "NAN(", NAN, 3 }, \ + { "nan(", NAN, 3 }, \ + { "NAN(x", NAN, 3 }, \ + { "nan(x", NAN, 3 }, \ + { "NAN(x)y", NAN, 6 }, \ + { "nan(x)y", NAN, 6 }, \ + { "NAN(*)y", NAN, 3 }, \ + { "nan(*)y", NAN, 3 } \ +}; \ + \ +static int \ +compare_strto ## FSUF (FTYPE x, FTYPE y) \ +{ \ + if (isnan (x) && isnan (y)) \ + return 1; \ + return x == y; \ +} \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + for (size_t i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep); \ + if (!compare_strto ## FSUF (r, tests_strto ## FSUF[i].result)) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", tests_strto ## FSUF[i].result); \ + printf ("test %zu r = %s, expect %s\n", i, buf1, buf2); \ + status = 1; \ + } \ + if (ep != tests_strto ## FSUF[i].str + tests_strto ## FSUF[i].offset) \ + { \ + printf ("test %zu strto" #FSUF \ + " parsed %tu characters, expected %zu\n", \ + i, ep - tests_strto ## FSUF[i].str, \ + tests_strto ## FSUF[i].offset); \ + status = 1; \ + } \ + } \ + return status; \ +} + +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) { - int status = 0; - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) - { - char *ep; - double r = strtod (tests[i].str, &ep); - if (r != tests[i].result) - { - printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result); - status = 1; - } - if (ep != tests[i].str + tests[i].offset) - { - printf ("test %zu strtod parsed %tu characters, expected %zu\n", - i, ep - tests[i].str, tests[i].offset); - status = 1; - } - } - return status; + return STRTOD_TEST_FOREACH (test_strto); } #define TEST_FUNCTION do_test () diff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c index 29153ec005..7eb9b3a2d7 100644 --- a/stdlib/tst-strtod5.c +++ b/stdlib/tst-strtod5.c @@ -22,35 +22,75 @@ #include <string.h> #include <math.h> +#include "tst-strtod.h" + #define NBSP "\xc2\xa0" -static const struct -{ - const char *in; - double expected; -} tests[] = - { - { "0", 0.0 }, - { "000", 0.0 }, - { "-0", -0.0 }, - { "-000", -0.0 }, - { "0,", 0.0 }, - { "-0,", -0.0 }, - { "0,0", 0.0 }, - { "-0,0", -0.0 }, - { "0e-10", 0.0 }, - { "-0e-10", -0.0 }, - { "0,e-10", 0.0 }, - { "-0,e-10", -0.0 }, - { "0,0e-10", 0.0 }, - { "-0,0e-10", -0.0 }, - { "0e-1000000", 0.0 }, - { "-0e-1000000", -0.0 }, - { "0,0e-1000000", 0.0 }, - { "-0,0e-1000000", -0.0 }, - }; -#define NTESTS (sizeof (tests) / sizeof (tests[0])) +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static const struct \ +{ \ + const char *in; \ + FTYPE expected; \ +} tests_strto ## FSUF[] = \ + { \ + { "0", 0.0 ## LSUF }, \ + { "000", 0.0 ## LSUF }, \ + { "-0", -0.0 ## LSUF }, \ + { "-000", -0.0 ## LSUF }, \ + { "0,", 0.0 ## LSUF }, \ + { "-0,", -0.0 ## LSUF }, \ + { "0,0", 0.0 ## LSUF }, \ + { "-0,0", -0.0 ## LSUF }, \ + { "0e-10", 0.0 ## LSUF }, \ + { "-0e-10", -0.0 ## LSUF }, \ + { "0,e-10", 0.0 ## LSUF }, \ + { "-0,e-10", -0.0 ## LSUF }, \ + { "0,0e-10", 0.0 ## LSUF }, \ + { "-0,0e-10", -0.0 ## LSUF }, \ + { "0e-1000000", 0.0 ## LSUF }, \ + { "-0e-1000000", -0.0 ## LSUF }, \ + { "0,0e-1000000", 0.0 ## LSUF }, \ + { "-0,0e-1000000", -0.0 ## LSUF }, \ + }; \ + \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + \ + for (int i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].in, &ep); \ + \ + if (*ep != '\0') \ + { \ + printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); \ + status = 1; \ + } \ + \ + if (r != tests_strto ## FSUF[i].expected \ + || (copysign ## CSUF (10.0 ## LSUF, r) \ + != copysign ## CSUF (10.0 ## LSUF, \ + tests_strto ## FSUF[i].expected))) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", \ + tests_strto ## FSUF[i].expected); \ + printf ("%d: got wrong results %s, expected %s\n", \ + i, buf1, buf2); \ + status = 1; \ + } \ + } \ + \ + return status; \ +} +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) @@ -61,29 +101,7 @@ do_test (void) return 1; } - int status = 0; - - for (int i = 0; i < NTESTS; ++i) - { - char *ep; - double r = strtod (tests[i].in, &ep); - - if (*ep != '\0') - { - printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); - status = 1; - } - - if (r != tests[i].expected - || copysign (10.0, r) != copysign (10.0, tests[i].expected)) - { - printf ("%d: got wrong results %g, expected %g\n", - i, r, tests[i].expected); - status = 1; - } - } - - return status; + return STRTOD_TEST_FOREACH (test_strto); } #include <support/test-driver.c> diff --git a/support/Makefile b/support/Makefile index 6e3c55394f..84e2419775 100644 --- a/support/Makefile +++ b/support/Makefile @@ -49,6 +49,8 @@ libsupport-routines = \ support_check_stat_fd \ support_check_stat_path \ support_chroot \ + support_compare_file_bytes \ + support_compare_file_string \ support_copy_file \ support_copy_file_range \ support_create_timer \ @@ -62,9 +64,12 @@ libsupport-routines = \ support_format_herrno \ support_format_hostent \ support_format_netent \ + support_fuse \ support_isolate_in_subprocess \ support_mutex_pi_monotonic \ support_need_proc \ + support_open_and_compare_file_bytes \ + support_open_and_compare_file_string \ support_openpty \ support_path_support_time64 \ support_paths \ @@ -73,6 +78,9 @@ libsupport-routines = \ support_quote_blob \ support_quote_blob_wide \ support_quote_string \ + support_readdir \ + support_readdir_check \ + support_readdir_r_check \ support_record_failure \ support_run_diff \ support_select_modifies_timeout \ @@ -115,6 +123,7 @@ libsupport-routines = \ xclock_settime_time64 \ xclone \ xclose \ + xclosedir \ xconnect \ xcopy_file_range \ xdlfcn \ @@ -122,6 +131,7 @@ libsupport-routines = \ xdup2 \ xfchmod \ xfclose \ + xfdopendir \ xfgets \ xfopen \ xfork \ @@ -143,6 +153,7 @@ libsupport-routines = \ xmunmap \ xnewlocale \ xopen \ + xopendir \ xpipe \ xpoll \ xposix_memalign \ @@ -318,15 +329,18 @@ tests = \ tst-support_capture_subprocess \ tst-support_descriptors \ tst-support_format_dns_packet \ + tst-support_fuse \ tst-support_quote_blob \ tst-support_quote_blob_wide \ tst-support_quote_string \ + tst-support_readdir \ tst-support_record_failure \ tst-test_compare \ tst-test_compare_blob \ tst-test_compare_string \ tst-test_compare_string_wide \ tst-timespec \ + tst-xdirent \ tst-xreadlink \ tst-xsigstack \ # tests diff --git a/support/bundled/README b/support/bundled/README new file mode 100644 index 0000000000..e861b3d40a --- /dev/null +++ b/support/bundled/README @@ -0,0 +1,5 @@ +This subtree contains bundled files included verbatim from other +sources. They are used for building the support/ infrastructure. + +linux/ + Select files from the Linux 6.10 source tree. diff --git a/support/bundled/linux/COPYING b/support/bundled/linux/COPYING new file mode 100644 index 0000000000..a635a38ef9 --- /dev/null +++ b/support/bundled/linux/COPYING @@ -0,0 +1,20 @@ +The Linux Kernel is provided under: + + SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note + +Being under the terms of the GNU General Public License version 2 only, +according with: + + LICENSES/preferred/GPL-2.0 + +With an explicit syscall exception, as stated at: + + LICENSES/exceptions/Linux-syscall-note + +In addition, other licenses may also apply. Please see: + + Documentation/process/license-rules.rst + +for more details. + +All contributions to the Linux Kernel are subject to this COPYING file. diff --git a/support/bundled/linux/LICENSES/exceptions/Linux-syscall-note b/support/bundled/linux/LICENSES/exceptions/Linux-syscall-note new file mode 100644 index 0000000000..adbe756a05 --- /dev/null +++ b/support/bundled/linux/LICENSES/exceptions/Linux-syscall-note @@ -0,0 +1,24 @@ +SPDX-Exception-Identifier: Linux-syscall-note +SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html +SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+, GPL-2.0-only, GPL-2.0-or-later +Usage-Guide: + This exception is used together with one of the above SPDX-Licenses + to mark user space API (uapi) header files so they can be included + into non GPL compliant user space application code. + To use this exception add it with the keyword WITH to one of the + identifiers in the SPDX-Licenses tag: + SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note +License-Text: + + NOTE! This copyright does *not* cover user programs that use kernel + services by normal system calls - this is merely considered normal use + of the kernel, and does *not* fall under the heading of "derived work". + Also note that the GPL below is copyrighted by the Free Software + Foundation, but the instance of code that it refers to (the Linux + kernel) is copyrighted by me and others who actually wrote it. + + Also note that the only valid version of the GPL as far as the kernel + is concerned is _this_ particular version of the license (ie v2, not + v2.2 or v3.x or whatever), unless explicitly otherwise stated. + + Linus Torvalds diff --git a/support/bundled/linux/LICENSES/preferred/GPL-2.0 b/support/bundled/linux/LICENSES/preferred/GPL-2.0 new file mode 100644 index 0000000000..ff0812fd89 --- /dev/null +++ b/support/bundled/linux/LICENSES/preferred/GPL-2.0 @@ -0,0 +1,359 @@ +Valid-License-Identifier: GPL-2.0 +Valid-License-Identifier: GPL-2.0-only +Valid-License-Identifier: GPL-2.0+ +Valid-License-Identifier: GPL-2.0-or-later +SPDX-URL: https://spdx.org/licenses/GPL-2.0.html +Usage-Guide: + To use this license in source code, put one of the following SPDX + tag/value pairs into a comment according to the placement + guidelines in the licensing rules documentation. + For 'GNU General Public License (GPL) version 2 only' use: + SPDX-License-Identifier: GPL-2.0 + or + SPDX-License-Identifier: GPL-2.0-only + For 'GNU General Public License (GPL) version 2 or any later version' use: + SPDX-License-Identifier: GPL-2.0+ + or + SPDX-License-Identifier: GPL-2.0-or-later +License-Text: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/support/bundled/linux/include/uapi/linux/fuse.h b/support/bundled/linux/include/uapi/linux/fuse.h new file mode 100644 index 0000000000..d08b99d60f --- /dev/null +++ b/support/bundled/linux/include/uapi/linux/fuse.h @@ -0,0 +1,1189 @@ +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ +/* + This file defines the kernel interface of FUSE + Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> + + This program can be distributed under the terms of the GNU GPL. + See the file COPYING. + + This -- and only this -- header file may also be distributed under + the terms of the BSD Licence as follows: + + Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +/* + * This file defines the kernel interface of FUSE + * + * Protocol changelog: + * + * 7.1: + * - add the following messages: + * FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK, + * FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE, + * FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR, + * FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR, + * FUSE_RELEASEDIR + * - add padding to messages to accommodate 32-bit servers on 64-bit kernels + * + * 7.2: + * - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags + * - add FUSE_FSYNCDIR message + * + * 7.3: + * - add FUSE_ACCESS message + * - add FUSE_CREATE message + * - add filehandle to fuse_setattr_in + * + * 7.4: + * - add frsize to fuse_kstatfs + * - clean up request size limit checking + * + * 7.5: + * - add flags and max_write to fuse_init_out + * + * 7.6: + * - add max_readahead to fuse_init_in and fuse_init_out + * + * 7.7: + * - add FUSE_INTERRUPT message + * - add POSIX file lock support + * + * 7.8: + * - add lock_owner and flags fields to fuse_release_in + * - add FUSE_BMAP message + * - add FUSE_DESTROY message + * + * 7.9: + * - new fuse_getattr_in input argument of GETATTR + * - add lk_flags in fuse_lk_in + * - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in + * - add blksize field to fuse_attr + * - add file flags field to fuse_read_in and fuse_write_in + * - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in + * + * 7.10 + * - add nonseekable open flag + * + * 7.11 + * - add IOCTL message + * - add unsolicited notification support + * - add POLL message and NOTIFY_POLL notification + * + * 7.12 + * - add umask flag to input argument of create, mknod and mkdir + * - add notification messages for invalidation of inodes and + * directory entries + * + * 7.13 + * - make max number of background requests and congestion threshold + * tunables + * + * 7.14 + * - add splice support to fuse device + * + * 7.15 + * - add store notify + * - add retrieve notify + * + * 7.16 + * - add BATCH_FORGET request + * - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct + * fuse_ioctl_iovec' instead of ambiguous 'struct iovec' + * - add FUSE_IOCTL_32BIT flag + * + * 7.17 + * - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK + * + * 7.18 + * - add FUSE_IOCTL_DIR flag + * - add FUSE_NOTIFY_DELETE + * + * 7.19 + * - add FUSE_FALLOCATE + * + * 7.20 + * - add FUSE_AUTO_INVAL_DATA + * + * 7.21 + * - add FUSE_READDIRPLUS + * - send the requested events in POLL request + * + * 7.22 + * - add FUSE_ASYNC_DIO + * + * 7.23 + * - add FUSE_WRITEBACK_CACHE + * - add time_gran to fuse_init_out + * - add reserved space to fuse_init_out + * - add FATTR_CTIME + * - add ctime and ctimensec to fuse_setattr_in + * - add FUSE_RENAME2 request + * - add FUSE_NO_OPEN_SUPPORT flag + * + * 7.24 + * - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support + * + * 7.25 + * - add FUSE_PARALLEL_DIROPS + * + * 7.26 + * - add FUSE_HANDLE_KILLPRIV + * - add FUSE_POSIX_ACL + * + * 7.27 + * - add FUSE_ABORT_ERROR + * + * 7.28 + * - add FUSE_COPY_FILE_RANGE + * - add FOPEN_CACHE_DIR + * - add FUSE_MAX_PAGES, add max_pages to init_out + * - add FUSE_CACHE_SYMLINKS + * + * 7.29 + * - add FUSE_NO_OPENDIR_SUPPORT flag + * + * 7.30 + * - add FUSE_EXPLICIT_INVAL_DATA + * - add FUSE_IOCTL_COMPAT_X32 + * + * 7.31 + * - add FUSE_WRITE_KILL_PRIV flag + * - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING + * - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag + * + * 7.32 + * - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS + * + * 7.33 + * - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID + * - add FUSE_OPEN_KILL_SUIDGID + * - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT + * - add FUSE_SETXATTR_ACL_KILL_SGID + * + * 7.34 + * - add FUSE_SYNCFS + * + * 7.35 + * - add FOPEN_NOFLUSH + * + * 7.36 + * - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag + * - add flags2 to fuse_init_in and fuse_init_out + * - add FUSE_SECURITY_CTX init flag + * - add security context to create, mkdir, symlink, and mknod requests + * - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX + * + * 7.37 + * - add FUSE_TMPFILE + * + * 7.38 + * - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry + * - add FOPEN_PARALLEL_DIRECT_WRITES + * - add total_extlen to fuse_in_header + * - add FUSE_MAX_NR_SECCTX + * - add extension header + * - add FUSE_EXT_GROUPS + * - add FUSE_CREATE_SUPP_GROUP + * - add FUSE_HAS_EXPIRE_ONLY + * + * 7.39 + * - add FUSE_DIRECT_IO_ALLOW_MMAP + * - add FUSE_STATX and related structures + * + * 7.40 + * - add max_stack_depth to fuse_init_out, add FUSE_PASSTHROUGH init flag + * - add backing_id to fuse_open_out, add FOPEN_PASSTHROUGH open flag + * - add FUSE_NO_EXPORT_SUPPORT init flag + * - add FUSE_NOTIFY_RESEND, add FUSE_HAS_RESEND init flag + */ + +#ifndef _LINUX_FUSE_H +#define _LINUX_FUSE_H + +#ifdef __KERNEL__ +#include <linux/types.h> +#else +#include <stdint.h> +#endif + +/* + * Version negotiation: + * + * Both the kernel and userspace send the version they support in the + * INIT request and reply respectively. + * + * If the major versions match then both shall use the smallest + * of the two minor versions for communication. + * + * If the kernel supports a larger major version, then userspace shall + * reply with the major version it supports, ignore the rest of the + * INIT message and expect a new INIT message from the kernel with a + * matching major version. + * + * If the library supports a larger major version, then it shall fall + * back to the major protocol version sent by the kernel for + * communication and reply with that major version (and an arbitrary + * supported minor version). + */ + +/** Version number of this interface */ +#define FUSE_KERNEL_VERSION 7 + +/** Minor version number of this interface */ +#define FUSE_KERNEL_MINOR_VERSION 40 + +/** The node ID of the root inode */ +#define FUSE_ROOT_ID 1 + +/* Make sure all structures are padded to 64bit boundary, so 32bit + userspace works under 64bit kernels */ + +struct fuse_attr { + uint64_t ino; + uint64_t size; + uint64_t blocks; + uint64_t atime; + uint64_t mtime; + uint64_t ctime; + uint32_t atimensec; + uint32_t mtimensec; + uint32_t ctimensec; + uint32_t mode; + uint32_t nlink; + uint32_t uid; + uint32_t gid; + uint32_t rdev; + uint32_t blksize; + uint32_t flags; +}; + +/* + * The following structures are bit-for-bit compatible with the statx(2) ABI in + * Linux. + */ +struct fuse_sx_time { + int64_t tv_sec; + uint32_t tv_nsec; + int32_t __reserved; +}; + +struct fuse_statx { + uint32_t mask; + uint32_t blksize; + uint64_t attributes; + uint32_t nlink; + uint32_t uid; + uint32_t gid; + uint16_t mode; + uint16_t __spare0[1]; + uint64_t ino; + uint64_t size; + uint64_t blocks; + uint64_t attributes_mask; + struct fuse_sx_time atime; + struct fuse_sx_time btime; + struct fuse_sx_time ctime; + struct fuse_sx_time mtime; + uint32_t rdev_major; + uint32_t rdev_minor; + uint32_t dev_major; + uint32_t dev_minor; + uint64_t __spare2[14]; +}; + +struct fuse_kstatfs { + uint64_t blocks; + uint64_t bfree; + uint64_t bavail; + uint64_t files; + uint64_t ffree; + uint32_t bsize; + uint32_t namelen; + uint32_t frsize; + uint32_t padding; + uint32_t spare[6]; +}; + +struct fuse_file_lock { + uint64_t start; + uint64_t end; + uint32_t type; + uint32_t pid; /* tgid */ +}; + +/** + * Bitmasks for fuse_setattr_in.valid + */ +#define FATTR_MODE (1 << 0) +#define FATTR_UID (1 << 1) +#define FATTR_GID (1 << 2) +#define FATTR_SIZE (1 << 3) +#define FATTR_ATIME (1 << 4) +#define FATTR_MTIME (1 << 5) +#define FATTR_FH (1 << 6) +#define FATTR_ATIME_NOW (1 << 7) +#define FATTR_MTIME_NOW (1 << 8) +#define FATTR_LOCKOWNER (1 << 9) +#define FATTR_CTIME (1 << 10) +#define FATTR_KILL_SUIDGID (1 << 11) + +/** + * Flags returned by the OPEN request + * + * FOPEN_DIRECT_IO: bypass page cache for this open file + * FOPEN_KEEP_CACHE: don't invalidate the data cache on open + * FOPEN_NONSEEKABLE: the file is not seekable + * FOPEN_CACHE_DIR: allow caching this directory + * FOPEN_STREAM: the file is stream-like (no file position at all) + * FOPEN_NOFLUSH: don't flush data cache on close (unless FUSE_WRITEBACK_CACHE) + * FOPEN_PARALLEL_DIRECT_WRITES: Allow concurrent direct writes on the same inode + * FOPEN_PASSTHROUGH: passthrough read/write io for this open file + */ +#define FOPEN_DIRECT_IO (1 << 0) +#define FOPEN_KEEP_CACHE (1 << 1) +#define FOPEN_NONSEEKABLE (1 << 2) +#define FOPEN_CACHE_DIR (1 << 3) +#define FOPEN_STREAM (1 << 4) +#define FOPEN_NOFLUSH (1 << 5) +#define FOPEN_PARALLEL_DIRECT_WRITES (1 << 6) +#define FOPEN_PASSTHROUGH (1 << 7) + +/** + * INIT request/reply flags + * + * FUSE_ASYNC_READ: asynchronous read requests + * FUSE_POSIX_LOCKS: remote locking for POSIX file locks + * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported) + * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem + * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." + * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB + * FUSE_DONT_MASK: don't apply umask to file mode on create operations + * FUSE_SPLICE_WRITE: kernel supports splice write on the device + * FUSE_SPLICE_MOVE: kernel supports splice move on the device + * FUSE_SPLICE_READ: kernel supports splice read on the device + * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks + * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories + * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages + * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one) + * FUSE_READDIRPLUS_AUTO: adaptive readdirplus + * FUSE_ASYNC_DIO: asynchronous direct I/O submission + * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes + * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens + * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir + * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc + * FUSE_POSIX_ACL: filesystem supports posix acls + * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED + * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages + * FUSE_CACHE_SYMLINKS: cache READLINK responses + * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir + * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request + * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for + * foffset and moffset fields in struct + * fuse_setupmapping_out and fuse_removemapping_one. + * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts + * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc. + * Upon write/truncate suid/sgid is only killed if caller + * does not have CAP_FSETID. Additionally upon + * write/truncate sgid is killed only if file has group + * execute permission. (Same as Linux VFS behavior). + * FUSE_SETXATTR_EXT: Server supports extended struct fuse_setxattr_in + * FUSE_INIT_EXT: extended fuse_init_in request + * FUSE_INIT_RESERVED: reserved, do not use + * FUSE_SECURITY_CTX: add security context to create, mkdir, symlink, and + * mknod + * FUSE_HAS_INODE_DAX: use per inode DAX + * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir, + * symlink and mknod (single group that matches parent) + * FUSE_HAS_EXPIRE_ONLY: kernel supports expiry-only entry invalidation + * FUSE_DIRECT_IO_ALLOW_MMAP: allow shared mmap in FOPEN_DIRECT_IO mode. + * FUSE_NO_EXPORT_SUPPORT: explicitly disable export support + * FUSE_HAS_RESEND: kernel supports resending pending requests, and the high bit + * of the request ID indicates resend requests + */ +#define FUSE_ASYNC_READ (1 << 0) +#define FUSE_POSIX_LOCKS (1 << 1) +#define FUSE_FILE_OPS (1 << 2) +#define FUSE_ATOMIC_O_TRUNC (1 << 3) +#define FUSE_EXPORT_SUPPORT (1 << 4) +#define FUSE_BIG_WRITES (1 << 5) +#define FUSE_DONT_MASK (1 << 6) +#define FUSE_SPLICE_WRITE (1 << 7) +#define FUSE_SPLICE_MOVE (1 << 8) +#define FUSE_SPLICE_READ (1 << 9) +#define FUSE_FLOCK_LOCKS (1 << 10) +#define FUSE_HAS_IOCTL_DIR (1 << 11) +#define FUSE_AUTO_INVAL_DATA (1 << 12) +#define FUSE_DO_READDIRPLUS (1 << 13) +#define FUSE_READDIRPLUS_AUTO (1 << 14) +#define FUSE_ASYNC_DIO (1 << 15) +#define FUSE_WRITEBACK_CACHE (1 << 16) +#define FUSE_NO_OPEN_SUPPORT (1 << 17) +#define FUSE_PARALLEL_DIROPS (1 << 18) +#define FUSE_HANDLE_KILLPRIV (1 << 19) +#define FUSE_POSIX_ACL (1 << 20) +#define FUSE_ABORT_ERROR (1 << 21) +#define FUSE_MAX_PAGES (1 << 22) +#define FUSE_CACHE_SYMLINKS (1 << 23) +#define FUSE_NO_OPENDIR_SUPPORT (1 << 24) +#define FUSE_EXPLICIT_INVAL_DATA (1 << 25) +#define FUSE_MAP_ALIGNMENT (1 << 26) +#define FUSE_SUBMOUNTS (1 << 27) +#define FUSE_HANDLE_KILLPRIV_V2 (1 << 28) +#define FUSE_SETXATTR_EXT (1 << 29) +#define FUSE_INIT_EXT (1 << 30) +#define FUSE_INIT_RESERVED (1 << 31) +/* bits 32..63 get shifted down 32 bits into the flags2 field */ +#define FUSE_SECURITY_CTX (1ULL << 32) +#define FUSE_HAS_INODE_DAX (1ULL << 33) +#define FUSE_CREATE_SUPP_GROUP (1ULL << 34) +#define FUSE_HAS_EXPIRE_ONLY (1ULL << 35) +#define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36) +#define FUSE_PASSTHROUGH (1ULL << 37) +#define FUSE_NO_EXPORT_SUPPORT (1ULL << 38) +#define FUSE_HAS_RESEND (1ULL << 39) + +/* Obsolete alias for FUSE_DIRECT_IO_ALLOW_MMAP */ +#define FUSE_DIRECT_IO_RELAX FUSE_DIRECT_IO_ALLOW_MMAP + +/** + * CUSE INIT request/reply flags + * + * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl + */ +#define CUSE_UNRESTRICTED_IOCTL (1 << 0) + +/** + * Release flags + */ +#define FUSE_RELEASE_FLUSH (1 << 0) +#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1) + +/** + * Getattr flags + */ +#define FUSE_GETATTR_FH (1 << 0) + +/** + * Lock flags + */ +#define FUSE_LK_FLOCK (1 << 0) + +/** + * WRITE flags + * + * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed + * FUSE_WRITE_LOCKOWNER: lock_owner field is valid + * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits + */ +#define FUSE_WRITE_CACHE (1 << 0) +#define FUSE_WRITE_LOCKOWNER (1 << 1) +#define FUSE_WRITE_KILL_SUIDGID (1 << 2) + +/* Obsolete alias; this flag implies killing suid/sgid only. */ +#define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID + +/** + * Read flags + */ +#define FUSE_READ_LOCKOWNER (1 << 1) + +/** + * Ioctl flags + * + * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine + * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed + * FUSE_IOCTL_RETRY: retry with new iovecs + * FUSE_IOCTL_32BIT: 32bit ioctl + * FUSE_IOCTL_DIR: is a directory + * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t) + * + * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs + */ +#define FUSE_IOCTL_COMPAT (1 << 0) +#define FUSE_IOCTL_UNRESTRICTED (1 << 1) +#define FUSE_IOCTL_RETRY (1 << 2) +#define FUSE_IOCTL_32BIT (1 << 3) +#define FUSE_IOCTL_DIR (1 << 4) +#define FUSE_IOCTL_COMPAT_X32 (1 << 5) + +#define FUSE_IOCTL_MAX_IOV 256 + +/** + * Poll flags + * + * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify + */ +#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) + +/** + * Fsync flags + * + * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata + */ +#define FUSE_FSYNC_FDATASYNC (1 << 0) + +/** + * fuse_attr flags + * + * FUSE_ATTR_SUBMOUNT: Object is a submount root + * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode + */ +#define FUSE_ATTR_SUBMOUNT (1 << 0) +#define FUSE_ATTR_DAX (1 << 1) + +/** + * Open flags + * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable + */ +#define FUSE_OPEN_KILL_SUIDGID (1 << 0) + +/** + * setxattr flags + * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set + */ +#define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0) + +/** + * notify_inval_entry flags + * FUSE_EXPIRE_ONLY + */ +#define FUSE_EXPIRE_ONLY (1 << 0) + +/** + * extension type + * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx + * FUSE_EXT_GROUPS: &fuse_supp_groups extension + */ +enum fuse_ext_type { + /* Types 0..31 are reserved for fuse_secctx_header */ + FUSE_MAX_NR_SECCTX = 31, + FUSE_EXT_GROUPS = 32, +}; + +enum fuse_opcode { + FUSE_LOOKUP = 1, + FUSE_FORGET = 2, /* no reply */ + FUSE_GETATTR = 3, + FUSE_SETATTR = 4, + FUSE_READLINK = 5, + FUSE_SYMLINK = 6, + FUSE_MKNOD = 8, + FUSE_MKDIR = 9, + FUSE_UNLINK = 10, + FUSE_RMDIR = 11, + FUSE_RENAME = 12, + FUSE_LINK = 13, + FUSE_OPEN = 14, + FUSE_READ = 15, + FUSE_WRITE = 16, + FUSE_STATFS = 17, + FUSE_RELEASE = 18, + FUSE_FSYNC = 20, + FUSE_SETXATTR = 21, + FUSE_GETXATTR = 22, + FUSE_LISTXATTR = 23, + FUSE_REMOVEXATTR = 24, + FUSE_FLUSH = 25, + FUSE_INIT = 26, + FUSE_OPENDIR = 27, + FUSE_READDIR = 28, + FUSE_RELEASEDIR = 29, + FUSE_FSYNCDIR = 30, + FUSE_GETLK = 31, + FUSE_SETLK = 32, + FUSE_SETLKW = 33, + FUSE_ACCESS = 34, + FUSE_CREATE = 35, + FUSE_INTERRUPT = 36, + FUSE_BMAP = 37, + FUSE_DESTROY = 38, + FUSE_IOCTL = 39, + FUSE_POLL = 40, + FUSE_NOTIFY_REPLY = 41, + FUSE_BATCH_FORGET = 42, + FUSE_FALLOCATE = 43, + FUSE_READDIRPLUS = 44, + FUSE_RENAME2 = 45, + FUSE_LSEEK = 46, + FUSE_COPY_FILE_RANGE = 47, + FUSE_SETUPMAPPING = 48, + FUSE_REMOVEMAPPING = 49, + FUSE_SYNCFS = 50, + FUSE_TMPFILE = 51, + FUSE_STATX = 52, + + /* CUSE specific operations */ + CUSE_INIT = 4096, + + /* Reserved opcodes: helpful to detect structure endian-ness */ + CUSE_INIT_BSWAP_RESERVED = 1048576, /* CUSE_INIT << 8 */ + FUSE_INIT_BSWAP_RESERVED = 436207616, /* FUSE_INIT << 24 */ +}; + +enum fuse_notify_code { + FUSE_NOTIFY_POLL = 1, + FUSE_NOTIFY_INVAL_INODE = 2, + FUSE_NOTIFY_INVAL_ENTRY = 3, + FUSE_NOTIFY_STORE = 4, + FUSE_NOTIFY_RETRIEVE = 5, + FUSE_NOTIFY_DELETE = 6, + FUSE_NOTIFY_RESEND = 7, + FUSE_NOTIFY_CODE_MAX, +}; + +/* The read buffer is required to be at least 8k, but may be much larger */ +#define FUSE_MIN_READ_BUFFER 8192 + +#define FUSE_COMPAT_ENTRY_OUT_SIZE 120 + +struct fuse_entry_out { + uint64_t nodeid; /* Inode ID */ + uint64_t generation; /* Inode generation: nodeid:gen must + be unique for the fs's lifetime */ + uint64_t entry_valid; /* Cache timeout for the name */ + uint64_t attr_valid; /* Cache timeout for the attributes */ + uint32_t entry_valid_nsec; + uint32_t attr_valid_nsec; + struct fuse_attr attr; +}; + +struct fuse_forget_in { + uint64_t nlookup; +}; + +struct fuse_forget_one { + uint64_t nodeid; + uint64_t nlookup; +}; + +struct fuse_batch_forget_in { + uint32_t count; + uint32_t dummy; +}; + +struct fuse_getattr_in { + uint32_t getattr_flags; + uint32_t dummy; + uint64_t fh; +}; + +#define FUSE_COMPAT_ATTR_OUT_SIZE 96 + +struct fuse_attr_out { + uint64_t attr_valid; /* Cache timeout for the attributes */ + uint32_t attr_valid_nsec; + uint32_t dummy; + struct fuse_attr attr; +}; + +struct fuse_statx_in { + uint32_t getattr_flags; + uint32_t reserved; + uint64_t fh; + uint32_t sx_flags; + uint32_t sx_mask; +}; + +struct fuse_statx_out { + uint64_t attr_valid; /* Cache timeout for the attributes */ + uint32_t attr_valid_nsec; + uint32_t flags; + uint64_t spare[2]; + struct fuse_statx stat; +}; + +#define FUSE_COMPAT_MKNOD_IN_SIZE 8 + +struct fuse_mknod_in { + uint32_t mode; + uint32_t rdev; + uint32_t umask; + uint32_t padding; +}; + +struct fuse_mkdir_in { + uint32_t mode; + uint32_t umask; +}; + +struct fuse_rename_in { + uint64_t newdir; +}; + +struct fuse_rename2_in { + uint64_t newdir; + uint32_t flags; + uint32_t padding; +}; + +struct fuse_link_in { + uint64_t oldnodeid; +}; + +struct fuse_setattr_in { + uint32_t valid; + uint32_t padding; + uint64_t fh; + uint64_t size; + uint64_t lock_owner; + uint64_t atime; + uint64_t mtime; + uint64_t ctime; + uint32_t atimensec; + uint32_t mtimensec; + uint32_t ctimensec; + uint32_t mode; + uint32_t unused4; + uint32_t uid; + uint32_t gid; + uint32_t unused5; +}; + +struct fuse_open_in { + uint32_t flags; + uint32_t open_flags; /* FUSE_OPEN_... */ +}; + +struct fuse_create_in { + uint32_t flags; + uint32_t mode; + uint32_t umask; + uint32_t open_flags; /* FUSE_OPEN_... */ +}; + +struct fuse_open_out { + uint64_t fh; + uint32_t open_flags; + int32_t backing_id; +}; + +struct fuse_release_in { + uint64_t fh; + uint32_t flags; + uint32_t release_flags; + uint64_t lock_owner; +}; + +struct fuse_flush_in { + uint64_t fh; + uint32_t unused; + uint32_t padding; + uint64_t lock_owner; +}; + +struct fuse_read_in { + uint64_t fh; + uint64_t offset; + uint32_t size; + uint32_t read_flags; + uint64_t lock_owner; + uint32_t flags; + uint32_t padding; +}; + +#define FUSE_COMPAT_WRITE_IN_SIZE 24 + +struct fuse_write_in { + uint64_t fh; + uint64_t offset; + uint32_t size; + uint32_t write_flags; + uint64_t lock_owner; + uint32_t flags; + uint32_t padding; +}; + +struct fuse_write_out { + uint32_t size; + uint32_t padding; +}; + +#define FUSE_COMPAT_STATFS_SIZE 48 + +struct fuse_statfs_out { + struct fuse_kstatfs st; +}; + +struct fuse_fsync_in { + uint64_t fh; + uint32_t fsync_flags; + uint32_t padding; +}; + +#define FUSE_COMPAT_SETXATTR_IN_SIZE 8 + +struct fuse_setxattr_in { + uint32_t size; + uint32_t flags; + uint32_t setxattr_flags; + uint32_t padding; +}; + +struct fuse_getxattr_in { + uint32_t size; + uint32_t padding; +}; + +struct fuse_getxattr_out { + uint32_t size; + uint32_t padding; +}; + +struct fuse_lk_in { + uint64_t fh; + uint64_t owner; + struct fuse_file_lock lk; + uint32_t lk_flags; + uint32_t padding; +}; + +struct fuse_lk_out { + struct fuse_file_lock lk; +}; + +struct fuse_access_in { + uint32_t mask; + uint32_t padding; +}; + +struct fuse_init_in { + uint32_t major; + uint32_t minor; + uint32_t max_readahead; + uint32_t flags; + uint32_t flags2; + uint32_t unused[11]; +}; + +#define FUSE_COMPAT_INIT_OUT_SIZE 8 +#define FUSE_COMPAT_22_INIT_OUT_SIZE 24 + +struct fuse_init_out { + uint32_t major; + uint32_t minor; + uint32_t max_readahead; + uint32_t flags; + uint16_t max_background; + uint16_t congestion_threshold; + uint32_t max_write; + uint32_t time_gran; + uint16_t max_pages; + uint16_t map_alignment; + uint32_t flags2; + uint32_t max_stack_depth; + uint32_t unused[6]; +}; + +#define CUSE_INIT_INFO_MAX 4096 + +struct cuse_init_in { + uint32_t major; + uint32_t minor; + uint32_t unused; + uint32_t flags; +}; + +struct cuse_init_out { + uint32_t major; + uint32_t minor; + uint32_t unused; + uint32_t flags; + uint32_t max_read; + uint32_t max_write; + uint32_t dev_major; /* chardev major */ + uint32_t dev_minor; /* chardev minor */ + uint32_t spare[10]; +}; + +struct fuse_interrupt_in { + uint64_t unique; +}; + +struct fuse_bmap_in { + uint64_t block; + uint32_t blocksize; + uint32_t padding; +}; + +struct fuse_bmap_out { + uint64_t block; +}; + +struct fuse_ioctl_in { + uint64_t fh; + uint32_t flags; + uint32_t cmd; + uint64_t arg; + uint32_t in_size; + uint32_t out_size; +}; + +struct fuse_ioctl_iovec { + uint64_t base; + uint64_t len; +}; + +struct fuse_ioctl_out { + int32_t result; + uint32_t flags; + uint32_t in_iovs; + uint32_t out_iovs; +}; + +struct fuse_poll_in { + uint64_t fh; + uint64_t kh; + uint32_t flags; + uint32_t events; +}; + +struct fuse_poll_out { + uint32_t revents; + uint32_t padding; +}; + +struct fuse_notify_poll_wakeup_out { + uint64_t kh; +}; + +struct fuse_fallocate_in { + uint64_t fh; + uint64_t offset; + uint64_t length; + uint32_t mode; + uint32_t padding; +}; + +/** + * FUSE request unique ID flag + * + * Indicates whether this is a resend request. The receiver should handle this + * request accordingly. + */ +#define FUSE_UNIQUE_RESEND (1ULL << 63) + +struct fuse_in_header { + uint32_t len; + uint32_t opcode; + uint64_t unique; + uint64_t nodeid; + uint32_t uid; + uint32_t gid; + uint32_t pid; + uint16_t total_extlen; /* length of extensions in 8byte units */ + uint16_t padding; +}; + +struct fuse_out_header { + uint32_t len; + int32_t error; + uint64_t unique; +}; + +struct fuse_dirent { + uint64_t ino; + uint64_t off; + uint32_t namelen; + uint32_t type; + char name[]; +}; + +/* Align variable length records to 64bit boundary */ +#define FUSE_REC_ALIGN(x) \ + (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) + +#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) +#define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x) +#define FUSE_DIRENT_SIZE(d) \ + FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) + +struct fuse_direntplus { + struct fuse_entry_out entry_out; + struct fuse_dirent dirent; +}; + +#define FUSE_NAME_OFFSET_DIRENTPLUS \ + offsetof(struct fuse_direntplus, dirent.name) +#define FUSE_DIRENTPLUS_SIZE(d) \ + FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen) + +struct fuse_notify_inval_inode_out { + uint64_t ino; + int64_t off; + int64_t len; +}; + +struct fuse_notify_inval_entry_out { + uint64_t parent; + uint32_t namelen; + uint32_t flags; +}; + +struct fuse_notify_delete_out { + uint64_t parent; + uint64_t child; + uint32_t namelen; + uint32_t padding; +}; + +struct fuse_notify_store_out { + uint64_t nodeid; + uint64_t offset; + uint32_t size; + uint32_t padding; +}; + +struct fuse_notify_retrieve_out { + uint64_t notify_unique; + uint64_t nodeid; + uint64_t offset; + uint32_t size; + uint32_t padding; +}; + +/* Matches the size of fuse_write_in */ +struct fuse_notify_retrieve_in { + uint64_t dummy1; + uint64_t offset; + uint32_t size; + uint32_t dummy2; + uint64_t dummy3; + uint64_t dummy4; +}; + +struct fuse_backing_map { + int32_t fd; + uint32_t flags; + uint64_t padding; +}; + +/* Device ioctls: */ +#define FUSE_DEV_IOC_MAGIC 229 +#define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t) +#define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, \ + struct fuse_backing_map) +#define FUSE_DEV_IOC_BACKING_CLOSE _IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t) + +struct fuse_lseek_in { + uint64_t fh; + uint64_t offset; + uint32_t whence; + uint32_t padding; +}; + +struct fuse_lseek_out { + uint64_t offset; +}; + +struct fuse_copy_file_range_in { + uint64_t fh_in; + uint64_t off_in; + uint64_t nodeid_out; + uint64_t fh_out; + uint64_t off_out; + uint64_t len; + uint64_t flags; +}; + +#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0) +#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1) +struct fuse_setupmapping_in { + /* An already open handle */ + uint64_t fh; + /* Offset into the file to start the mapping */ + uint64_t foffset; + /* Length of mapping required */ + uint64_t len; + /* Flags, FUSE_SETUPMAPPING_FLAG_* */ + uint64_t flags; + /* Offset in Memory Window */ + uint64_t moffset; +}; + +struct fuse_removemapping_in { + /* number of fuse_removemapping_one follows */ + uint32_t count; +}; + +struct fuse_removemapping_one { + /* Offset into the dax window start the unmapping */ + uint64_t moffset; + /* Length of mapping required */ + uint64_t len; +}; + +#define FUSE_REMOVEMAPPING_MAX_ENTRY \ + (PAGE_SIZE / sizeof(struct fuse_removemapping_one)) + +struct fuse_syncfs_in { + uint64_t padding; +}; + +/* + * For each security context, send fuse_secctx with size of security context + * fuse_secctx will be followed by security context name and this in turn + * will be followed by actual context label. + * fuse_secctx, name, context + */ +struct fuse_secctx { + uint32_t size; + uint32_t padding; +}; + +/* + * Contains the information about how many fuse_secctx structures are being + * sent and what's the total size of all security contexts (including + * size of fuse_secctx_header). + * + */ +struct fuse_secctx_header { + uint32_t size; + uint32_t nr_secctx; +}; + +/** + * struct fuse_ext_header - extension header + * @size: total size of this extension including this header + * @type: type of extension + * + * This is made compatible with fuse_secctx_header by using type values > + * FUSE_MAX_NR_SECCTX + */ +struct fuse_ext_header { + uint32_t size; + uint32_t type; +}; + +/** + * struct fuse_supp_groups - Supplementary group extension + * @nr_groups: number of supplementary groups + * @groups: flexible array of group IDs + */ +struct fuse_supp_groups { + uint32_t nr_groups; + uint32_t groups[]; +}; + +#endif /* _LINUX_FUSE_H */ diff --git a/support/file_contents.h b/support/file_contents.h new file mode 100644 index 0000000000..9b2d750aae --- /dev/null +++ b/support/file_contents.h @@ -0,0 +1,63 @@ +/* Functionality for checking file contents. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef SUPPORT_FILE_CONTENTS_H +#define SUPPORT_FILE_CONTENTS_H + +#include <support/check.h> +#include <stdio.h> + +__BEGIN_DECLS + +/* Check that an already-open file has exactly the given bytes, + starting at the current location in the file. The file position + indicator is updated to point after the bytes compared. Return 0 + if equal, 1 otherwise or on read error. */ +int support_compare_file_bytes (FILE *fp, const char *contents, size_t length); + +/* Check that an already-open file has exactly the given string as + contents, starting at the current offset. The file position + indicator is updated to point after the bytes compared. Return 0 + if equal, 1 otherwise or on read error. */ +int support_compare_file_string (FILE *fp, const char *contents); + +/* Check that a not-currently-open file has exactly the given bytes. + Return 0 if equal, 1 otherwise or on read error. */ +int support_open_and_compare_file_bytes (const char *file, + const char *contents, + size_t length); + +/* Check that a not-currently-open file has exactly the given string + as contents, starting at the current offset. Return 0 if equal, 1 + otherwise or on read error. */ +int support_open_and_compare_file_string (const char *file, + const char *contents); + +/* Compare bytes read from an open file with the given string. The + file position indicator is updated to point after the bytes + compared. */ +#define TEST_COMPARE_FILE_STRING(FP, CONTENTS) \ + TEST_COMPARE (support_compare_file_string (FP, CONTENTS), 0) + +/* Read a file and compare bytes read from it with the given string. */ +#define TEST_OPEN_AND_COMPARE_FILE_STRING(FILE, CONTENTS) \ + TEST_COMPARE (support_open_and_compare_file_string (FILE, CONTENTS), 0) + +__END_DECLS + +#endif /* SUPPORT_FILE_CONTENTS_H */ diff --git a/support/fuse.h b/support/fuse.h new file mode 100644 index 0000000000..1c862bedbe --- /dev/null +++ b/support/fuse.h @@ -0,0 +1,217 @@ +/* Facilities for FUSE-backed file system tests. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* To run FUSE tests under valgrind, pass the + --sim-hints=fuse-compatible option to valgrind. This option tells + valgrind that additional system calls effectively call back into + the current program. */ + +#ifndef SUPPORT_FUSE_H +#define SUPPORT_FUSE_H + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include <support/bundled/linux/include/uapi/linux/fuse.h> + +/* This function must be called furst, before support_fuse_mount, to + prepare unprivileged mounting. */ +void support_fuse_init (void); + +/* This function can be called instead of support_fuse_init. It does + not use mount and user namespaces, so it requires root privileges, + and cleanup after testing may be incomplete. This is intended only + for test development. */ +void support_fuse_init_no_namespace (void); + +/* Opaque type for tracking FUSE mount state. */ +struct support_fuse; + +/* This function disables a mount point created using + support_fuse_mount. */ +void support_fuse_unmount (struct support_fuse *) __nonnull ((1)); + +/* This function is called on a separate thread after calling + support_fuse_mount. F is the mount state, and CLOSURE the argument + that was passed to support_fuse_mount. The callback function is + expected to call support_fuse_next to read packets from the kernel + and handle them according to the test's need. */ +typedef void (*support_fuse_callback) (struct support_fuse *f, void *closure); + +/* This function creates a new mount point, implemented by CALLBACK. + CLOSURE is passed to CALLBACK as the second argument. */ +struct support_fuse *support_fuse_mount (support_fuse_callback callback, + void *closure) + __nonnull ((1)) __attr_dealloc (support_fuse_unmount, 1); + +/* This function returns the path to the mount point for F. The + returned string is valid until support_fuse_unmount (F) is called. */ +const char * support_fuse_mountpoint (struct support_fuse *f) __nonnull ((1)); + + +/* Renders the OPCODE as a string (FUSE_* constant. The caller must + free the returned string. */ +char * support_fuse_opcode (uint32_t opcode) __attr_dealloc_free; + +/* Use to provide a checked cast facility. Use the + support_fuse_in_cast macro below. */ +void *support_fuse_cast_internal (struct fuse_in_header *, uint32_t) + __nonnull ((1)); +void *support_fuse_cast_name_internal (struct fuse_in_header *, uint32_t, + size_t skip, char **name) + __nonnull ((1)); + +/* The macro expansion support_fuse_in_cast (P, TYPE) casts the + pointer INH to the appropriate type corresponding to the FUSE_TYPE + opcode. It fails (terminates the process) if INH->opcode does not + match FUSE_TYPE. The type of the returned pointer matches that of + the FUSE_* constant. + + Maintenance note: Adding support for additional struct fuse_*_in + types is generally easy, except when there is trailing data after + the struct (see below for support_fuse_cast_name, for example), and + the kernel has changed struct sizes over time. This has happened + recently with struct fuse_setxattr_in, and would require special + handling if implemented. */ +#define support_fuse_payload_type_INIT struct fuse_init_in +#define support_fuse_payload_type_LOOKUP char +#define support_fuse_payload_type_OPEN struct fuse_open_in +#define support_fuse_payload_type_READ struct fuse_read_in +#define support_fuse_payload_type_SETATTR struct fuse_setattr_in +#define support_fuse_payload_type_WRITE struct fuse_write_in +#define support_fuse_cast(typ, inh) \ + ((support_fuse_payload_type_##typ *) \ + support_fuse_cast_internal ((inh), FUSE_##typ)) + +/* Same as support_fuse_cast, but also writes the passed name to *NAMEP. */ +#define support_fuse_payload_name_type_CREATE struct fuse_create_in +#define support_fuse_payload_name_type_MKDIR struct fuse_mkdir_in +#define support_fuse_cast_name(typ, inh, namep) \ + ((support_fuse_payload_name_type_##typ *) \ + support_fuse_cast_name_internal \ + ((inh), FUSE_##typ, sizeof (support_fuse_payload_name_type_##typ), \ + (namep))) + +/* This function should be called from the callback function. It + returns NULL if the mount point has been unmounted. The result can + be cast using support_fuse_in_cast. The pointer is invalidated + with the next call to support_fuse_next. + + Typical use involves handling some basics using the + support_fuse_handle_* building blocks, following by a switch + statement on the result member of the returned struct, to implement + what a particular test needs. Casts to payload data should be made + using support_fuse_in_cast. + + By default, FUSE_FORGET responses are filtered. See + support_fuse_filter_forget for turning that off. */ +struct fuse_in_header *support_fuse_next (struct support_fuse *f) + __nonnull ((1)); + +/* This function can be called from a callback function to handle + basic aspects of directories (OPENDIR, GETATTR, RELEASEDIR). + inh->nodeid is used as the inode number for the directory. This + function must be called after support_fuse_next. */ +bool support_fuse_handle_directory (struct support_fuse *f) __nonnull ((1)); + +/* This function can be called from a callback function to handle + access to the mount point itself, after call support_fuse_next. */ +bool support_fuse_handle_mountpoint (struct support_fuse *f) __nonnull ((1)); + +/* If FILTER_ENABLED, future support_fuse_next calls will not return + FUSE_FORGET events (and simply discared them, as they require no + reply). If !FILTER_ENABLED, the callback needs to handle + FUSE_FORGET events and call support_fuse_no_reply. */ +void support_fuse_filter_forget (struct support_fuse *f, bool filter_enabled) + __nonnull ((1)); + +/* This function should be called from the callback function after + support_fuse_next returned a non-null pointer. It sends out a + response packet on the FUSE device with the supplied payload data. */ +void support_fuse_reply (struct support_fuse *f, + const void *payload, size_t payload_size) + __nonnull ((1)) __attr_access ((__read_only__, 2, 3)); + +/* This function should be called from the callback function. It + replies to a request with an error indicator. ERROR must be positive. */ +void support_fuse_reply_error (struct support_fuse *f, uint32_t error) + __nonnull ((1)); + +/* This function should be called from the callback function. It + sends out an empty (but success-indicating) reply packet. */ +void support_fuse_reply_empty (struct support_fuse *f) __nonnull ((1)); + +/* Do not send a reply. Only to be used after a support_fuse_next + call that returned a FUSE_FORGET event. */ +void support_fuse_no_reply (struct support_fuse *f) __nonnull ((1)); + +/* Specific reponse preparation functions. The returned object can be + updated as needed. If a NODEID argument is present, it will be + used to set the inode and FUSE nodeid fields. Without such an + argument, it is initialized from the current request (if the reply + requires this field). This function must be called after + support_fuse_next. The actual response must be sent using + support_fuse_reply_prepared (or a support_fuse_reply_error call can + be used to cancel the response). */ +struct fuse_entry_out *support_fuse_prepare_entry (struct support_fuse *f, + uint64_t nodeid) + __nonnull ((1)); +struct fuse_attr_out *support_fuse_prepare_attr (struct support_fuse *f) + __nonnull ((1)); + +/* Similar to the other support_fuse_prepare_* functions, but it + prepares for two response packets. They can be updated through the + pointers written to *OUT_ENTRY and *OUT_OPEN prior to calling + support_fuse_reply_prepared. */ +void support_fuse_prepare_create (struct support_fuse *f, + uint64_t nodeid, + struct fuse_entry_out **out_entry, + struct fuse_open_out **out_open) + __nonnull ((1, 3, 4)); + + +/* Prepare sending a directory stream. Must be called after + support_fuse_next and before support_fuse_dirstream_add. */ +struct support_fuse_dirstream; +struct support_fuse_dirstream *support_fuse_prepare_readdir (struct + support_fuse *f); + +/* Adds directory using D_INO, D_OFF, D_TYPE, D_NAME to the directory + stream D. Must be called after support_fuse_prepare_readdir. + + D_OFF is the offset of the next directory entry, not the current + one. The first entry has offset zero. The first requested offset + can be obtained from the READ payload (struct fuse_read_in) prior + to calling this function. + + Returns true if the entry could be added to the buffer, or false if + there was insufficient room. Sending the buffer is delayed until + support_fuse_reply_prepared is called. */ +bool support_fuse_dirstream_add (struct support_fuse_dirstream *d, + uint64_t d_ino, uint64_t d_off, + uint32_t d_type, + const char *d_name); + +/* Send a prepared response. Must be called after one of the + support_fuse_prepare_* functions and before the next + support_fuse_next call. */ +void support_fuse_reply_prepared (struct support_fuse *f) __nonnull ((1)); + +#endif /* SUPPORT_FUSE_H */ diff --git a/support/process_state.h b/support/process_state.h index 1cf902e91b..9541d8c343 100644 --- a/support/process_state.h +++ b/support/process_state.h @@ -31,13 +31,16 @@ enum support_process_state support_process_state_dead = 0x20, /* X (dead). */ support_process_state_zombie = 0x40, /* Z (zombie). */ support_process_state_parked = 0x80, /* P (parked). */ + support_process_state_invalid = 0x100 /* Invalid state. */ }; /* Wait for process PID to reach state STATE. It can be a combination of multiple possible states ('process_state_running | process_state_sleeping') where the function return when any of these state are observed. For an invalid state not represented by SUPPORT_PROCESS_STATE, it fallbacks - to a 2 second sleep. */ -void support_process_state_wait (pid_t pid, enum support_process_state state); + to a 2 second sleep. + Return the found process state. */ +enum support_process_state +support_process_state_wait (pid_t pid, enum support_process_state state); #endif diff --git a/support/readdir.h b/support/readdir.h new file mode 100644 index 0000000000..7d7c7650d4 --- /dev/null +++ b/support/readdir.h @@ -0,0 +1,85 @@ +/* Type-generic wrapper for readdir functions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef SUPPORT_READDIR_H +#define SUPPORT_READDIR_H + +#include <dirent.h> +#include <stdbool.h> +#include <stdint.h> + +__BEGIN_DECLS + +/* Definition independent of _FILE_OFFSET_BITS. */ +struct support_dirent +{ + uint64_t d_ino; + uint64_t d_off; /* 0 if d_off is not supported. */ + uint32_t d_type; + char *d_name; +}; + +/* Operation to be performed by support_readdir below. */ +enum support_readdir_op + { + SUPPORT_READDIR, + SUPPORT_READDIR64, + SUPPORT_READDIR_R, + SUPPORT_READDIR64_R, + SUPPORT_READDIR64_COMPAT, + SUPPORT_READDIR64_R_COMPAT, + }; + +/* Returns the last supported function. May exclude + SUPPORT_READDIR64_R_COMPAT if not implemented. */ +enum support_readdir_op support_readdir_op_last (void); + +/* Returns the name of the function that corresponds to the OP constant. */ +const char *support_readdir_function (enum support_readdir_op op); + +/* Returns the d_ino field width for OP, in bits. */ +unsigned int support_readdir_inode_width (enum support_readdir_op op); + +/* Returns the d_off field width for OP, in bits. Zero if not present. */ +unsigned int support_readdir_offset_width (enum support_readdir_op op); + +/* Returns true if OP is an _r variant with name length restrictions. */ +bool support_readdir_r_variant (enum support_readdir_op op); + +/* First, free E->d_name and set the field to NULL. Then call the + readdir variant as specified by OP. If successfully, copy fields + to E, make a copy of the entry name using strdup, and write its + addres sto E->d_name. + + Return true if an entry was read, or false if the end of the + directory stream was reached. Terminates the process upon error. + The caller is expected to free E->d_name if the function is not + called again for this E. + + Note that this function assumes that E->d_name has been initialized + to NULL or has been allocated by a previous call to this function. */ +bool support_readdir (DIR *stream, enum support_readdir_op op, + struct support_dirent *e) __nonnull ((1, 3)); + +/* Checks that the readdir operation OP fails with errno value EXPECTED. */ +void support_readdir_expect_error (DIR *stream, enum support_readdir_op op, + int expected) __nonnull ((1)); + +__END_DECLS + +#endif /* SUPPORT_READDIR_H */ diff --git a/support/support_compare_file_bytes.c b/support/support_compare_file_bytes.c new file mode 100644 index 0000000000..e261e1da8f --- /dev/null +++ b/support/support_compare_file_bytes.c @@ -0,0 +1,42 @@ +/* Compare bytes from an open file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> + +#include <support/file_contents.h> + +/* Check that an already-open file has exactly the given bytes, + starting at the current offset. */ + +int +support_compare_file_bytes (FILE *fp, const char *contents, size_t length) +{ + int c; + while (length > 0) + { + c = getc (fp); + if (c == EOF || (unsigned char) c != (unsigned char) contents[0]) + return 1; + contents++; + length--; + } + c = getc (fp); + if (c != EOF || ferror (fp)) + return 1; + return 0; +} diff --git a/support/support_compare_file_string.c b/support/support_compare_file_string.c new file mode 100644 index 0000000000..04513c3af1 --- /dev/null +++ b/support/support_compare_file_string.c @@ -0,0 +1,28 @@ +/* Compare string from an open file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <string.h> + +#include <support/file_contents.h> + +int +support_compare_file_string (FILE *fp, const char *contents) +{ + return support_compare_file_bytes (fp, contents, strlen (contents)); +} diff --git a/support/support_fuse.c b/support/support_fuse.c new file mode 100644 index 0000000000..f6c063b549 --- /dev/null +++ b/support/support_fuse.c @@ -0,0 +1,706 @@ +/* Facilities for FUSE-backed file system tests. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/fuse.h> + +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <string.h> +#include <sys/sysmacros.h> +#include <sys/uio.h> +#include <unistd.h> + +#include <array_length.h> +#include <support/check.h> +#include <support/namespace.h> +#include <support/support.h> +#include <support/test-driver.h> +#include <support/xdirent.h> +#include <support/xthread.h> +#include <support/xunistd.h> + +#ifdef __linux__ +# include <sys/mount.h> +#else +/* Fallback definitions that mark the test as unsupported. */ +# define mount(...) ({ FAIL_UNSUPPORTED ("mount"); -1; }) +# define umount(...) ({ FAIL_UNSUPPORTED ("mount"); -1; }) +#endif + +struct support_fuse +{ + char *mountpoint; + void *buffer_start; /* Begin of allocation. */ + void *buffer_next; /* Next read position. */ + void *buffer_limit; /* End of buffered data. */ + void *buffer_end; /* End of allocation. */ + struct fuse_in_header *inh; /* Most recent request (support_fuse_next). */ + union /* Space for prepared responses. */ + { + struct fuse_attr_out attr; + struct fuse_entry_out entry; + struct + { + struct fuse_entry_out entry; + struct fuse_open_out open; + } create; + } prepared; + void *prepared_pointer; /* NULL if inactive. */ + size_t prepared_size; /* 0 if inactive. */ + + /* Used for preparing readdir responses. Already used-up area for + the current request is counted by prepared_size. */ + void *readdir_buffer; + size_t readdir_buffer_size; + + pthread_t handler; /* Thread handling requests. */ + uid_t uid; /* Cached value for the current process. */ + uid_t gid; /* Cached value for the current process. */ + int fd; /* FUSE file descriptor. */ + int connection; /* Entry under /sys/fs/fuse/connections. */ + bool filter_forget; /* Controls FUSE_FORGET event dropping. */ + _Atomic bool disconnected; +}; + +struct fuse_thread_wrapper_args +{ + struct support_fuse *f; + support_fuse_callback callback; + void *closure; +}; + +/* Set by support_fuse_init to indicate that support_fuse_mount may be + called. */ +static bool support_fuse_init_called; + +/* Allocate the read buffer in F with SIZE bytes capacity. Does not + free the previously allocated buffer. */ +static void support_fuse_allocate (struct support_fuse *f, size_t size) + __nonnull ((1)); + +/* Internal mkdtemp replacement */ +static char * support_fuse_mkdir (const char *prefix) __nonnull ((1)); + +/* Low-level allocation function for support_fuse_mount. Does not + perform the mount. */ +static struct support_fuse *support_fuse_open (void); + +/* Thread wrapper function for use with pthread_create. Uses struct + fuse_thread_wrapper_args. */ +static void *support_fuse_thread_wrapper (void *closure) __nonnull ((1)); + +/* Initial step before preparing a reply. SIZE must be the size of + the F->prepared member that is going to be used. */ +static void support_fuse_prepare_1 (struct support_fuse *f, size_t size); + +/* Similar to support_fuse_reply_error, but not check that ERROR is + not zero. */ +static void support_fuse_reply_error_1 (struct support_fuse *f, + uint32_t error) __nonnull ((1)); + +/* Path to the directory containing mount points. Initialized by an + ELF constructor. All mountpoints are collected there so that the + test wrapper can clean them up without keeping track of them + individually. */ +static char *support_fuse_mountpoints; + +/* PID of the process that should clean up the mount points in the ELF + destructor. */ +static pid_t support_fuse_cleanup_pid; + +static void +support_fuse_allocate (struct support_fuse *f, size_t size) +{ + f->buffer_start = xmalloc (size); + f->buffer_end = f->buffer_start + size; + f->buffer_limit = f->buffer_start; + f->buffer_next = f->buffer_limit; +} + +void +support_fuse_filter_forget (struct support_fuse *f, bool filter) +{ + f->filter_forget = filter; +} + +void * +support_fuse_cast_internal (struct fuse_in_header *p, uint32_t expected) +{ + if (expected != p->opcode + && !(expected == FUSE_READ && p->opcode == FUSE_READDIR)) + { + char *expected1 = support_fuse_opcode (expected); + char *actual = support_fuse_opcode (p->opcode); + FAIL_EXIT1 ("attempt to cast %s to %s", actual, expected1); + } + return p + 1; +} + +void * +support_fuse_cast_name_internal (struct fuse_in_header *p, uint32_t expected, + size_t skip, char **name) +{ + char *result = support_fuse_cast_internal (p, expected); + *name = result + skip; + return result; +} + +bool +support_fuse_dirstream_add (struct support_fuse_dirstream *d, + uint64_t d_ino, uint64_t d_off, + uint32_t d_type, const char *d_name) +{ + struct support_fuse *f = (struct support_fuse *) d; + size_t structlen = offsetof (struct fuse_dirent, name); + size_t namelen = strlen (d_name); /* No null termination. */ + size_t required_size = FUSE_DIRENT_ALIGN (structlen + namelen); + if (f->readdir_buffer_size - f->prepared_size < required_size) + return false; + struct fuse_dirent entry = + { + .ino = d_ino, + .off = d_off, + .type = d_type, + .namelen = namelen, + }; + memcpy (f->readdir_buffer + f->prepared_size, &entry, structlen); + /* Use strncpy to write padding and avoid passing uninitialized + bytes to the read system call. */ + strncpy (f->readdir_buffer + f->prepared_size + structlen, d_name, + required_size - structlen); + f->prepared_size += required_size; + return true; +} + +bool +support_fuse_handle_directory (struct support_fuse *f) +{ + TEST_VERIFY (f->inh != NULL); + switch (f->inh->opcode) + { + case FUSE_OPENDIR: + { + struct fuse_open_out out = + { + }; + support_fuse_reply (f, &out, sizeof (out)); + } + return true; + case FUSE_RELEASEDIR: + support_fuse_reply_empty (f); + return true; + case FUSE_GETATTR: + { + struct fuse_attr_out *out = support_fuse_prepare_attr (f); + out->attr.mode = S_IFDIR | 0700; + support_fuse_reply_prepared (f); + } + return true; + default: + return false; + } +} + +bool +support_fuse_handle_mountpoint (struct support_fuse *f) +{ + TEST_VERIFY (f->inh != NULL); + /* 1 is the root node. */ + if (f->inh->opcode == FUSE_GETATTR && f->inh->nodeid == 1) + return support_fuse_handle_directory (f); + return false; +} + +void +support_fuse_init (void) +{ + support_fuse_init_called = true; + + support_become_root (); + if (!support_enter_mount_namespace ()) + FAIL_UNSUPPORTED ("mount namespaces not supported"); +} + +void +support_fuse_init_no_namespace (void) +{ + support_fuse_init_called = true; +} + +static char * +support_fuse_mkdir (const char *prefix) +{ + /* Do not use mkdtemp to avoid interfering with its tests. */ + unsigned int counter = 1; + unsigned int pid = getpid (); + while (true) + { + char *path = xasprintf ("%s%u.%u/", prefix, pid, counter); + if (mkdir (path, 0700) == 0) + return path; + if (errno != EEXIST) + FAIL_EXIT1 ("mkdir (\"%s\"): %m", path); + free (path); + ++counter; + } +} + +struct support_fuse * +support_fuse_mount (support_fuse_callback callback, void *closure) +{ + TEST_VERIFY_EXIT (support_fuse_init_called); + + /* Request at least minor version 12 because it changed struct sizes. */ + enum { min_version = 12 }; + + struct support_fuse *f = support_fuse_open (); + char *mount_options + = xasprintf ("fd=%d,rootmode=040700,user_id=%u,group_id=%u", + f->fd, f->uid, f->gid); + if (mount ("fuse", f->mountpoint, "fuse.glibc", + MS_NOSUID|MS_NODEV, mount_options) + != 0) + FAIL_EXIT1 ("FUSE mount on %s: %m", f->mountpoint); + free (mount_options); + + /* Retry with an older FUSE version. */ + while (true) + { + struct fuse_in_header *inh = support_fuse_next (f); + struct fuse_init_in *init_in = support_fuse_cast (INIT, inh); + if (init_in->major < 7 + || (init_in->major == 7 && init_in->minor < min_version)) + FAIL_UNSUPPORTED ("kernel FUSE version is %u.%u, too old", + init_in->major, init_in->minor); + if (init_in->major > 7) + { + uint32_t major = 7; + support_fuse_reply (f, &major, sizeof (major)); + continue; + } + TEST_VERIFY (init_in->flags & FUSE_DONT_MASK); + struct fuse_init_out out = + { + .major = 7, + .minor = min_version, + /* Request that the kernel does not apply umask. */ + .flags = FUSE_DONT_MASK, + }; + support_fuse_reply (f, &out, sizeof (out)); + + { + struct fuse_thread_wrapper_args args = + { + .f = f, + .callback = callback, + .closure = closure, + }; + f->handler = xpthread_create (NULL, + support_fuse_thread_wrapper, &args); + struct stat64 st; + xstat64 (f->mountpoint, &st); + f->connection = minor (st.st_dev); + /* Got a reply from the thread, safe to deallocate args. */ + } + + return f; + } +} + +const char * +support_fuse_mountpoint (struct support_fuse *f) +{ + return f->mountpoint; +} + +void +support_fuse_no_reply (struct support_fuse *f) +{ + TEST_VERIFY (f->inh != NULL); + TEST_COMPARE (f->inh->opcode, FUSE_FORGET); + f->inh = NULL; +} + +char * +support_fuse_opcode (uint32_t op) +{ + const char *result; + switch (op) + { +#define X(n) case n: result = #n; break + X(FUSE_LOOKUP); + X(FUSE_FORGET); + X(FUSE_GETATTR); + X(FUSE_SETATTR); + X(FUSE_READLINK); + X(FUSE_SYMLINK); + X(FUSE_MKNOD); + X(FUSE_MKDIR); + X(FUSE_UNLINK); + X(FUSE_RMDIR); + X(FUSE_RENAME); + X(FUSE_LINK); + X(FUSE_OPEN); + X(FUSE_READ); + X(FUSE_WRITE); + X(FUSE_STATFS); + X(FUSE_RELEASE); + X(FUSE_FSYNC); + X(FUSE_SETXATTR); + X(FUSE_GETXATTR); + X(FUSE_LISTXATTR); + X(FUSE_REMOVEXATTR); + X(FUSE_FLUSH); + X(FUSE_INIT); + X(FUSE_OPENDIR); + X(FUSE_READDIR); + X(FUSE_RELEASEDIR); + X(FUSE_FSYNCDIR); + X(FUSE_GETLK); + X(FUSE_SETLK); + X(FUSE_SETLKW); + X(FUSE_ACCESS); + X(FUSE_CREATE); + X(FUSE_INTERRUPT); + X(FUSE_BMAP); + X(FUSE_DESTROY); + X(FUSE_IOCTL); + X(FUSE_POLL); + X(FUSE_NOTIFY_REPLY); + X(FUSE_BATCH_FORGET); + X(FUSE_FALLOCATE); + X(FUSE_READDIRPLUS); + X(FUSE_RENAME2); + X(FUSE_LSEEK); + X(FUSE_COPY_FILE_RANGE); + X(FUSE_SETUPMAPPING); + X(FUSE_REMOVEMAPPING); + X(FUSE_SYNCFS); + X(FUSE_TMPFILE); + X(FUSE_STATX); +#undef X + default: + return xasprintf ("FUSE_unknown_%u", op); + } + return xstrdup (result); +} + +static struct support_fuse * +support_fuse_open (void) +{ + struct support_fuse *result = xmalloc (sizeof (*result)); + result->mountpoint = support_fuse_mkdir (support_fuse_mountpoints); + result->inh = NULL; + result->prepared_pointer = NULL; + result->prepared_size = 0; + result->readdir_buffer = NULL; + result->readdir_buffer_size = 0; + result->uid = getuid (); + result->gid = getgid (); + result->fd = open ("/dev/fuse", O_RDWR, 0); + if (result->fd < 0) + { + if (errno == ENOENT || errno == ENODEV || errno == EPERM + || errno == EACCES) + FAIL_UNSUPPORTED ("cannot open /dev/fuse: %m"); + else + FAIL_EXIT1 ("cannot open /dev/fuse: %m"); + } + result->connection = -1; + result->filter_forget = true; + result->disconnected = false; + support_fuse_allocate (result, FUSE_MIN_READ_BUFFER); + return result; +} + +static void +support_fuse_prepare_1 (struct support_fuse *f, size_t size) +{ + TEST_VERIFY (f->prepared_pointer == NULL); + f->prepared_size = size; + memset (&f->prepared, 0, size); + f->prepared_pointer = &f->prepared; +} + +struct fuse_attr_out * +support_fuse_prepare_attr (struct support_fuse *f) +{ + support_fuse_prepare_1 (f, sizeof (f->prepared.attr)); + f->prepared.attr.attr.uid = f->uid; + f->prepared.attr.attr.gid = f->gid; + f->prepared.attr.attr.ino = f->inh->nodeid; + return &f->prepared.attr; +} + +void +support_fuse_prepare_create (struct support_fuse *f, + uint64_t nodeid, + struct fuse_entry_out **out_entry, + struct fuse_open_out **out_open) +{ + support_fuse_prepare_1 (f, sizeof (f->prepared.create)); + f->prepared.create.entry.nodeid = nodeid; + f->prepared.create.entry.attr.uid = f->uid; + f->prepared.create.entry.attr.gid = f->gid; + f->prepared.create.entry.attr.ino = nodeid; + *out_entry = &f->prepared.create.entry; + *out_open = &f->prepared.create.open; +} + +struct fuse_entry_out * +support_fuse_prepare_entry (struct support_fuse *f, uint64_t nodeid) +{ + support_fuse_prepare_1 (f, sizeof (f->prepared.entry)); + f->prepared.entry.nodeid = nodeid; + f->prepared.entry.attr.uid = f->uid; + f->prepared.entry.attr.gid = f->gid; + f->prepared.entry.attr.ino = nodeid; + return &f->prepared.entry; +} + +struct support_fuse_dirstream * +support_fuse_prepare_readdir (struct support_fuse *f) +{ + support_fuse_prepare_1 (f, 0); + struct fuse_read_in *p = support_fuse_cast (READ, f->inh); + if (p->size > f->readdir_buffer_size) + { + free (f->readdir_buffer); + f->readdir_buffer = xmalloc (p->size); + f->readdir_buffer_size = p->size; + } + f->prepared_pointer = f->readdir_buffer; + return (struct support_fuse_dirstream *) f; +} + +struct fuse_in_header * +support_fuse_next (struct support_fuse *f) +{ + TEST_VERIFY (f->inh == NULL); + while (true) + { + if (f->buffer_next < f->buffer_limit) + { + f->inh = f->buffer_next; + f->buffer_next = (void *) f->buffer_next + f->inh->len; + /* Suppress FUSE_FORGET responses if requested. */ + if (f->filter_forget && f->inh->opcode == FUSE_FORGET) + { + f->inh = NULL; + continue; + } + return f->inh; + } + ssize_t ret = read (f->fd, f->buffer_start, + f->buffer_end - f->buffer_start); + if (ret == 0) + FAIL_EXIT (1, "unexpected EOF on FUSE device"); + if (ret < 0 && errno == EINVAL) + { + /* Increase buffer size. */ + size_t new_size = 2 * (size_t) (f->buffer_end - f->buffer_start); + free (f->buffer_start); + support_fuse_allocate (f, new_size); + continue; + } + if (ret < 0) + { + if (f->disconnected) + /* Unmount detected. */ + return NULL; + FAIL_EXIT1 ("read error on FUSE device: %m"); + } + /* Read was successful, make [next, limit) the active buffer area. */ + f->buffer_next = f->buffer_start; + f->buffer_limit = (void *) f->buffer_start + ret; + } +} + +void +support_fuse_reply (struct support_fuse *f, + const void *payload, size_t payload_size) +{ + TEST_VERIFY_EXIT (f->inh != NULL); + TEST_VERIFY (f->prepared_pointer == NULL); + struct fuse_out_header outh = + { + .len = sizeof (outh) + payload_size, + .unique = f->inh->unique, + }; + struct iovec iov[] = + { + { &outh, sizeof (outh) }, + { (void *) payload, payload_size }, + }; + ssize_t ret = writev (f->fd, iov, array_length (iov)); + if (ret < 0) + { + if (!f->disconnected) + /* Some kernels produce write errors upon disconnect. */ + FAIL_EXIT1 ("FUSE write failed for %s response" + " (%zu bytes payload): %m", + support_fuse_opcode (f->inh->opcode), payload_size); + } + else if (ret != sizeof (outh) + payload_size) + FAIL_EXIT1 ("FUSE write short for %s response (%zu bytes payload):" + " %zd bytes", + support_fuse_opcode (f->inh->opcode), payload_size, ret); + f->inh = NULL; +} + +void +support_fuse_reply_empty (struct support_fuse *f) +{ + support_fuse_reply_error_1 (f, 0); +} + +static void +support_fuse_reply_error_1 (struct support_fuse *f, uint32_t error) +{ + TEST_VERIFY_EXIT (f->inh != NULL); + struct fuse_out_header outh = + { + .len = sizeof (outh), + .error = -error, + .unique = f->inh->unique, + }; + ssize_t ret = write (f->fd, &outh, sizeof (outh)); + if (ret < 0) + { + /* Some kernels produce write errors upon disconnect. */ + if (!f->disconnected) + FAIL_EXIT1 ("FUSE write failed for %s error response: %m", + support_fuse_opcode (f->inh->opcode)); + } + else if (ret != sizeof (outh)) + FAIL_EXIT1 ("FUSE write short for %s error response: %zd bytes", + support_fuse_opcode (f->inh->opcode), ret); + f->inh = NULL; + f->prepared_pointer = NULL; + f->prepared_size = 0; +} + +void +support_fuse_reply_error (struct support_fuse *f, uint32_t error) +{ + TEST_VERIFY (error > 0); + support_fuse_reply_error_1 (f, error); +} + +void +support_fuse_reply_prepared (struct support_fuse *f) +{ + TEST_VERIFY_EXIT (f->prepared_pointer != NULL); + /* Re-use the non-prepared reply function. It requires + f->prepared_* to be non-null, so reset the fields before the call. */ + void *prepared_pointer = f->prepared_pointer; + size_t prepared_size = f->prepared_size; + f->prepared_pointer = NULL; + f->prepared_size = 0; + support_fuse_reply (f, prepared_pointer, prepared_size); +} + +static void * +support_fuse_thread_wrapper (void *closure) +{ + struct fuse_thread_wrapper_args args + = *(struct fuse_thread_wrapper_args *) closure; + + /* Handle the initial stat call. */ + struct fuse_in_header *inh = support_fuse_next (args.f); + if (inh == NULL || !support_fuse_handle_mountpoint (args.f)) + { + support_fuse_reply_error (args.f, EIO); + return NULL; + } + + args.callback (args.f, args.closure); + return NULL; +} + +void +support_fuse_unmount (struct support_fuse *f) +{ + /* Signal the unmount to the handler thread. Some kernels report + not just ENODEV errors on read. */ + f->disconnected = true; + + { + char *path = xasprintf ("/sys/fs/fuse/connections/%d/abort", + f->connection); + /* Some kernels do not support these files under /sys. */ + int fd = open (path, O_RDWR | O_TRUNC); + if (fd >= 0) + { + TEST_COMPARE (write (fd, "1", 1), 1); + xclose (fd); + } + free (path); + } + if (umount (f->mountpoint) != 0) + FAIL ("FUSE: umount (\"%s\"): %m", f->mountpoint); + xpthread_join (f->handler); + if (rmdir (f->mountpoint) != 0) + FAIL ("FUSE: rmdir (\"%s\"): %m", f->mountpoint); + xclose (f->fd); + free (f->buffer_start); + free (f->mountpoint); + free (f->readdir_buffer); + free (f); +} + +static void __attribute__ ((constructor)) +init (void) +{ + /* The test_dir test driver variable is not yet set at this point. */ + const char *tmpdir = getenv ("TMPDIR"); + if (tmpdir == NULL || tmpdir[0] == '\0') + tmpdir = "/tmp"; + + char *prefix = xasprintf ("%s/glibc-tst-fuse.", tmpdir); + support_fuse_mountpoints = support_fuse_mkdir (prefix); + free (prefix); + support_fuse_cleanup_pid = getpid (); +} + +static void __attribute__ ((destructor)) +fini (void) +{ + if (support_fuse_cleanup_pid != getpid () + || support_fuse_mountpoints == NULL) + return; + DIR *dir = xopendir (support_fuse_mountpoints); + while (true) + { + struct dirent64 *e = readdir64 (dir); + if (e == NULL) + /* Ignore errors. */ + break; + if (*e->d_name == '.') + /* Skip "." and "..". No hidden files expected. */ + continue; + if (unlinkat (dirfd (dir), e->d_name, AT_REMOVEDIR) != 0) + break; + rewinddir (dir); + } + xclosedir (dir); + rmdir (support_fuse_mountpoints); + free (support_fuse_mountpoints); + support_fuse_mountpoints = NULL; +} diff --git a/support/support_open_and_compare_file_bytes.c b/support/support_open_and_compare_file_bytes.c new file mode 100644 index 0000000000..f804ed8e46 --- /dev/null +++ b/support/support_open_and_compare_file_bytes.c @@ -0,0 +1,33 @@ +/* Compare bytes from a file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/file_contents.h> +#include <support/xstdio.h> + +/* Check that a not-currently-open file has exactly the given + bytes. */ + +int +support_open_and_compare_file_bytes (const char *file, const char *contents, + size_t length) +{ + FILE *fp = xfopen (file, "r"); + int ret = support_compare_file_bytes (fp, contents, length); + xfclose (fp); + return ret; +} diff --git a/support/support_open_and_compare_file_string.c b/support/support_open_and_compare_file_string.c new file mode 100644 index 0000000000..2b596d4c88 --- /dev/null +++ b/support/support_open_and_compare_file_string.c @@ -0,0 +1,32 @@ +/* Compare string from a file. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <string.h> + +#include <support/file_contents.h> +#include <support/xstdio.h> + +/* Check that a not-currently-open file has exactly the given string + as contents, starting at the current offset. */ + +int +support_open_and_compare_file_string (const char *file, const char *contents) +{ + return support_open_and_compare_file_bytes (file, contents, + strlen (contents)); +} diff --git a/support/support_process_state.c b/support/support_process_state.c index 062335234f..ae8e0a531c 100644 --- a/support/support_process_state.c +++ b/support/support_process_state.c @@ -27,7 +27,7 @@ #include <support/xstdio.h> #include <support/check.h> -void +enum support_process_state support_process_state_wait (pid_t pid, enum support_process_state state) { #ifdef __linux__ @@ -75,7 +75,7 @@ support_process_state_wait (pid_t pid, enum support_process_state state) { free (line); xfclose (fstatus); - return; + return process_states[i].s; } rewind (fstatus); @@ -90,4 +90,6 @@ support_process_state_wait (pid_t pid, enum support_process_state state) /* Fallback to nanosleep if an invalid state is found. */ #endif nanosleep (&(struct timespec) { 1, 0 }, NULL); + + return support_process_state_invalid; } diff --git a/support/support_readdir.c b/support/support_readdir.c new file mode 100644 index 0000000000..10d808416f --- /dev/null +++ b/support/support_readdir.c @@ -0,0 +1,318 @@ +/* Type-generic wrapper for readdir functions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/readdir.h> + +#include <dlfcn.h> +#include <stddef.h> +#include <stdlib.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xdirent.h> + +/* Copied from <olddirent.h>. */ +struct __old_dirent64 + { + __ino_t d_ino; + __off64_t d_off; + unsigned short int d_reclen; + unsigned char d_type; + char d_name[256]; + }; + +static struct __old_dirent64 *(*readdir64_compat) (DIR *); +static int (*readdir64_r_compat) (DIR *, struct __old_dirent64 *, + struct __old_dirent64 **); + +static void __attribute__ ((constructor)) +init (void) +{ + /* These compat symbols exists on alpha, i386, m67k , powerpc, s390, + sparc. at the same GLIBC_2.1 version. */ + readdir64_compat = dlvsym (RTLD_DEFAULT, "readdir64", "GLIBC_2.1"); + readdir64_r_compat = dlvsym (RTLD_DEFAULT, "readdir64_r", "GLIBC_2.1"); +} + +enum support_readdir_op +support_readdir_op_last (void) +{ + if (readdir64_r_compat != NULL) + { + TEST_VERIFY (readdir64_compat != NULL); + return SUPPORT_READDIR64_R_COMPAT; + } + else + return SUPPORT_READDIR64_R; +} + +const char * +support_readdir_function (enum support_readdir_op op) +{ + switch (op) + { + case SUPPORT_READDIR: + return "readdir"; + case SUPPORT_READDIR64: + return "readdir64"; + case SUPPORT_READDIR_R: + return "readdir_r"; + case SUPPORT_READDIR64_R: + return "readdir64_r"; + case SUPPORT_READDIR64_COMPAT: + return "readdir64@GBLIC_2.1"; + case SUPPORT_READDIR64_R_COMPAT: + return "readdir64_r@GBLIC_2.1"; + } + FAIL_EXIT1 ("invalid support_readdir_op constant: %d", op); +} + +unsigned int +support_readdir_inode_width (enum support_readdir_op op) +{ + switch (op) + { + case SUPPORT_READDIR: + case SUPPORT_READDIR_R: + return sizeof ((struct dirent) { 0, }.d_ino) * 8; + case SUPPORT_READDIR64: + case SUPPORT_READDIR64_R: + return sizeof ((struct dirent64) { 0, }.d_ino) * 8; + case SUPPORT_READDIR64_COMPAT: + case SUPPORT_READDIR64_R_COMPAT: + return sizeof ((struct __old_dirent64) { 0, }.d_ino) * 8; + } + FAIL_EXIT1 ("invalid support_readdir_op constant: %d", op); +} + +unsigned int +support_readdir_offset_width (enum support_readdir_op op) +{ +#ifdef _DIRENT_HAVE_D_OFF + switch (op) + { + case SUPPORT_READDIR: + case SUPPORT_READDIR_R: + return sizeof ((struct dirent) { 0, }.d_off) * 8; + case SUPPORT_READDIR64: + case SUPPORT_READDIR64_R: + return sizeof ((struct dirent64) { 0, }.d_off) * 8; + case SUPPORT_READDIR64_COMPAT: + case SUPPORT_READDIR64_R_COMPAT: + return sizeof ((struct __old_dirent64) { 0, }.d_off) * 8; + } +#else + switch (op) + { + case SUPPORT_READDIR: + case SUPPORT_READDIR_R: + case SUPPORT_READDIR64: + case SUPPORT_READDIR64_R: + case SUPPORT_READDIR64_COMPAT: + case SUPPORT_READDIR64_R_COMPAT: + return 0; + } +#endif + FAIL_EXIT1 ("invalid support_readdir_op constant: %d", op); +} + +bool +support_readdir_r_variant (enum support_readdir_op op) +{ + switch (op) + { + case SUPPORT_READDIR: + case SUPPORT_READDIR64: + case SUPPORT_READDIR64_COMPAT: + return false; + case SUPPORT_READDIR_R: + case SUPPORT_READDIR64_R: + case SUPPORT_READDIR64_R_COMPAT: + return true; + } + FAIL_EXIT1 ("invalid support_readdir_op constant: %d", op); +} + +static bool +copy_dirent (struct support_dirent *dst, struct dirent *src) +{ + if (src == NULL) + return false; + dst->d_ino = src->d_ino; +#ifdef _DIRENT_HAVE_D_OFF + dst->d_off = src->d_off; +#else + dst->d_off = 0; +#endif + dst->d_type = src->d_type; + dst->d_name = xstrdup (src->d_name); + return true; +} + +static bool +copy_dirent64 (struct support_dirent *dst, struct dirent64 *src) +{ + if (src == NULL) + return false; + dst->d_ino = src->d_ino; +#ifdef _DIRENT_HAVE_D_OFF + dst->d_off = src->d_off; +#else + dst->d_off = 0; +#endif + dst->d_type = src->d_type; + dst->d_name = xstrdup (src->d_name); + return true; +} + +static bool +copy_old_dirent64 (struct support_dirent *dst, struct __old_dirent64 *src) +{ + if (src == NULL) + return false; + dst->d_ino = src->d_ino; +#ifdef _DIRENT_HAVE_D_OFF + dst->d_off = src->d_off; +#else + dst->d_off = 0; +#endif + dst->d_type = src->d_type; + dst->d_name = xstrdup (src->d_name); + return true; +} + +bool +support_readdir (DIR *stream, enum support_readdir_op op, + struct support_dirent *e) +{ + free (e->d_name); + e->d_name = NULL; + switch (op) + { + case SUPPORT_READDIR: + return copy_dirent (e, xreaddir (stream)); + case SUPPORT_READDIR64: + return copy_dirent64 (e, xreaddir64 (stream)); + + /* The functions readdir_r, readdir64_r were deprecated in glibc 2.24. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations"); + + case SUPPORT_READDIR_R: + { + struct dirent buf; + if (!xreaddir_r (stream, &buf)) + return false; + return copy_dirent (e, &buf); + } + case SUPPORT_READDIR64_R: + { + struct dirent64 buf; + if (!xreaddir64_r (stream, &buf)) + return false; + return copy_dirent64 (e, &buf); + } + + DIAG_POP_NEEDS_COMMENT; + + case SUPPORT_READDIR64_COMPAT: + if (readdir64_compat == NULL) + FAIL_EXIT1 ("readdir64 compat function not implemented"); + return copy_old_dirent64 (e, readdir64_compat (stream)); + + case SUPPORT_READDIR64_R_COMPAT: + { + if (readdir64_r_compat == NULL) + FAIL_EXIT1 ("readdir64_r compat function not implemented"); + struct __old_dirent64 buf; + struct __old_dirent64 *e1; + int ret = readdir64_r_compat (stream, &buf, &e1); + if (ret != 0) + { + errno = ret; + FAIL ("readdir64_r@GLIBC_2.1: %m"); + return false; + } + if (e1 == NULL) + return false; + return copy_old_dirent64 (e, e1); + } + } + FAIL_EXIT1 ("support_readdir: invalid op argument %d", (int) op); +} + +void +support_readdir_expect_error (DIR *stream, enum support_readdir_op op, + int expected) +{ + switch (op) + { + case SUPPORT_READDIR: + errno = 0; + TEST_VERIFY (readdir (stream) == NULL); + TEST_COMPARE (errno, expected); + return; + case SUPPORT_READDIR64: + errno = 0; + TEST_VERIFY (readdir64 (stream) == NULL); + TEST_COMPARE (errno, expected); + return; + + /* The functions readdir_r, readdir64_r were deprecated in glibc 2.24. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations"); + + case SUPPORT_READDIR_R: + { + struct dirent buf; + struct dirent *e; + errno = readdir_r (stream, &buf, &e); + TEST_COMPARE (errno, expected);; + } + return; + case SUPPORT_READDIR64_R: + { + struct dirent64 buf; + struct dirent64 *e; + errno = readdir64_r (stream, &buf, &e); + TEST_COMPARE (errno, expected);; + } + return; + + DIAG_POP_NEEDS_COMMENT; + + case SUPPORT_READDIR64_COMPAT: + if (readdir64_compat == NULL) + FAIL_EXIT1 ("readdir64_r compat function not implemented"); + errno = 0; + TEST_VERIFY (readdir64_compat (stream) == NULL); + TEST_COMPARE (errno, expected); + return; + case SUPPORT_READDIR64_R_COMPAT: + { + if (readdir64_r_compat == NULL) + FAIL_EXIT1 ("readdir64_r compat function not implemented"); + struct __old_dirent64 buf; + struct __old_dirent64 *e; + errno = readdir64_r_compat (stream, &buf, &e); + TEST_COMPARE (errno, expected); + } + return; + } + FAIL_EXIT1 ("support_readdir_expect_error: invalid op argument %d", + (int) op); +} diff --git a/support/support_readdir_check.c b/support/support_readdir_check.c new file mode 100644 index 0000000000..5687004276 --- /dev/null +++ b/support/support_readdir_check.c @@ -0,0 +1,30 @@ +/* Error-checking helper for xreaddir, xreaddir64. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <support/check.h> + +void * +support_readdir_check (const char *name, void *result, int saved_errno) +{ + if (result == NULL && errno != 0) + FAIL_EXIT1 ("%s: %m", name); + errno = saved_errno; + return result; +} diff --git a/support/support_readdir_r_check.c b/support/support_readdir_r_check.c new file mode 100644 index 0000000000..6bbb0d0b32 --- /dev/null +++ b/support/support_readdir_r_check.c @@ -0,0 +1,35 @@ +/* Error-checking helper for xreaddir_r, xreaddir64_r. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <support/check.h> + +int +support_readdir_r_check (const char *name, int result, void *buf, void *ptr) +{ + if (result != 0) + { + errno = result; + FAIL_EXIT1 ("%s: %m", name); + } + if (buf != ptr) + FAIL_EXIT1 ("%s: buffer pointer and returned pointer differ: %p != %p", + name, buf, ptr); + return result; +} diff --git a/support/tst-support-process_state.c b/support/tst-support-process_state.c index d73269320f..4a88eae3a7 100644 --- a/support/tst-support-process_state.c +++ b/support/tst-support-process_state.c @@ -68,28 +68,39 @@ do_test (void) if (test_verbose) printf ("info: waiting pid %d, state_stopped/state_tracing_stop\n", (int) pid); - support_process_state_wait (pid, stop_state); + { + enum support_process_state state = + support_process_state_wait (pid, stop_state); + TEST_VERIFY (state == support_process_state_stopped + || state == support_process_state_tracing_stop); + } if (kill (pid, SIGCONT) != 0) FAIL_RET ("kill (%d, SIGCONT): %m\n", pid); if (test_verbose) printf ("info: waiting pid %d, state_sleeping\n", (int) pid); - support_process_state_wait (pid, support_process_state_sleeping); + TEST_COMPARE (support_process_state_wait (pid, + support_process_state_sleeping), + support_process_state_sleeping); if (kill (pid, SIGUSR1) != 0) FAIL_RET ("kill (%d, SIGUSR1): %m\n", pid); if (test_verbose) printf ("info: waiting pid %d, state_running\n", (int) pid); - support_process_state_wait (pid, support_process_state_running); + TEST_COMPARE (support_process_state_wait (pid, + support_process_state_running), + support_process_state_running); if (kill (pid, SIGKILL) != 0) FAIL_RET ("kill (%d, SIGKILL): %m\n", pid); if (test_verbose) printf ("info: waiting pid %d, state_zombie\n", (int) pid); - support_process_state_wait (pid, support_process_state_zombie); + TEST_COMPARE (support_process_state_wait (pid, + support_process_state_zombie), + support_process_state_zombie);; siginfo_t info; int r = waitid (P_PID, pid, &info, WEXITED); diff --git a/support/tst-support_fuse.c b/support/tst-support_fuse.c new file mode 100644 index 0000000000..9ee637cbab --- /dev/null +++ b/support/tst-support_fuse.c @@ -0,0 +1,349 @@ +/* Facilities for FUSE-backed file system tests. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/fuse.h> + +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <string.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xdirent.h> +#include <support/xunistd.h> + +static void +fuse_thread (struct support_fuse *f, void *closure) +{ + /* Turn on returning FUSE_FORGET responses. */ + support_fuse_filter_forget (f, false); + + /* Inode and nodeid for "file" and "new". */ + enum { NODE_FILE = 2, NODE_NEW, NODE_SUBDIR, NODE_SYMLINK }; + struct fuse_in_header *inh; + while ((inh = support_fuse_next (f)) != NULL) + { + { + char *opcode = support_fuse_opcode (inh->opcode); + printf ("info: (T) event %s(%llu) len=%u nodeid=%llu\n", + opcode, (unsigned long long int) inh->unique, inh->len, + (unsigned long long int) inh->nodeid); + free (opcode); + } + + /* Handle mountpoint and basic directory operation for the root (1). */ + if (support_fuse_handle_mountpoint (f) + || (inh->nodeid == 1 && support_fuse_handle_directory (f))) + continue; + + switch (inh->opcode) + { + case FUSE_READDIR: + /* Implementation of getdents64. */ + if (inh->nodeid == 1) + { + struct support_fuse_dirstream *d + = support_fuse_prepare_readdir (f); + TEST_COMPARE (support_fuse_cast (READ, inh)->offset, 0); + TEST_VERIFY (support_fuse_dirstream_add (d, 1, 1, DT_DIR, ".")); + TEST_VERIFY (support_fuse_dirstream_add (d, 1, 2, DT_DIR, "..")); + TEST_VERIFY (support_fuse_dirstream_add (d, NODE_FILE, 3, DT_REG, + "file")); + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + break; + case FUSE_LOOKUP: + /* Part of the implementation of open. */ + { + char *name = support_fuse_cast (LOOKUP, inh); + printf (" name: %s\n", name); + if (inh->nodeid == 1 && strcmp (name, "file") == 0) + { + struct fuse_entry_out *out + = support_fuse_prepare_entry (f, NODE_FILE); + out->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } + else if (inh->nodeid == 1 && strcmp (name, "symlink") == 0) + { + struct fuse_entry_out *out + = support_fuse_prepare_entry (f, NODE_SYMLINK); + out->attr.mode = S_IFLNK | 0777; + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, ENOENT); + } + break; + case FUSE_OPEN: + /* Implementation of open. */ + { + struct fuse_open_in *p = support_fuse_cast (OPEN, inh); + if (inh->nodeid == NODE_FILE) + { + TEST_VERIFY (!(p->flags & O_EXCL)); + struct fuse_open_out out = { 0, }; + support_fuse_reply (f, &out, sizeof (out)); + } + else + support_fuse_reply_error (f, ENOENT); + } + break; + case FUSE_GETATTR: + /* Happens after open. */ + if (inh->nodeid == NODE_FILE) + { + struct fuse_attr_out *out = support_fuse_prepare_attr (f); + out->attr.mode = S_IFREG | 0600; + out->attr.size = strlen ("Hello, world!"); + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, ENOENT); + break; + case FUSE_READ: + /* Implementation of read. */ + if (inh->nodeid == NODE_FILE) + { + struct fuse_read_in *p = support_fuse_cast (READ, inh); + TEST_COMPARE (p->offset, 0); + TEST_VERIFY (p->size >= strlen ("Hello, world!")); + support_fuse_reply (f, + "Hello, world!", strlen ("Hello, world!")); + } + else + support_fuse_reply_error (f, EIO); + break; + case FUSE_FLUSH: + /* Sent in response to close. */ + support_fuse_reply_empty (f); + break; + case FUSE_GETXATTR: + /* This happens as part of a open-for-write operation. + Signal no support for extended attributes. */ + support_fuse_reply_error (f, ENOSYS); + break; + case FUSE_SETATTR: + /* This happens as part of a open-for-write operation to + implement O_TRUNC. */ + if (inh->nodeid == NODE_FILE) + { + struct fuse_setattr_in *p = support_fuse_cast (SETATTR, inh); + /* FATTR_LOCKOWNER may also be set. */ + TEST_COMPARE ((p->valid) & ~ FATTR_LOCKOWNER, FATTR_SIZE); + TEST_COMPARE (p->size, 0); + struct fuse_attr_out *out = support_fuse_prepare_attr (f); + out->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + break; + case FUSE_WRITE: + /* Implementation of write. */ + if (inh->nodeid == NODE_FILE) + { + struct fuse_write_in *p = support_fuse_cast (WRITE, inh); + TEST_COMPARE (p->offset, 0); + /* Write payload follows after struct fuse_write_in. */ + TEST_COMPARE_BLOB (p + 1, p->size, + "Good day to you too.", + strlen ("Good day to you too.")); + struct fuse_write_out out = + { + .size = p->size, + }; + support_fuse_reply (f, &out, sizeof (out)); + } + else + support_fuse_reply_error (f, EIO); + break; + case FUSE_CREATE: + /* Implementation of O_CREAT. */ + if (inh->nodeid == 1) + { + char *name; + struct fuse_create_in *p + = support_fuse_cast_name (CREATE, inh, &name); + TEST_VERIFY (S_ISREG (p->mode)); + TEST_COMPARE (p->mode & 07777, 0600); + TEST_COMPARE_STRING (name, "new"); + struct fuse_entry_out *out_entry; + struct fuse_open_out *out_open; + support_fuse_prepare_create (f, NODE_NEW, &out_entry, &out_open); + out_entry->attr.mode = S_IFREG | 0600; + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + break; + case FUSE_MKDIR: + /* Implementation of mkdir. */ + { + if (inh->nodeid == 1) + { + char *name; + struct fuse_mkdir_in *p + = support_fuse_cast_name (MKDIR, inh, &name); + TEST_COMPARE (p->mode, 01234); + TEST_COMPARE_STRING (name, "subdir"); + struct fuse_entry_out *out + = support_fuse_prepare_entry (f, NODE_SUBDIR); + out->attr.mode = S_IFDIR | p->mode; + support_fuse_reply_prepared (f); + } + else + support_fuse_reply_error (f, EIO); + } + break; + case FUSE_READLINK: + /* Implementation of readlink. */ + TEST_COMPARE (inh->nodeid, NODE_SYMLINK); + if (inh->nodeid == NODE_SYMLINK) + support_fuse_reply (f, "target-of-symbolic-link", + strlen ("target-of-symbolic-link")); + else + support_fuse_reply_error (f, EINVAL); + break; + case FUSE_FORGET: + support_fuse_no_reply (f); + break; + default: + support_fuse_reply_error (f, EIO); + } + } +} + +static int +do_test (void) +{ + support_fuse_init (); + + struct support_fuse *f = support_fuse_mount (fuse_thread, NULL); + + printf ("info: Attributes of mountpoint/root directory %s\n", + support_fuse_mountpoint (f)); + { + struct statx st; + xstatx (AT_FDCWD, support_fuse_mountpoint (f), 0, STATX_BASIC_STATS, &st); + TEST_COMPARE (st.stx_uid, getuid ()); + TEST_COMPARE (st.stx_gid, getgid ()); + TEST_VERIFY (S_ISDIR (st.stx_mode)); + TEST_COMPARE (st.stx_mode & 07777, 0700); + } + + printf ("info: List directory %s\n", support_fuse_mountpoint (f)); + { + DIR *dir = xopendir (support_fuse_mountpoint (f)); + + struct dirent *e = xreaddir (dir); + TEST_COMPARE (e->d_ino, 1); +#ifdef _DIRENT_HAVE_D_OFF + TEST_COMPARE (e->d_off, 1); +#endif + TEST_COMPARE (e->d_type, DT_DIR); + TEST_COMPARE_STRING (e->d_name, "."); + + e = xreaddir (dir); + TEST_COMPARE (e->d_ino, 1); +#ifdef _DIRENT_HAVE_D_OFF + TEST_COMPARE (e->d_off, 2); +#endif + TEST_COMPARE (e->d_type, DT_DIR); + TEST_COMPARE_STRING (e->d_name, ".."); + + e = xreaddir (dir); + TEST_COMPARE (e->d_ino, 2); +#ifdef _DIRENT_HAVE_D_OFF + TEST_COMPARE (e->d_off, 3); +#endif + TEST_COMPARE (e->d_type, DT_REG); + TEST_COMPARE_STRING (e->d_name, "file"); + + TEST_COMPARE (closedir (dir), 0); + } + + char *file_path = xasprintf ("%s/file", support_fuse_mountpoint (f)); + + printf ("info: Attributes of file %s\n", file_path); + { + struct statx st; + xstatx (AT_FDCWD, file_path, 0, STATX_BASIC_STATS, &st); + TEST_COMPARE (st.stx_uid, getuid ()); + TEST_COMPARE (st.stx_gid, getgid ()); + TEST_VERIFY (S_ISREG (st.stx_mode)); + TEST_COMPARE (st.stx_mode & 07777, 0600); + TEST_COMPARE (st.stx_size, strlen ("Hello, world!")); + } + + printf ("info: Read from %s\n", file_path); + { + int fd = xopen (file_path, O_RDONLY, 0); + char buf[64]; + ssize_t len = read (fd, buf, sizeof (buf)); + if (len < 0) + FAIL_EXIT1 ("read: %m"); + TEST_COMPARE_BLOB (buf, len, "Hello, world!", strlen ("Hello, world!")); + xclose (fd); + } + + printf ("info: Write to %s\n", file_path); + { + int fd = xopen (file_path, O_WRONLY | O_TRUNC, 0); + xwrite (fd, "Good day to you too.", strlen ("Good day to you too.")); + xclose (fd); + } + + printf ("info: Attempt O_EXCL creation of existing %s\n", file_path); + /* O_EXCL creation shall fail. */ + errno = 0; + TEST_COMPARE (open64 (file_path, O_RDWR | O_EXCL | O_CREAT, 0600), -1); + TEST_COMPARE (errno, EEXIST); + + free (file_path); + + { + char *new_path = xasprintf ("%s/new", support_fuse_mountpoint (f)); + printf ("info: Test successful O_EXCL creation at %s\n", new_path); + int fd = xopen (new_path, O_RDWR | O_EXCL | O_CREAT, 0600); + xclose (fd); + free (new_path); + } + + { + char *subdir_path = xasprintf ("%s/subdir", support_fuse_mountpoint (f)); + xmkdir (subdir_path, 01234); + free (subdir_path); + } + + { + char *symlink_path = xasprintf ("%s/symlink", support_fuse_mountpoint (f)); + char *target = xreadlink (symlink_path); + TEST_COMPARE_STRING (target, "target-of-symbolic-link"); + free (target); + free (symlink_path); + } + + support_fuse_unmount (f); + return 0; +} + +#include <support/test-driver.c> diff --git a/support/tst-support_readdir.c b/support/tst-support_readdir.c new file mode 100644 index 0000000000..66be94fa80 --- /dev/null +++ b/support/tst-support_readdir.c @@ -0,0 +1,73 @@ +/* Test the support_readdir function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/readdir.h> + +#include <fcntl.h> +#include <stdlib.h> +#include <string.h> +#include <support/check.h> +#include <support/xdirent.h> +#include <support/xunistd.h> + +static int +do_test (void) +{ + DIR *reference_stream = xopendir ("."); + struct dirent64 *reference = xreaddir64 (reference_stream); + + for (enum support_readdir_op op = 0; op <= support_readdir_op_last (); ++op) + { + DIR *stream = xopendir ("."); + struct support_dirent e; + memset (&e, 0xcc, sizeof (e)); + e.d_name = NULL; + TEST_VERIFY (support_readdir (stream, op, &e)); + TEST_COMPARE (e.d_ino, reference->d_ino); +#ifdef _DIRENT_HAVE_D_OFF + TEST_VERIFY (support_readdir_offset_width (op) != 0); + TEST_COMPARE (e.d_off, reference->d_off); +#else + TEST_COMPARE (support_readdir_offset_width (op), 0); + TEST_COMPARE (e.d_off, 0); +#endif + TEST_COMPARE (e.d_type, reference->d_type); + TEST_COMPARE_STRING (e.d_name, reference->d_name); + free (e.d_name); + xclosedir (stream); + } + + xclosedir (reference_stream); + + /* Error injection test. */ + int devnull = xopen ("/dev/null", O_RDONLY, 0); + for (enum support_readdir_op op = 0; op <= support_readdir_op_last (); ++op) + { + DIR *stream = xopendir ("."); + /* A descriptor incompatible with readdir. */ + xdup2 (devnull, dirfd (stream)); + errno = -1; + support_readdir_expect_error (stream, op, ENOTDIR); + xclosedir (stream); + } + xclose (devnull); + + return 0; +} + +#include <support/test-driver.c> diff --git a/support/tst-xdirent.c b/support/tst-xdirent.c new file mode 100644 index 0000000000..642483165a --- /dev/null +++ b/support/tst-xdirent.c @@ -0,0 +1,76 @@ +/* Compile test for error-checking wrappers for <dirent.h> + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <libc-diag.h> +#include <support/check.h> +#include <unistd.h> + +static int +do_test (void) +{ + { + DIR *d = xopendir ("."); + struct dirent *e = xreaddir (d); + /* Assume that the "." special entry always comes first. */ + TEST_COMPARE_STRING (e->d_name, "."); + while (xreaddir (d) != NULL) + ; + xclosedir (d); + } + + { + DIR *d = xopendir ("."); + struct dirent64 *e = xreaddir64 (d); + TEST_COMPARE_STRING (e->d_name, "."); + while (xreaddir64 (d) != NULL) + ; + xclosedir (d); + } + + /* The functions readdir_r, readdir64_r were deprecated in glibc 2.24. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations"); + + { + DIR *d = xopendir ("."); + struct dirent buf = { 0, }; + TEST_VERIFY (xreaddir_r (d, &buf)); + TEST_COMPARE_STRING (buf.d_name, "."); + while (xreaddir_r (d, &buf)) + ; + xclosedir (d); + } + + { + DIR *d = xopendir ("."); + struct dirent64 buf = { 0, }; + TEST_VERIFY (xreaddir64_r (d, &buf)); + TEST_COMPARE_STRING (buf.d_name, "."); + while (xreaddir64_r (d, &buf)) + ; + xclosedir (d); + } + + DIAG_POP_NEEDS_COMMENT; + + return 0; +} + +#include <support/test-driver.c> diff --git a/support/xclosedir.c b/support/xclosedir.c new file mode 100644 index 0000000000..b490df5598 --- /dev/null +++ b/support/xclosedir.c @@ -0,0 +1,28 @@ +/* Error-checking wrapper for closedir. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <support/check.h> + +void +xclosedir (DIR *dir) +{ + if (closedir (dir) != 0) + FAIL_EXIT1 ("closedir: %m"); +} diff --git a/support/xdirent.h b/support/xdirent.h new file mode 100644 index 0000000000..8465d70ec1 --- /dev/null +++ b/support/xdirent.h @@ -0,0 +1,86 @@ +/* Error-checking wrappers for <dirent.h> + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef SUPPORT_XDIRENT_H +#define SUPPORT_XDIRENT_H + +#include <dirent.h> +#include <errno.h> +#include <libc-diag.h> +#include <stdbool.h> +#include <stddef.h> + +__BEGIN_DECLS + +DIR *xopendir (const char *path); +DIR *xfdopendir (int fd); +void xclosedir (DIR *); + +void *support_readdir_check (const char *, void *, int); + +static __attribute__ ((unused)) struct dirent * +xreaddir (DIR *stream) +{ + int saved_errno = errno; + errno = 0; + struct dirent *result = readdir (stream); + return support_readdir_check ("readdir", result, saved_errno); +} + +static __attribute__ ((unused)) struct dirent64 * +xreaddir64 (DIR *stream) +{ + int saved_errno = errno; + errno = 0; + struct dirent64 *result = readdir64 (stream); + return support_readdir_check ("readdir64", result, saved_errno); +} + +/* The functions readdir_r, readdir64_r were deprecated in glibc 2.24. */ +DIAG_PUSH_NEEDS_COMMENT; +DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations"); + +int support_readdir_r_check (const char *, int, void *, void *); + +static __attribute__ ((unused)) bool +xreaddir_r (DIR *stream, struct dirent *buf) +{ + struct dirent *ptr; + int ret = readdir_r (stream, buf, &ptr); + if (ret == 0 && ptr == NULL) + return false; + support_readdir_r_check ("readdir_r", ret, buf, ptr); + return true; +} + +static __attribute__ ((unused)) bool +xreaddir64_r (DIR *stream, struct dirent64 *buf) +{ + struct dirent64 *ptr; + int ret = readdir64_r (stream, buf, &ptr); + if (ret == 0 && ptr == NULL) + return false; + support_readdir_r_check ("readdir64_r", ret, buf, ptr); + return true; +} + +DIAG_POP_NEEDS_COMMENT; + +__END_DECLS + +#endif /* SUPPORT_XDIRENT_H */ diff --git a/support/xfdopendir.c b/support/xfdopendir.c new file mode 100644 index 0000000000..d881d28c73 --- /dev/null +++ b/support/xfdopendir.c @@ -0,0 +1,30 @@ +/* Error-checking wrapper for fdopendir. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <support/check.h> + +DIR * +xfdopendir (int fd) +{ + DIR *result = fdopendir (fd); + if (result == NULL) + FAIL_EXIT1 ("fdopendir (%d): %m", fd); + return result; +} diff --git a/support/xopendir.c b/support/xopendir.c new file mode 100644 index 0000000000..e4aee07fee --- /dev/null +++ b/support/xopendir.c @@ -0,0 +1,30 @@ +/* Error-checking wrapper for opendir. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xdirent.h> + +#include <support/check.h> + +DIR * +xopendir (const char *path) +{ + DIR *result = opendir (path); + if (result == NULL) + FAIL_EXIT1 ("opendir (\"%s\"): %m", path); + return result; +} diff --git a/sysdeps/aarch64/fpu/Makefile b/sysdeps/aarch64/fpu/Makefile index 234a6c457c..be8541f649 100644 --- a/sysdeps/aarch64/fpu/Makefile +++ b/sysdeps/aarch64/fpu/Makefile @@ -41,8 +41,6 @@ libmvec-support = $(addsuffix f_advsimd,$(float-advsimd-funcs)) \ v_log10_data \ erf_data \ erff_data \ - sv_erf_data \ - sv_erff_data \ v_exp_tail_data \ erfc_data \ erfcf_data \ diff --git a/sysdeps/aarch64/fpu/Versions b/sysdeps/aarch64/fpu/Versions index cc15ce2d1e..015211f5f4 100644 --- a/sysdeps/aarch64/fpu/Versions +++ b/sysdeps/aarch64/fpu/Versions @@ -135,4 +135,11 @@ libmvec { _ZGVsMxv_tanh; _ZGVsMxv_tanhf; } + GLIBC_2.41 { + _ZGVnN2v_logp1; + _ZGVnN2v_logp1f; + _ZGVnN4v_logp1f; + _ZGVsMxv_logp1; + _ZGVsMxv_logp1f; + } } diff --git a/sysdeps/aarch64/fpu/acoshf_advsimd.c b/sysdeps/aarch64/fpu/acoshf_advsimd.c index 8916dcbf40..004474acf9 100644 --- a/sysdeps/aarch64/fpu/acoshf_advsimd.c +++ b/sysdeps/aarch64/fpu/acoshf_advsimd.c @@ -25,35 +25,32 @@ const static struct data { struct v_log1pf_data log1pf_consts; uint32x4_t one; - uint16x4_t thresh; -} data = { - .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE, - .one = V4 (0x3f800000), - .thresh = V4 (0x2000) /* top(asuint(SquareLim) - asuint(1)). */ -}; +} data = { .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE, .one = V4 (0x3f800000) }; + +#define Thresh vdup_n_u16 (0x2000) /* top(asuint(SquareLim) - asuint(1)). */ static float32x4_t NOINLINE VPCS_ATTR special_case (float32x4_t x, float32x4_t y, uint16x4_t special, - const struct v_log1pf_data d) + const struct v_log1pf_data *d) { return v_call_f32 (acoshf, x, log1pf_inline (y, d), vmovl_u16 (special)); } /* Vector approximation for single-precision acosh, based on log1p. Maximum error depends on WANT_SIMD_EXCEPT. With SIMD fp exceptions enabled, it - is 2.78 ULP: - __v_acoshf(0x1.07887p+0) got 0x1.ef9e9cp-3 - want 0x1.ef9ea2p-3. + is 3.00 ULP: + _ZGVnN4v_acoshf(0x1.01df3ap+0) got 0x1.ef0a82p-4 + want 0x1.ef0a7cp-4. With exceptions disabled, we can compute u with a shorter dependency chain, - which gives maximum error of 3.07 ULP: - __v_acoshf(0x1.01f83ep+0) got 0x1.fbc7fap-4 - want 0x1.fbc7f4p-4. */ + which gives maximum error of 3.22 ULP: + _ZGVnN4v_acoshf(0x1.007ef2p+0) got 0x1.fdcdccp-5 + want 0x1.fdcdd2p-5. */ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x) { const struct data *d = ptr_barrier (&data); uint32x4_t ix = vreinterpretq_u32_f32 (x); - uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), d->thresh); + uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), Thresh); #if WANT_SIMD_EXCEPT /* Mask special lanes with 1 to side-step spurious invalid or overflow. Use @@ -64,15 +61,16 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x) float32x4_t xm1 = v_zerofy_f32 (vsubq_f32 (x, v_f32 (1)), p); float32x4_t u = vfmaq_f32 (vaddq_f32 (xm1, xm1), xm1, xm1); #else - float32x4_t xm1 = vsubq_f32 (x, v_f32 (1)); - float32x4_t u = vmulq_f32 (xm1, vaddq_f32 (x, v_f32 (1.0f))); + float32x4_t xm1 = vsubq_f32 (x, vreinterpretq_f32_u32 (d->one)); + float32x4_t u + = vmulq_f32 (xm1, vaddq_f32 (x, vreinterpretq_f32_u32 (d->one))); #endif float32x4_t y = vaddq_f32 (xm1, vsqrtq_f32 (u)); if (__glibc_unlikely (v_any_u16h (special))) - return special_case (x, y, special, d->log1pf_consts); - return log1pf_inline (y, d->log1pf_consts); + return special_case (x, y, special, &d->log1pf_consts); + return log1pf_inline (y, &d->log1pf_consts); } libmvec_hidden_def (V_NAME_F1 (acosh)) HALF_WIDTH_ALIAS_F1 (acosh) diff --git a/sysdeps/aarch64/fpu/advsimd_f32_protos.h b/sysdeps/aarch64/fpu/advsimd_f32_protos.h index 097d403ffe..5909bb4ce9 100644 --- a/sysdeps/aarch64/fpu/advsimd_f32_protos.h +++ b/sysdeps/aarch64/fpu/advsimd_f32_protos.h @@ -36,6 +36,7 @@ libmvec_hidden_proto (V_NAME_F2(hypot)); libmvec_hidden_proto (V_NAME_F1(log10)); libmvec_hidden_proto (V_NAME_F1(log1p)); libmvec_hidden_proto (V_NAME_F1(log2)); +libmvec_hidden_proto (V_NAME_F1(logp1)); libmvec_hidden_proto (V_NAME_F1(log)); libmvec_hidden_proto (V_NAME_F2(pow)); libmvec_hidden_proto (V_NAME_F1(sin)); diff --git a/sysdeps/aarch64/fpu/asinhf_advsimd.c b/sysdeps/aarch64/fpu/asinhf_advsimd.c index 09fd8a6143..eb789b91b6 100644 --- a/sysdeps/aarch64/fpu/asinhf_advsimd.c +++ b/sysdeps/aarch64/fpu/asinhf_advsimd.c @@ -20,16 +20,16 @@ #include "v_math.h" #include "v_log1pf_inline.h" -#define SignMask v_u32 (0x80000000) - const static struct data { struct v_log1pf_data log1pf_consts; + float32x4_t one; uint32x4_t big_bound; #if WANT_SIMD_EXCEPT uint32x4_t tiny_bound; #endif } data = { + .one = V4 (1), .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE, .big_bound = V4 (0x5f800000), /* asuint(0x1p64). */ #if WANT_SIMD_EXCEPT @@ -38,20 +38,27 @@ const static struct data }; static float32x4_t NOINLINE VPCS_ATTR -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, uint32x4_t sign, float32x4_t y, + uint32x4_t special, const struct data *d) { - return v_call_f32 (asinhf, x, y, special); + return v_call_f32 ( + asinhf, x, + vreinterpretq_f32_u32 (veorq_u32 ( + sign, vreinterpretq_u32_f32 (log1pf_inline (y, &d->log1pf_consts)))), + special); } /* Single-precision implementation of vector asinh(x), using vector log1p. - Worst-case error is 2.66 ULP, at roughly +/-0.25: - __v_asinhf(0x1.01b04p-2) got 0x1.fe163ep-3 want 0x1.fe1638p-3. */ + Worst-case error is 2.59 ULP: + _ZGVnN4v_asinhf(0x1.d86124p-3) got 0x1.d449bep-3 + want 0x1.d449c4p-3. */ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x) { const struct data *dat = ptr_barrier (&data); - uint32x4_t iax = vbicq_u32 (vreinterpretq_u32_f32 (x), SignMask); - float32x4_t ax = vreinterpretq_f32_u32 (iax); + float32x4_t ax = vabsq_f32 (x); + uint32x4_t iax = vreinterpretq_u32_f32 (ax); uint32x4_t special = vcgeq_u32 (iax, dat->big_bound); + uint32x4_t sign = veorq_u32 (vreinterpretq_u32_f32 (x), iax); float32x4_t special_arg = x; #if WANT_SIMD_EXCEPT @@ -68,13 +75,13 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x) /* asinh(x) = log(x + sqrt(x * x + 1)). For positive x, asinh(x) = log1p(x + x * x / (1 + sqrt(x * x + 1))). */ float32x4_t d - = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (v_f32 (1), x, x))); - float32x4_t y = log1pf_inline ( - vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d)), dat->log1pf_consts); + = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (dat->one, ax, ax))); + float32x4_t y = vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d)); if (__glibc_unlikely (v_any_u32 (special))) - return special_case (special_arg, vbslq_f32 (SignMask, x, y), special); - return vbslq_f32 (SignMask, x, y); + return special_case (special_arg, sign, y, special, dat); + return vreinterpretq_f32_u32 (veorq_u32 ( + sign, vreinterpretq_u32_f32 (log1pf_inline (y, &dat->log1pf_consts)))); } libmvec_hidden_def (V_NAME_F1 (asinh)) HALF_WIDTH_ALIAS_F1 (asinh) diff --git a/sysdeps/aarch64/fpu/atanhf_advsimd.c b/sysdeps/aarch64/fpu/atanhf_advsimd.c index ae488f7b54..818b6c92ad 100644 --- a/sysdeps/aarch64/fpu/atanhf_advsimd.c +++ b/sysdeps/aarch64/fpu/atanhf_advsimd.c @@ -40,15 +40,17 @@ const static struct data #define Half v_u32 (0x3f000000) static float32x4_t NOINLINE VPCS_ATTR -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, float32x4_t halfsign, float32x4_t y, + uint32x4_t special) { - return v_call_f32 (atanhf, x, y, special); + return v_call_f32 (atanhf, vbslq_f32 (AbsMask, x, halfsign), + vmulq_f32 (halfsign, y), special); } /* Approximation for vector single-precision atanh(x) using modified log1p. - The maximum error is 3.08 ULP: - __v_atanhf(0x1.ff215p-5) got 0x1.ffcb7cp-5 - want 0x1.ffcb82p-5. */ + The maximum error is 2.93 ULP: + _ZGVnN4v_atanhf(0x1.f43d7p-5) got 0x1.f4dcfep-5 + want 0x1.f4dcf8p-5. */ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x) { const struct data *d = ptr_barrier (&data); @@ -68,11 +70,19 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x) uint32x4_t special = vcgeq_u32 (iax, d->one); #endif - float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax), vsubq_f32 (v_f32 (1), ax)); - y = log1pf_inline (y, d->log1pf_consts); + float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax), + vsubq_f32 (vreinterpretq_f32_u32 (d->one), ax)); + y = log1pf_inline (y, &d->log1pf_consts); + /* If exceptions not required, pass ax to special-case for shorter dependency + chain. If exceptions are required ax will have been zerofied, so have to + pass x. */ if (__glibc_unlikely (v_any_u32 (special))) - return special_case (x, vmulq_f32 (halfsign, y), special); +#if WANT_SIMD_EXCEPT + return special_case (x, halfsign, y, special); +#else + return special_case (ax, halfsign, y, special); +#endif return vmulq_f32 (halfsign, y); } libmvec_hidden_def (V_NAME_F1 (atanh)) diff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h index 7484150131..f295fe185d 100644 --- a/sysdeps/aarch64/fpu/bits/math-vector.h +++ b/sysdeps/aarch64/fpu/bits/math-vector.h @@ -113,6 +113,10 @@ # define __DECL_SIMD_log2 __DECL_SIMD_aarch64 # undef __DECL_SIMD_log2f # define __DECL_SIMD_log2f __DECL_SIMD_aarch64 +# undef __DECL_SIMD_logp1 +# define __DECL_SIMD_logp1 __DECL_SIMD_aarch64 +# undef __DECL_SIMD_logp1f +# define __DECL_SIMD_logp1f __DECL_SIMD_aarch64 # undef __DECL_SIMD_pow # define __DECL_SIMD_pow __DECL_SIMD_aarch64 # undef __DECL_SIMD_powf @@ -180,6 +184,7 @@ __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t); +__vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t); __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t); __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t); @@ -207,6 +212,7 @@ __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t); +__vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t); __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t); __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t); @@ -239,6 +245,7 @@ __sv_f32_t _ZGVsMxv_logf (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_log10f (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_log1pf (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t); +__sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t); @@ -266,6 +273,7 @@ __sv_f64_t _ZGVsMxv_log (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_log10 (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_log1p (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t); +__sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t); diff --git a/sysdeps/aarch64/fpu/cos_advsimd.c b/sysdeps/aarch64/fpu/cos_advsimd.c index 3924c9ce44..11a89b1530 100644 --- a/sysdeps/aarch64/fpu/cos_advsimd.c +++ b/sysdeps/aarch64/fpu/cos_advsimd.c @@ -22,7 +22,7 @@ static const struct data { float64x2_t poly[7]; - float64x2_t range_val, shift, inv_pi, half_pi, pi_1, pi_2, pi_3; + float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3; } data = { /* Worst-case error is 3.3 ulp in [-pi/2, pi/2]. */ .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7), @@ -30,11 +30,9 @@ static const struct data V2 (-0x1.ae633919987c6p-26), V2 (0x1.60e277ae07cecp-33), V2 (-0x1.9e9540300a1p-41) }, .inv_pi = V2 (0x1.45f306dc9c883p-2), - .half_pi = V2 (0x1.921fb54442d18p+0), .pi_1 = V2 (0x1.921fb54442d18p+1), .pi_2 = V2 (0x1.1a62633145c06p-53), .pi_3 = V2 (0x1.c1cd129024e09p-106), - .shift = V2 (0x1.8p52), .range_val = V2 (0x1p23) }; @@ -68,10 +66,9 @@ float64x2_t VPCS_ATTR V_NAME_D1 (cos) (float64x2_t x) #endif /* n = rint((|x|+pi/2)/pi) - 0.5. */ - n = vfmaq_f64 (d->shift, d->inv_pi, vaddq_f64 (r, d->half_pi)); - odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63); - n = vsubq_f64 (n, d->shift); - n = vsubq_f64 (n, v_f64 (0.5)); + n = vrndaq_f64 (vfmaq_f64 (v_f64 (0.5), r, d->inv_pi)); + odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63); + n = vsubq_f64 (n, v_f64 (0.5f)); /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */ r = vfmsq_f64 (r, d->pi_1, n); diff --git a/sysdeps/aarch64/fpu/cosf_advsimd.c b/sysdeps/aarch64/fpu/cosf_advsimd.c index d0c285b03a..85a1b37373 100644 --- a/sysdeps/aarch64/fpu/cosf_advsimd.c +++ b/sysdeps/aarch64/fpu/cosf_advsimd.c @@ -22,7 +22,7 @@ static const struct data { float32x4_t poly[4]; - float32x4_t range_val, inv_pi, half_pi, shift, pi_1, pi_2, pi_3; + float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3; } data = { /* 1.886 ulp error. */ .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f), @@ -33,8 +33,6 @@ static const struct data .pi_3 = V4 (-0x1.ee59dap-49f), .inv_pi = V4 (0x1.45f306p-2f), - .shift = V4 (0x1.8p+23f), - .half_pi = V4 (0x1.921fb6p0f), .range_val = V4 (0x1p20f) }; @@ -69,9 +67,8 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (cos) (float32x4_t x) #endif /* n = rint((|x|+pi/2)/pi) - 0.5. */ - n = vfmaq_f32 (d->shift, d->inv_pi, vaddq_f32 (r, d->half_pi)); - odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31); - n = vsubq_f32 (n, d->shift); + n = vrndaq_f32 (vfmaq_f32 (v_f32 (0.5), r, d->inv_pi)); + odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31); n = vsubq_f32 (n, v_f32 (0.5f)); /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */ diff --git a/sysdeps/aarch64/fpu/coshf_sve.c b/sysdeps/aarch64/fpu/coshf_sve.c index e5d8a299c6..7ad6efa0fc 100644 --- a/sysdeps/aarch64/fpu/coshf_sve.c +++ b/sysdeps/aarch64/fpu/coshf_sve.c @@ -23,37 +23,42 @@ static const struct data { struct sv_expf_data expf_consts; - uint32_t special_bound; + float special_bound; } data = { .expf_consts = SV_EXPF_DATA, /* 0x1.5a92d8p+6: expf overflows above this, so have to use special case. */ - .special_bound = 0x42ad496c, + .special_bound = 0x1.5a92d8p+6, }; static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t pg) +special_case (svfloat32_t x, svfloat32_t half_e, svfloat32_t half_over_e, + svbool_t pg) { - return sv_call_f32 (coshf, x, y, pg); + return sv_call_f32 (coshf, x, svadd_x (svptrue_b32 (), half_e, half_over_e), + pg); } /* Single-precision vector cosh, using vector expf. - Maximum error is 1.89 ULP: - _ZGVsMxv_coshf (-0x1.65898cp+6) got 0x1.f00aep+127 - want 0x1.f00adcp+127. */ + Maximum error is 2.77 ULP: + _ZGVsMxv_coshf(-0x1.5b38f4p+1) got 0x1.e45946p+2 + want 0x1.e4594cp+2. */ svfloat32_t SV_NAME_F1 (cosh) (svfloat32_t x, svbool_t pg) { const struct data *d = ptr_barrier (&data); - svfloat32_t ax = svabs_x (pg, x); - svbool_t special = svcmpge (pg, svreinterpret_u32 (ax), d->special_bound); + svbool_t special = svacge (pg, x, d->special_bound); - /* Calculate cosh by exp(x) / 2 + exp(-x) / 2. */ - svfloat32_t t = expf_inline (ax, pg, &d->expf_consts); - svfloat32_t half_t = svmul_x (pg, t, 0.5); - svfloat32_t half_over_t = svdivr_x (pg, t, 0.5); + /* Calculate cosh by exp(x) / 2 + exp(-x) / 2. + Note that x is passed to exp here, rather than |x|. This is to avoid using + destructive unary ABS for better register usage. However it means the + routine is not exactly symmetrical, as the exp helper is slightly less + accurate in the negative range. */ + svfloat32_t e = expf_inline (x, pg, &d->expf_consts); + svfloat32_t half_e = svmul_x (svptrue_b32 (), e, 0.5); + svfloat32_t half_over_e = svdivr_x (pg, e, 0.5); if (__glibc_unlikely (svptest_any (pg, special))) - return special_case (x, svadd_x (pg, half_t, half_over_t), special); + return special_case (x, half_e, half_over_e, special); - return svadd_x (pg, half_t, half_over_t); + return svadd_x (svptrue_b32 (), half_e, half_over_e); } diff --git a/sysdeps/aarch64/fpu/erf_advsimd.c b/sysdeps/aarch64/fpu/erf_advsimd.c index 19cbb7d0f4..a48092e838 100644 --- a/sysdeps/aarch64/fpu/erf_advsimd.c +++ b/sysdeps/aarch64/fpu/erf_advsimd.c @@ -22,19 +22,21 @@ static const struct data { float64x2_t third; - float64x2_t tenth, two_over_five, two_over_fifteen; - float64x2_t two_over_nine, two_over_fortyfive; + float64x2_t tenth, two_over_five, two_over_nine; + double two_over_fifteen, two_over_fortyfive; float64x2_t max, shift; + uint64x2_t max_idx; #if WANT_SIMD_EXCEPT float64x2_t tiny_bound, huge_bound, scale_minus_one; #endif } data = { + .max_idx = V2 (768), .third = V2 (0x1.5555555555556p-2), /* used to compute 2/3 and 1/6 too. */ - .two_over_fifteen = V2 (0x1.1111111111111p-3), + .two_over_fifteen = 0x1.1111111111111p-3, .tenth = V2 (-0x1.999999999999ap-4), .two_over_five = V2 (-0x1.999999999999ap-2), .two_over_nine = V2 (-0x1.c71c71c71c71cp-3), - .two_over_fortyfive = V2 (0x1.6c16c16c16c17p-5), + .two_over_fortyfive = 0x1.6c16c16c16c17p-5, .max = V2 (5.9921875), /* 6 - 1/128. */ .shift = V2 (0x1p45), #if WANT_SIMD_EXCEPT @@ -56,8 +58,8 @@ static inline struct entry lookup (uint64x2_t i) { struct entry e; - float64x2_t e1 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 0)].erf), - e2 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 1)].erf); + float64x2_t e1 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 0)].erf), + e2 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 1)].erf); e.erf = vuzp1q_f64 (e1, e2); e.scale = vuzp2q_f64 (e1, e2); return e; @@ -87,8 +89,8 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x) float64x2_t a = vabsq_f64 (x); /* Reciprocal conditions that do not catch NaNs so they can be used in BSLs to return expected results. */ - uint64x2_t a_le_max = vcleq_f64 (a, dat->max); - uint64x2_t a_gt_max = vcgtq_f64 (a, dat->max); + uint64x2_t a_le_max = vcaleq_f64 (x, dat->max); + uint64x2_t a_gt_max = vcagtq_f64 (x, dat->max); #if WANT_SIMD_EXCEPT /* |x| huge or tiny. */ @@ -115,7 +117,7 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x) segfault. */ uint64x2_t i = vsubq_u64 (vreinterpretq_u64_f64 (z), vreinterpretq_u64_f64 (shift)); - i = vbslq_u64 (a_le_max, i, v_u64 (768)); + i = vbslq_u64 (a_le_max, i, dat->max_idx); struct entry e = lookup (i); float64x2_t r = vsubq_f64 (z, shift); @@ -125,14 +127,19 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x) float64x2_t d2 = vmulq_f64 (d, d); float64x2_t r2 = vmulq_f64 (r, r); + float64x2_t two_over_fifteen_and_fortyfive + = vld1q_f64 (&dat->two_over_fifteen); + /* poly (d, r) = 1 + p1(r) * d + p2(r) * d^2 + ... + p5(r) * d^5. */ float64x2_t p1 = r; float64x2_t p2 = vfmsq_f64 (dat->third, r2, vaddq_f64 (dat->third, dat->third)); float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->third)); - float64x2_t p4 = vfmaq_f64 (dat->two_over_five, r2, dat->two_over_fifteen); + float64x2_t p4 = vfmaq_laneq_f64 (dat->two_over_five, r2, + two_over_fifteen_and_fortyfive, 0); p4 = vfmsq_f64 (dat->tenth, r2, p4); - float64x2_t p5 = vfmaq_f64 (dat->two_over_nine, r2, dat->two_over_fortyfive); + float64x2_t p5 = vfmaq_laneq_f64 (dat->two_over_nine, r2, + two_over_fifteen_and_fortyfive, 1); p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->third), r2, p5)); float64x2_t p34 = vfmaq_f64 (p3, d, p4); diff --git a/sysdeps/aarch64/fpu/erf_data.c b/sysdeps/aarch64/fpu/erf_data.c index 6d2dcd235c..ea01fad7ca 100644 --- a/sysdeps/aarch64/fpu/erf_data.c +++ b/sysdeps/aarch64/fpu/erf_data.c @@ -19,14 +19,14 @@ #include "vecmath_config.h" -/* Lookup table used in erf. +/* Lookup table used in vector erf. For each possible rounded input r (multiples of 1/128), between r = 0.0 and r = 6.0 (769 values): - - the first entry __erff_data.tab.erf contains the values of erf(r), - - the second entry __erff_data.tab.scale contains the values of + - the first entry __v_erff_data.tab.erf contains the values of erf(r), + - the second entry __v_erff_data.tab.scale contains the values of 2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the algorithm, since lookup is performed only for x >= 1/64-1/512. */ -const struct erf_data __erf_data = { +const struct v_erf_data __v_erf_data = { .tab = { { 0x0.0000000000000p+0, 0x1.20dd750429b6dp+0 }, { 0x1.20dbf3deb1340p-7, 0x1.20d8f1975c85dp+0 }, { 0x1.20d77083f17a0p-6, 0x1.20cb67bd452c7p+0 }, diff --git a/sysdeps/aarch64/fpu/erf_sve.c b/sysdeps/aarch64/fpu/erf_sve.c index 7d51417406..671d55a02b 100644 --- a/sysdeps/aarch64/fpu/erf_sve.c +++ b/sysdeps/aarch64/fpu/erf_sve.c @@ -67,14 +67,16 @@ svfloat64_t SV_NAME_D1 (erf) (svfloat64_t x, const svbool_t pg) svfloat64_t a = svabs_x (pg, x); svfloat64_t shift = sv_f64 (dat->shift); svfloat64_t z = svadd_x (pg, a, shift); - svuint64_t i - = svsub_x (pg, svreinterpret_u64 (z), svreinterpret_u64 (shift)); + svuint64_t i = svand_x (pg, svreinterpret_u64 (z), 0xfff); + i = svadd_x (pg, i, i); /* Lookup without shortcut for small values but with predicate to avoid segfault for large values and NaNs. */ svfloat64_t r = svsub_x (pg, z, shift); - svfloat64_t erfr = svld1_gather_index (a_lt_max, __sv_erf_data.erf, i); - svfloat64_t scale = svld1_gather_index (a_lt_max, __sv_erf_data.scale, i); + svfloat64_t erfr + = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].erf, i); + svfloat64_t scale + = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].scale, i); /* erf(x) ~ erf(r) + scale * d * poly (r, d). */ svfloat64_t d = svsub_x (pg, a, r); diff --git a/sysdeps/aarch64/fpu/erfc_advsimd.c b/sysdeps/aarch64/fpu/erfc_advsimd.c index f1b3bfe830..d05eac61a2 100644 --- a/sysdeps/aarch64/fpu/erfc_advsimd.c +++ b/sysdeps/aarch64/fpu/erfc_advsimd.c @@ -24,8 +24,8 @@ static const struct data { uint64x2_t offset, table_scale; float64x2_t max, shift; - float64x2_t p20, p40, p41, p42; - float64x2_t p51, p52; + float64x2_t p20, p40, p41, p51; + double p42, p52; double qr5[2], qr6[2], qr7[2], qr8[2], qr9[2]; #if WANT_SIMD_EXCEPT float64x2_t uflow_bound; @@ -41,9 +41,9 @@ static const struct data .p20 = V2 (0x1.5555555555555p-2), /* 1/3, used to compute 2/3 and 1/6. */ .p40 = V2 (-0x1.999999999999ap-4), /* 1/10. */ .p41 = V2 (-0x1.999999999999ap-2), /* 2/5. */ - .p42 = V2 (0x1.1111111111111p-3), /* 2/15. */ + .p42 = 0x1.1111111111111p-3, /* 2/15. */ .p51 = V2 (-0x1.c71c71c71c71cp-3), /* 2/9. */ - .p52 = V2 (0x1.6c16c16c16c17p-5), /* 2/45. */ + .p52 = 0x1.6c16c16c16c17p-5, /* 2/45. */ /* Qi = (i+1) / i, Ri = -2 * i / ((i+1)*(i+2)), for i = 5, ..., 9. */ .qr5 = { 0x1.3333333333333p0, -0x1.e79e79e79e79ep-3 }, .qr6 = { 0x1.2aaaaaaaaaaabp0, -0x1.b6db6db6db6dbp-3 }, @@ -69,9 +69,9 @@ lookup (uint64x2_t i) { struct entry e; float64x2_t e1 - = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc); + = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc); float64x2_t e2 - = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc); + = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc); e.erfc = vuzp1q_f64 (e1, e2); e.scale = vuzp2q_f64 (e1, e2); return e; @@ -157,9 +157,10 @@ float64x2_t V_NAME_D1 (erfc) (float64x2_t x) float64x2_t p1 = r; float64x2_t p2 = vfmsq_f64 (dat->p20, r2, vaddq_f64 (dat->p20, dat->p20)); float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->p20)); - float64x2_t p4 = vfmaq_f64 (dat->p41, r2, dat->p42); + float64x2_t p42_p52 = vld1q_f64 (&dat->p42); + float64x2_t p4 = vfmaq_laneq_f64 (dat->p41, r2, p42_p52, 0); p4 = vfmsq_f64 (dat->p40, r2, p4); - float64x2_t p5 = vfmaq_f64 (dat->p51, r2, dat->p52); + float64x2_t p5 = vfmaq_laneq_f64 (dat->p51, r2, p42_p52, 1); p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->p20), r2, p5)); /* Compute p_i using recurrence relation: p_{i+2} = (p_i + r * Q_{i+1} * p_{i+1}) * R_{i+1}. */ diff --git a/sysdeps/aarch64/fpu/erfc_data.c b/sysdeps/aarch64/fpu/erfc_data.c index 76a94e4681..8dc6a8c42c 100644 --- a/sysdeps/aarch64/fpu/erfc_data.c +++ b/sysdeps/aarch64/fpu/erfc_data.c @@ -19,14 +19,14 @@ #include "vecmath_config.h" -/* Lookup table used in erfc. +/* Lookup table used in vector erfc. For each possible rounded input r (multiples of 1/128), between r = 0.0 and r = ~27.0 (3488 values): - - the first entry __erfc_data.tab.erfc contains the values of erfc(r), - - the second entry __erfc_data.tab.scale contains the values of + - the first entry __v_erfc_data.tab.erfc contains the values of erfc(r), + - the second entry __v_erfc_data.tab.scale contains the values of 2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore they are scaled by a large enough value 2^128 (fits in 8bit). */ -const struct erfc_data __erfc_data = { +const struct v_erfc_data __v_erfc_data = { .tab = { { 0x1p128, 0x1.20dd750429b6dp128 }, { 0x1.fb7c9030853b3p127, 0x1.20d8f1975c85dp128 }, { 0x1.f6f9447be0743p127, 0x1.20cb67bd452c7p128 }, diff --git a/sysdeps/aarch64/fpu/erfc_sve.c b/sysdeps/aarch64/fpu/erfc_sve.c index c17d3e4484..703926ee41 100644 --- a/sysdeps/aarch64/fpu/erfc_sve.c +++ b/sysdeps/aarch64/fpu/erfc_sve.c @@ -104,7 +104,7 @@ svfloat64_t SV_NAME_D1 (erfc) (svfloat64_t x, const svbool_t pg) /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables. */ i = svadd_x (pg, i, i); - const float64_t *p = &__erfc_data.tab[0].erfc - 2 * dat->off_arr; + const float64_t *p = &__v_erfc_data.tab[0].erfc - 2 * dat->off_arr; svfloat64_t erfcr = svld1_gather_index (pg, p, i); svfloat64_t scale = svld1_gather_index (pg, p + 1, i); diff --git a/sysdeps/aarch64/fpu/erfcf_advsimd.c b/sysdeps/aarch64/fpu/erfcf_advsimd.c index ca5bc3ab33..59b0b0d64b 100644 --- a/sysdeps/aarch64/fpu/erfcf_advsimd.c +++ b/sysdeps/aarch64/fpu/erfcf_advsimd.c @@ -62,13 +62,13 @@ lookup (uint32x4_t i) { struct entry e; float32x2_t t0 - = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc); + = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc); float32x2_t t1 - = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc); + = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc); float32x2_t t2 - = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc); + = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc); float32x2_t t3 - = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc); + = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc); float32x4_t e1 = vcombine_f32 (t0, t1); float32x4_t e2 = vcombine_f32 (t2, t3); e.erfc = vuzp1q_f32 (e1, e2); diff --git a/sysdeps/aarch64/fpu/erfcf_data.c b/sysdeps/aarch64/fpu/erfcf_data.c index 77fb889a78..d45087bbb9 100644 --- a/sysdeps/aarch64/fpu/erfcf_data.c +++ b/sysdeps/aarch64/fpu/erfcf_data.c @@ -19,14 +19,14 @@ #include "vecmath_config.h" -/* Lookup table used in erfcf. +/* Lookup table used in vector erfcf. For each possible rounded input r (multiples of 1/64), between r = 0.0 and r = 10.0625 (645 values): - - the first entry __erfcf_data.tab.erfc contains the values of erfc(r), - - the second entry __erfcf_data.tab.scale contains the values of + - the first entry __v_erfcf_data.tab.erfc contains the values of erfc(r), + - the second entry __v_erfcf_data.tab.scale contains the values of 2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore they are scaled by a large enough value 2^47 (fits in 8 bits). */ -const struct erfcf_data __erfcf_data = { +const struct v_erfcf_data __v_erfcf_data = { .tab = { { 0x1p47, 0x1.20dd76p47 }, { 0x1.f6f944p46, 0x1.20cb68p47 }, { 0x1.edf3aap46, 0x1.209546p47 }, diff --git a/sysdeps/aarch64/fpu/erfcf_sve.c b/sysdeps/aarch64/fpu/erfcf_sve.c index 48d1677eb4..ecacb933ac 100644 --- a/sysdeps/aarch64/fpu/erfcf_sve.c +++ b/sysdeps/aarch64/fpu/erfcf_sve.c @@ -77,7 +77,7 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg) /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables. */ i = svmul_x (pg, i, 2); - const float32_t *p = &__erfcf_data.tab[0].erfc - 2 * dat->off_arr; + const float32_t *p = &__v_erfcf_data.tab[0].erfc - 2 * dat->off_arr; svfloat32_t erfcr = svld1_gather_index (pg, p, i); svfloat32_t scale = svld1_gather_index (pg, p + 1, i); diff --git a/sysdeps/aarch64/fpu/erff_advsimd.c b/sysdeps/aarch64/fpu/erff_advsimd.c index f2fe6ff236..db39e789b6 100644 --- a/sysdeps/aarch64/fpu/erff_advsimd.c +++ b/sysdeps/aarch64/fpu/erff_advsimd.c @@ -47,10 +47,10 @@ static inline struct entry lookup (uint32x4_t i) { struct entry e; - float32x2_t t0 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 0)].erf); - float32x2_t t1 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 1)].erf); - float32x2_t t2 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 2)].erf); - float32x2_t t3 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 3)].erf); + float32x2_t t0 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 0)].erf); + float32x2_t t1 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 1)].erf); + float32x2_t t2 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 2)].erf); + float32x2_t t3 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 3)].erf); float32x4_t e1 = vcombine_f32 (t0, t1); float32x4_t e2 = vcombine_f32 (t2, t3); e.erf = vuzp1q_f32 (e1, e2); diff --git a/sysdeps/aarch64/fpu/erff_data.c b/sysdeps/aarch64/fpu/erff_data.c index 9a32940915..da38aed205 100644 --- a/sysdeps/aarch64/fpu/erff_data.c +++ b/sysdeps/aarch64/fpu/erff_data.c @@ -19,14 +19,14 @@ #include "vecmath_config.h" -/* Lookup table used in erff. +/* Lookup table used in vector erff. For each possible rounded input r (multiples of 1/128), between r = 0.0 and r = 4.0 (513 values): - - the first entry __erff_data.tab.erf contains the values of erf(r), - - the second entry __erff_data.tab.scale contains the values of + - the first entry __v_erff_data.tab.erf contains the values of erf(r), + - the second entry __v_erff_data.tab.scale contains the values of 2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the algorithm, since lookup is performed only for x >= 1/64-1/512. */ -const struct erff_data __erff_data = { +const struct v_erff_data __v_erff_data = { .tab = { { 0x0.000000p+0, 0x1.20dd76p+0 }, { 0x1.20dbf4p-7, 0x1.20d8f2p+0 }, { 0x1.20d770p-6, 0x1.20cb68p+0 }, diff --git a/sysdeps/aarch64/fpu/erff_sve.c b/sysdeps/aarch64/fpu/erff_sve.c index 38f00db9be..0e382eb09a 100644 --- a/sysdeps/aarch64/fpu/erff_sve.c +++ b/sysdeps/aarch64/fpu/erff_sve.c @@ -62,18 +62,17 @@ svfloat32_t SV_NAME_F1 (erf) (svfloat32_t x, const svbool_t pg) svfloat32_t shift = sv_f32 (dat->shift); svfloat32_t z = svadd_x (pg, a, shift); - svuint32_t i - = svsub_x (pg, svreinterpret_u32 (z), svreinterpret_u32 (shift)); - - /* Saturate lookup index. */ - i = svsel (a_ge_max, sv_u32 (512), i); + svuint32_t i = svand_x (pg, svreinterpret_u32 (z), 0xfff); + i = svadd_x (pg, i, i); /* r and erf(r) set to 0 for |x| below min. */ svfloat32_t r = svsub_z (a_gt_min, z, shift); - svfloat32_t erfr = svld1_gather_index (a_gt_min, __sv_erff_data.erf, i); + svfloat32_t erfr + = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].erf, i); /* scale set to 2/sqrt(pi) for |x| below min. */ - svfloat32_t scale = svld1_gather_index (a_gt_min, __sv_erff_data.scale, i); + svfloat32_t scale + = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].scale, i); scale = svsel (a_gt_min, scale, sv_f32 (dat->scale)); /* erf(x) ~ erf(r) + scale * d * (1 - r * d + 1/3 * d^2). */ diff --git a/sysdeps/aarch64/fpu/exp10f_sve.c b/sysdeps/aarch64/fpu/exp10f_sve.c index e09b2f3b27..8aa3fa9c43 100644 --- a/sysdeps/aarch64/fpu/exp10f_sve.c +++ b/sysdeps/aarch64/fpu/exp10f_sve.c @@ -18,74 +18,83 @@ <https://www.gnu.org/licenses/>. */ #include "sv_math.h" -#include "poly_sve_f32.h" -/* For x < -SpecialBound, the result is subnormal and not handled correctly by +/* For x < -Thres, the result is subnormal and not handled correctly by FEXPA. */ -#define SpecialBound 37.9 +#define Thres 37.9 static const struct data { - float poly[5]; - float shift, log10_2, log2_10_hi, log2_10_lo, special_bound; + float log2_10_lo, c0, c2, c4; + float c1, c3, log10_2; + float shift, log2_10_hi, thres; } data = { /* Coefficients generated using Remez algorithm with minimisation of relative error. rel error: 0x1.89dafa3p-24 abs error: 0x1.167d55p-23 in [-log10(2)/2, log10(2)/2] maxerr: 0.52 +0.5 ulp. */ - .poly = { 0x1.26bb16p+1f, 0x1.5350d2p+1f, 0x1.04744ap+1f, 0x1.2d8176p+0f, - 0x1.12b41ap-1f }, + .c0 = 0x1.26bb16p+1f, + .c1 = 0x1.5350d2p+1f, + .c2 = 0x1.04744ap+1f, + .c3 = 0x1.2d8176p+0f, + .c4 = 0x1.12b41ap-1f, /* 1.5*2^17 + 127, a shift value suitable for FEXPA. */ - .shift = 0x1.903f8p17f, + .shift = 0x1.803f8p17f, .log10_2 = 0x1.a934fp+1, .log2_10_hi = 0x1.344136p-2, .log2_10_lo = -0x1.ec10cp-27, - .special_bound = SpecialBound, + .thres = Thres, }; -static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t special) +static inline svfloat32_t +sv_exp10f_inline (svfloat32_t x, const svbool_t pg, const struct data *d) { - return sv_call_f32 (exp10f, x, y, special); -} - -/* Single-precision SVE exp10f routine. Implements the same algorithm - as AdvSIMD exp10f. - Worst case error is 1.02 ULPs. - _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1 - want 0x1.ba5f9cp-1. */ -svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg) -{ - const struct data *d = ptr_barrier (&data); /* exp10(x) = 2^(n/N) * 10^r = 2^n * (1 + poly (r)), with poly(r) in [1/sqrt(2), sqrt(2)] and x = r + n * log10(2) / N, with r in [-log10(2)/2N, log10(2)/2N]. */ - /* Load some constants in quad-word chunks to minimise memory access (last - lane is wasted). */ - svfloat32_t log10_2_and_inv = svld1rq (svptrue_b32 (), &d->log10_2); + svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->log2_10_lo); /* n = round(x/(log10(2)/N)). */ svfloat32_t shift = sv_f32 (d->shift); - svfloat32_t z = svmla_lane (shift, x, log10_2_and_inv, 0); - svfloat32_t n = svsub_x (pg, z, shift); + svfloat32_t z = svmad_x (pg, sv_f32 (d->log10_2), x, shift); + svfloat32_t n = svsub_x (svptrue_b32 (), z, shift); /* r = x - n*log10(2)/N. */ - svfloat32_t r = svmls_lane (x, n, log10_2_and_inv, 1); - r = svmls_lane (r, n, log10_2_and_inv, 2); + svfloat32_t r = svmsb_x (pg, sv_f32 (d->log2_10_hi), n, x); + r = svmls_lane (r, n, lane_consts, 0); - svbool_t special = svacgt (pg, x, d->special_bound); svfloat32_t scale = svexpa (svreinterpret_u32 (z)); /* Polynomial evaluation: poly(r) ~ exp10(r)-1. */ - svfloat32_t r2 = svmul_x (pg, r, r); - svfloat32_t poly - = svmla_x (pg, svmul_x (pg, r, d->poly[0]), - sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1), r2); - - if (__glibc_unlikely (svptest_any (pg, special))) - return special_case (x, svmla_x (pg, scale, scale, poly), special); + svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2); + svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); + svfloat32_t p14 = svmla_x (pg, p12, p34, r2); + svfloat32_t p0 = svmul_lane (r, lane_consts, 1); + svfloat32_t poly = svmla_x (pg, p0, r2, p14); return svmla_x (pg, scale, scale, poly); } + +static svfloat32_t NOINLINE +special_case (svfloat32_t x, svbool_t special, const struct data *d) +{ + return sv_call_f32 (exp10f, x, sv_exp10f_inline (x, svptrue_b32 (), d), + special); +} + +/* Single-precision SVE exp10f routine. Implements the same algorithm + as AdvSIMD exp10f. + Worst case error is 1.02 ULPs. + _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1 + want 0x1.ba5f9cp-1. */ +svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg) +{ + const struct data *d = ptr_barrier (&data); + svbool_t special = svacgt (pg, x, d->thres); + if (__glibc_unlikely (svptest_any (special, special))) + return special_case (x, special, d); + return sv_exp10f_inline (x, pg, d); +} diff --git a/sysdeps/aarch64/fpu/exp2f_sve.c b/sysdeps/aarch64/fpu/exp2f_sve.c index 8a686e3e05..c6216bed9e 100644 --- a/sysdeps/aarch64/fpu/exp2f_sve.c +++ b/sysdeps/aarch64/fpu/exp2f_sve.c @@ -24,54 +24,64 @@ static const struct data { - float poly[5]; + float c0, c2, c4, c1, c3; float shift, thres; } data = { - /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for - compatibility with polynomial helpers. */ - .poly = { 0x1.62e422p-1f, 0x1.ebf9bcp-3f, 0x1.c6bd32p-5f, 0x1.3ce9e4p-7f, - 0x1.59977ap-10f }, + /* Coefficients copied from the polynomial in AdvSIMD variant. */ + .c0 = 0x1.62e422p-1f, + .c1 = 0x1.ebf9bcp-3f, + .c2 = 0x1.c6bd32p-5f, + .c3 = 0x1.3ce9e4p-7f, + .c4 = 0x1.59977ap-10f, /* 1.5*2^17 + 127. */ - .shift = 0x1.903f8p17f, + .shift = 0x1.803f8p17f, /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled correctly by FEXPA. */ .thres = Thres, }; -static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t special) -{ - return sv_call_f32 (exp2f, x, y, special); -} - -/* Single-precision SVE exp2f routine. Implements the same algorithm - as AdvSIMD exp2f. - Worst case error is 1.04 ULPs. - SV_NAME_F1 (exp2)(0x1.943b9p-1) got 0x1.ba7eb2p+0 - want 0x1.ba7ebp+0. */ -svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg) +static inline svfloat32_t +sv_exp2f_inline (svfloat32_t x, const svbool_t pg, const struct data *d) { - const struct data *d = ptr_barrier (&data); /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)] x = n + r, with r in [-1/2, 1/2]. */ - svfloat32_t shift = sv_f32 (d->shift); - svfloat32_t z = svadd_x (pg, x, shift); - svfloat32_t n = svsub_x (pg, z, shift); - svfloat32_t r = svsub_x (pg, x, n); + svfloat32_t z = svadd_x (svptrue_b32 (), x, d->shift); + svfloat32_t n = svsub_x (svptrue_b32 (), z, d->shift); + svfloat32_t r = svsub_x (svptrue_b32 (), x, n); - svbool_t special = svacgt (pg, x, d->thres); svfloat32_t scale = svexpa (svreinterpret_u32 (z)); /* Polynomial evaluation: poly(r) ~ exp2(r)-1. Evaluate polynomial use hybrid scheme - offset ESTRIN by 1 for coefficients 1 to 4, and apply most significant coefficient directly. */ - svfloat32_t r2 = svmul_x (pg, r, r); - svfloat32_t p14 = sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1); - svfloat32_t p0 = svmul_x (pg, r, d->poly[0]); + svfloat32_t even_coeffs = svld1rq (svptrue_b32 (), &d->c0); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); + svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, even_coeffs, 1); + svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, even_coeffs, 2); + svfloat32_t p14 = svmla_x (pg, p12, r2, p34); + svfloat32_t p0 = svmul_lane (r, even_coeffs, 0); svfloat32_t poly = svmla_x (pg, p0, r2, p14); - if (__glibc_unlikely (svptest_any (pg, special))) - return special_case (x, svmla_x (pg, scale, scale, poly), special); - return svmla_x (pg, scale, scale, poly); } + +static svfloat32_t NOINLINE +special_case (svfloat32_t x, svbool_t special, const struct data *d) +{ + return sv_call_f32 (exp2f, x, sv_exp2f_inline (x, svptrue_b32 (), d), + special); +} + +/* Single-precision SVE exp2f routine. Implements the same algorithm + as AdvSIMD exp2f. + Worst case error is 1.04 ULPs. + _ZGVsMxv_exp2f(-0x1.af994ap-3) got 0x1.ba6a66p-1 + want 0x1.ba6a64p-1. */ +svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg) +{ + const struct data *d = ptr_barrier (&data); + svbool_t special = svacgt (pg, x, d->thres); + if (__glibc_unlikely (svptest_any (special, special))) + return special_case (x, special, d); + return sv_exp2f_inline (x, pg, d); +} diff --git a/sysdeps/aarch64/fpu/expf_advsimd.c b/sysdeps/aarch64/fpu/expf_advsimd.c index 99d2e647aa..5c9cb72620 100644 --- a/sysdeps/aarch64/fpu/expf_advsimd.c +++ b/sysdeps/aarch64/fpu/expf_advsimd.c @@ -22,7 +22,7 @@ static const struct data { float32x4_t poly[5]; - float32x4_t shift, inv_ln2, ln2_hi, ln2_lo; + float32x4_t inv_ln2, ln2_hi, ln2_lo; uint32x4_t exponent_bias; #if !WANT_SIMD_EXCEPT float32x4_t special_bound, scale_thresh; @@ -31,7 +31,6 @@ static const struct data /* maxerr: 1.45358 +0.5 ulp. */ .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f), V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) }, - .shift = V4 (0x1.8p23f), .inv_ln2 = V4 (0x1.715476p+0f), .ln2_hi = V4 (0x1.62e4p-1f), .ln2_lo = V4 (0x1.7f7d1cp-20f), @@ -85,7 +84,7 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1, float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x) { const struct data *d = ptr_barrier (&data); - float32x4_t n, r, r2, scale, p, q, poly, z; + float32x4_t n, r, r2, scale, p, q, poly; uint32x4_t cmp, e; #if WANT_SIMD_EXCEPT @@ -104,11 +103,10 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x) /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)] x = ln2*n + r, with r in [-ln2/2, ln2/2]. */ - z = vfmaq_f32 (d->shift, x, d->inv_ln2); - n = vsubq_f32 (z, d->shift); + n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2)); r = vfmsq_f32 (x, n, d->ln2_hi); r = vfmsq_f32 (r, n, d->ln2_lo); - e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23); + e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23); scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias)); #if !WANT_SIMD_EXCEPT diff --git a/sysdeps/aarch64/fpu/expf_sve.c b/sysdeps/aarch64/fpu/expf_sve.c index 3ba79bc4f1..da93e01b87 100644 --- a/sysdeps/aarch64/fpu/expf_sve.c +++ b/sysdeps/aarch64/fpu/expf_sve.c @@ -18,33 +18,25 @@ <https://www.gnu.org/licenses/>. */ #include "sv_math.h" +#include "sv_expf_inline.h" + +/* Roughly 87.3. For x < -Thres, the result is subnormal and not handled + correctly by FEXPA. */ +#define Thres 0x1.5d5e2ap+6f static const struct data { - float poly[5]; - float inv_ln2, ln2_hi, ln2_lo, shift, thres; + struct sv_expf_data d; + float thres; } data = { - /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for - compatibility with polynomial helpers. */ - .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f, - 0x1.0e4020p-7f }, - .inv_ln2 = 0x1.715476p+0f, - .ln2_hi = 0x1.62e4p-1f, - .ln2_lo = 0x1.7f7d1cp-20f, - /* 1.5*2^17 + 127. */ - .shift = 0x1.903f8p17f, - /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled - correctly by FEXPA. */ - .thres = 0x1.5d5e2ap+6f, + .d = SV_EXPF_DATA, + .thres = Thres, }; -#define C(i) sv_f32 (d->poly[i]) -#define ExponentBias 0x3f800000 - static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t special) +special_case (svfloat32_t x, svbool_t special, const struct sv_expf_data *d) { - return sv_call_f32 (expf, x, y, special); + return sv_call_f32 (expf, x, expf_inline (x, svptrue_b32 (), d), special); } /* Optimised single-precision SVE exp function. @@ -54,36 +46,8 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special) svfloat32_t SV_NAME_F1 (exp) (svfloat32_t x, const svbool_t pg) { const struct data *d = ptr_barrier (&data); - - /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)] - x = ln2*n + r, with r in [-ln2/2, ln2/2]. */ - - /* Load some constants in quad-word chunks to minimise memory access (last - lane is wasted). */ - svfloat32_t invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->inv_ln2); - - /* n = round(x/(ln2/N)). */ - svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, invln2_and_ln2, 0); - svfloat32_t n = svsub_x (pg, z, d->shift); - - /* r = x - n*ln2/N. */ - svfloat32_t r = svmls_lane (x, n, invln2_and_ln2, 1); - r = svmls_lane (r, n, invln2_and_ln2, 2); - - /* scale = 2^(n/N). */ svbool_t is_special_case = svacgt (pg, x, d->thres); - svfloat32_t scale = svexpa (svreinterpret_u32 (z)); - - /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6. */ - svfloat32_t p12 = svmla_x (pg, C (1), C (2), r); - svfloat32_t p34 = svmla_x (pg, C (3), C (4), r); - svfloat32_t r2 = svmul_x (pg, r, r); - svfloat32_t p14 = svmla_x (pg, p12, p34, r2); - svfloat32_t p0 = svmul_x (pg, r, C (0)); - svfloat32_t poly = svmla_x (pg, p0, r2, p14); - if (__glibc_unlikely (svptest_any (pg, is_special_case))) - return special_case (x, svmla_x (pg, scale, scale, poly), is_special_case); - - return svmla_x (pg, scale, scale, poly); + return special_case (x, is_special_case, &d->d); + return expf_inline (x, pg, &d->d); } diff --git a/sysdeps/aarch64/fpu/expm1f_advsimd.c b/sysdeps/aarch64/fpu/expm1f_advsimd.c index a0616ec754..8303ca296e 100644 --- a/sysdeps/aarch64/fpu/expm1f_advsimd.c +++ b/sysdeps/aarch64/fpu/expm1f_advsimd.c @@ -18,27 +18,18 @@ <https://www.gnu.org/licenses/>. */ #include "v_math.h" -#include "poly_advsimd_f32.h" +#include "v_expm1f_inline.h" static const struct data { - float32x4_t poly[5]; - float invln2_and_ln2[4]; - float32x4_t shift; - int32x4_t exponent_bias; + struct v_expm1f_data d; #if WANT_SIMD_EXCEPT uint32x4_t thresh; #else float32x4_t oflow_bound; #endif } data = { - /* Generated using fpminimax with degree=5 in [-log(2)/2, log(2)/2]. */ - .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5), - V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) }, - /* Stores constants: invln2, ln2_hi, ln2_lo, 0. */ - .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 }, - .shift = V4 (0x1.8p23f), - .exponent_bias = V4 (0x3f800000), + .d = V_EXPM1F_DATA, #if !WANT_SIMD_EXCEPT /* Value above which expm1f(x) should overflow. Absolute value of the underflow bound is greater than this, so it catches both cases - there is @@ -55,67 +46,38 @@ static const struct data #define TinyBound v_u32 (0x34000000 << 1) static float32x4_t VPCS_ATTR NOINLINE -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, uint32x4_t special, const struct data *d) { - return v_call_f32 (expm1f, x, y, special); + return v_call_f32 ( + expm1f, x, expm1f_inline (v_zerofy_f32 (x, special), &d->d), special); } /* Single-precision vector exp(x) - 1 function. - The maximum error is 1.51 ULP: - _ZGVnN4v_expm1f (0x1.8baa96p-2) got 0x1.e2fb9p-2 - want 0x1.e2fb94p-2. */ + The maximum error is 1.62 ULP: + _ZGVnN4v_expm1f(0x1.85f83p-2) got 0x1.da9f4p-2 + want 0x1.da9f44p-2. */ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (expm1) (float32x4_t x) { const struct data *d = ptr_barrier (&data); - uint32x4_t ix = vreinterpretq_u32_f32 (x); #if WANT_SIMD_EXCEPT + uint32x4_t ix = vreinterpretq_u32_f32 (x); /* If fp exceptions are to be triggered correctly, fall back to scalar for |x| < 2^-23, |x| > oflow_bound, Inf & NaN. Add ix to itself for shift-left by 1, and compare with thresh which was left-shifted offline - this is effectively an absolute compare. */ uint32x4_t special = vcgeq_u32 (vsubq_u32 (vaddq_u32 (ix, ix), TinyBound), d->thresh); - if (__glibc_unlikely (v_any_u32 (special))) - x = v_zerofy_f32 (x, special); #else /* Handles very large values (+ve and -ve), +/-NaN, +/-Inf. */ uint32x4_t special = vcagtq_f32 (x, d->oflow_bound); #endif - /* Reduce argument to smaller range: - Let i = round(x / ln2) - and f = x - i * ln2, then f is in [-ln2/2, ln2/2]. - exp(x) - 1 = 2^i * (expm1(f) + 1) - 1 - where 2^i is exact because i is an integer. */ - float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2); - float32x4_t j - = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift); - int32x4_t i = vcvtq_s32_f32 (j); - float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1); - f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2); - - /* Approximate expm1(f) using polynomial. - Taylor expansion for expm1(x) has the form: - x + ax^2 + bx^3 + cx^4 .... - So we calculate the polynomial P(f) = a + bf + cf^2 + ... - and assemble the approximation expm1(f) ~= f + f^2 * P(f). */ - float32x4_t p = v_horner_4_f32 (f, d->poly); - p = vfmaq_f32 (f, vmulq_f32 (f, f), p); - - /* Assemble the result. - expm1(x) ~= 2^i * (p + 1) - 1 - Let t = 2^i. */ - int32x4_t u = vaddq_s32 (vshlq_n_s32 (i, 23), d->exponent_bias); - float32x4_t t = vreinterpretq_f32_s32 (u); - if (__glibc_unlikely (v_any_u32 (special))) - return special_case (vreinterpretq_f32_u32 (ix), - vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t), - special); + return special_case (x, special, d); /* expm1(x) ~= p * t + (t - 1). */ - return vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t); + return expm1f_inline (x, &d->d); } libmvec_hidden_def (V_NAME_F1 (expm1)) HALF_WIDTH_ALIAS_F1 (expm1) diff --git a/sysdeps/aarch64/fpu/log10f_advsimd.c b/sysdeps/aarch64/fpu/log10f_advsimd.c index 9347422a77..82228b599a 100644 --- a/sysdeps/aarch64/fpu/log10f_advsimd.c +++ b/sysdeps/aarch64/fpu/log10f_advsimd.c @@ -22,11 +22,11 @@ static const struct data { - uint32x4_t min_norm; + uint32x4_t off, offset_lower_bound; uint16x8_t special_bound; + uint32x4_t mantissa_mask; float32x4_t poly[8]; float32x4_t inv_ln10, ln2; - uint32x4_t off, mantissa_mask; } data = { /* Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in [-1/3, 1/3] (offset=2/3). Max. relative error: 0x1.068ee468p-25. */ @@ -35,18 +35,22 @@ static const struct data V4 (-0x1.0fc92cp-4f), V4 (0x1.f5f76ap-5f) }, .ln2 = V4 (0x1.62e43p-1f), .inv_ln10 = V4 (0x1.bcb7b2p-2f), - .min_norm = V4 (0x00800000), - .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm. */ + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab), + .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000). */ .off = V4 (0x3f2aaaab), /* 0.666667. */ .mantissa_mask = V4 (0x007fffff), }; static float32x4_t VPCS_ATTR NOINLINE -special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2, - uint16x4_t cmp) +special_case (float32x4_t y, uint32x4_t u_off, float32x4_t p, float32x4_t r2, + uint16x4_t cmp, const struct data *d) { /* Fall back to scalar code. */ - return v_call_f32 (log10f, x, vfmaq_f32 (y, p, r2), vmovl_u16 (cmp)); + return v_call_f32 (log10f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)), + vfmaq_f32 (y, p, r2), vmovl_u16 (cmp)); } /* Fast implementation of AdvSIMD log10f, @@ -58,15 +62,21 @@ special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2, float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x) { const struct data *d = ptr_barrier (&data); - uint32x4_t u = vreinterpretq_u32_f32 (x); - uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm), - vget_low_u16 (d->special_bound)); + + /* To avoid having to mov x out of the way, keep u after offset has been + applied, and recover x by adding the offset back in the special-case + handler. */ + uint32x4_t u_off = vreinterpretq_u32_f32 (x); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - u = vsubq_u32 (u, d->off); + u_off = vsubq_u32 (u_off, d->off); float32x4_t n = vcvtq_f32_s32 ( - vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend. */ - u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off); + vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend. */ + + uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound), + vget_low_u16 (d->special_bound)); + + uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off); float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f)); /* y = log10(1+r) + n * log10(2). */ @@ -77,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x) y = vmulq_f32 (y, d->inv_ln10); if (__glibc_unlikely (v_any_u16h (special))) - return special_case (x, y, poly, r2, special); + return special_case (y, u_off, poly, r2, special, d); return vfmaq_f32 (y, poly, r2); } libmvec_hidden_def (V_NAME_F1 (log10)) diff --git a/sysdeps/aarch64/fpu/log10f_sve.c b/sysdeps/aarch64/fpu/log10f_sve.c index bdbb49cd32..7913679f67 100644 --- a/sysdeps/aarch64/fpu/log10f_sve.c +++ b/sysdeps/aarch64/fpu/log10f_sve.c @@ -24,6 +24,7 @@ static const struct data float poly_0246[4]; float poly_1357[4]; float ln2, inv_ln10; + uint32_t off, lower; } data = { .poly_1357 = { /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs @@ -35,18 +36,23 @@ static const struct data -0x1.0fc92cp-4f }, .ln2 = 0x1.62e43p-1f, .inv_ln10 = 0x1.bcb7b2p-2f, + .off = 0x3f2aaaab, + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .lower = 0x00800000 - 0x3f2aaaab }; -#define Min 0x00800000 -#define Max 0x7f800000 -#define Thres 0x7f000000 /* Max - Min. */ -#define Offset 0x3f2aaaab /* 0.666667. */ +#define Thres 0x7f000000 /* asuint32(inf) - 0x00800000. */ #define MantissaMask 0x007fffff static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t special) +special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y, + svbool_t cmp) { - return sv_call_f32 (log10f, x, y, special); + return sv_call_f32 ( + log10f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)), + svmla_x (svptrue_b32 (), p, r2, y), cmp); } /* Optimised implementation of SVE log10f using the same algorithm and @@ -57,23 +63,25 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special) svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg) { const struct data *d = ptr_barrier (&data); - svuint32_t ix = svreinterpret_u32 (x); - svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thres); + + svuint32_t u_off = svreinterpret_u32 (x); + + u_off = svsub_x (pg, u_off, d->off); + svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thres); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - ix = svsub_x (pg, ix, Offset); svfloat32_t n = svcvt_f32_x ( - pg, svasr_x (pg, svreinterpret_s32 (ix), 23)); /* signextend. */ - ix = svand_x (pg, ix, MantissaMask); - ix = svadd_x (pg, ix, Offset); + pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* signextend. */ + svuint32_t ix = svand_x (pg, u_off, MantissaMask); + ix = svadd_x (pg, ix, d->off); svfloat32_t r = svsub_x (pg, svreinterpret_f32 (ix), 1.0f); /* y = log10(1+r) + n*log10(2) log10(1+r) ~ r * InvLn(10) + P(r) where P(r) is a polynomial. Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in [-1/3, 1/3] (offset=2/3). */ - svfloat32_t r2 = svmul_x (pg, r, r); - svfloat32_t r4 = svmul_x (pg, r2, r2); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); + svfloat32_t r4 = svmul_x (svptrue_b32 (), r2, r2); svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]); svfloat32_t q_01 = svmla_lane (sv_f32 (d->poly_0246[0]), r, p_1357, 0); svfloat32_t q_23 = svmla_lane (sv_f32 (d->poly_0246[1]), r, p_1357, 1); @@ -88,7 +96,6 @@ svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg) hi = svmul_x (pg, hi, d->inv_ln10); if (__glibc_unlikely (svptest_any (pg, special))) - return special_case (x, svmla_x (svnot_z (pg, special), hi, r2, y), - special); - return svmla_x (pg, hi, r2, y); + return special_case (u_off, hi, r2, y, special); + return svmla_x (svptrue_b32 (), hi, r2, y); } diff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c index ffc418fc9c..114064c696 100644 --- a/sysdeps/aarch64/fpu/log1p_advsimd.c +++ b/sysdeps/aarch64/fpu/log1p_advsimd.c @@ -127,3 +127,5 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x) return vfmaq_f64 (y, f2, p); } + +strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1)) diff --git a/sysdeps/aarch64/fpu/log1p_sve.c b/sysdeps/aarch64/fpu/log1p_sve.c index 04f7e5720e..b21cfb2c90 100644 --- a/sysdeps/aarch64/fpu/log1p_sve.c +++ b/sysdeps/aarch64/fpu/log1p_sve.c @@ -116,3 +116,5 @@ svfloat64_t SV_NAME_D1 (log1p) (svfloat64_t x, svbool_t pg) return y; } + +strong_alias (SV_NAME_D1 (log1p), SV_NAME_D1 (logp1)) diff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c index dc15334a85..00006fc703 100644 --- a/sysdeps/aarch64/fpu/log1pf_advsimd.c +++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c @@ -18,113 +18,81 @@ <https://www.gnu.org/licenses/>. */ #include "v_math.h" -#include "poly_advsimd_f32.h" +#include "v_log1pf_inline.h" + +#if WANT_SIMD_EXCEPT const static struct data { - float32x4_t poly[8], ln2; - uint32x4_t tiny_bound, minus_one, four, thresh; - int32x4_t three_quarters; + uint32x4_t minus_one, thresh; + struct v_log1pf_data d; } data = { - .poly = { /* Generated using FPMinimax in [-0.25, 0.5]. First two coefficients - (1, -0.5) are not stored as they can be generated more - efficiently. */ - V4 (0x1.5555aap-2f), V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f), - V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f), V4 (-0x1.0da91p-3f), - V4 (0x1.abcb6p-4f), V4 (-0x1.6f0d5ep-5f) }, - .ln2 = V4 (0x1.62e43p-1f), - .tiny_bound = V4 (0x34000000), /* asuint32(0x1p-23). ulp=0.5 at 0x1p-23. */ - .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - tiny_bound. */ + .d = V_LOG1PF_CONSTANTS_TABLE, + .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - TinyBound. */ .minus_one = V4 (0xbf800000), - .four = V4 (0x40800000), - .three_quarters = V4 (0x3f400000) }; -static inline float32x4_t -eval_poly (float32x4_t m, const float32x4_t *p) -{ - /* Approximate log(1+m) on [-0.25, 0.5] using split Estrin scheme. */ - float32x4_t p_12 = vfmaq_f32 (v_f32 (-0.5), m, p[0]); - float32x4_t p_34 = vfmaq_f32 (p[1], m, p[2]); - float32x4_t p_56 = vfmaq_f32 (p[3], m, p[4]); - float32x4_t p_78 = vfmaq_f32 (p[5], m, p[6]); - - float32x4_t m2 = vmulq_f32 (m, m); - float32x4_t p_02 = vfmaq_f32 (m, m2, p_12); - float32x4_t p_36 = vfmaq_f32 (p_34, m2, p_56); - float32x4_t p_79 = vfmaq_f32 (p_78, m2, p[7]); - - float32x4_t m4 = vmulq_f32 (m2, m2); - float32x4_t p_06 = vfmaq_f32 (p_02, m4, p_36); - return vfmaq_f32 (p_06, m4, vmulq_f32 (m4, p_79)); -} +/* asuint32(0x1p-23). ulp=0.5 at 0x1p-23. */ +# define TinyBound v_u32 (0x34000000) static float32x4_t NOINLINE VPCS_ATTR -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, uint32x4_t cmp, const struct data *d) { - return v_call_f32 (log1pf, x, y, special); + /* Side-step special lanes so fenv exceptions are not triggered + inadvertently. */ + float32x4_t x_nospecial = v_zerofy_f32 (x, cmp); + return v_call_f32 (log1pf, x, log1pf_inline (x_nospecial, &d->d), cmp); } -/* Vector log1pf approximation using polynomial on reduced interval. Accuracy - is roughly 2.02 ULP: - log1pf(0x1.21e13ap-2) got 0x1.fe8028p-3 want 0x1.fe802cp-3. */ +/* Vector log1pf approximation using polynomial on reduced interval. Worst-case + error is 1.69 ULP: + _ZGVnN4v_log1pf(0x1.04418ap-2) got 0x1.cfcbd8p-3 + want 0x1.cfcbdcp-3. */ VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x) { const struct data *d = ptr_barrier (&data); - uint32x4_t ix = vreinterpretq_u32_f32 (x); uint32x4_t ia = vreinterpretq_u32_f32 (vabsq_f32 (x)); + uint32x4_t special_cases - = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, d->tiny_bound), d->thresh), + = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, TinyBound), d->thresh), vcgeq_u32 (ix, d->minus_one)); - float32x4_t special_arg = x; -#if WANT_SIMD_EXCEPT if (__glibc_unlikely (v_any_u32 (special_cases))) - /* Side-step special lanes so fenv exceptions are not triggered - inadvertently. */ - x = v_zerofy_f32 (x, special_cases); -#endif + return special_case (x, special_cases, d); - /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m - is in [-0.25, 0.5]): - log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2). - - We approximate log1p(m) with a polynomial, then scale by - k*log(2). Instead of doing this directly, we use an intermediate - scale factor s = 4*k*log(2) to ensure the scale is representable - as a normalised fp32 number. */ + return log1pf_inline (x, &d->d); +} - float32x4_t m = vaddq_f32 (x, v_f32 (1.0f)); +#else - /* Choose k to scale x to the range [-1/4, 1/2]. */ - int32x4_t k - = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters), - v_s32 (0xff800000)); - uint32x4_t ku = vreinterpretq_u32_s32 (k); +const static struct v_log1pf_data data = V_LOG1PF_CONSTANTS_TABLE; - /* Scale x by exponent manipulation. */ - float32x4_t m_scale - = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku)); +static float32x4_t NOINLINE VPCS_ATTR +special_case (float32x4_t x, uint32x4_t cmp) +{ + return v_call_f32 (log1pf, x, log1pf_inline (x, ptr_barrier (&data)), cmp); +} - /* Scale up to ensure that the scale factor is representable as normalised - fp32 number, and scale m down accordingly. */ - float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku)); - m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s)); +/* Vector log1pf approximation using polynomial on reduced interval. Worst-case + error is 1.63 ULP: + _ZGVnN4v_log1pf(0x1.216d12p-2) got 0x1.fdcb12p-3 + want 0x1.fdcb16p-3. */ +VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x) +{ + uint32x4_t special_cases = vornq_u32 (vcleq_f32 (x, v_f32 (-1)), + vcaleq_f32 (x, v_f32 (0x1p127f))); - /* Evaluate polynomial on the reduced interval. */ - float32x4_t p = eval_poly (m_scale, d->poly); + if (__glibc_unlikely (v_any_u32 (special_cases))) + return special_case (x, special_cases); - /* The scale factor to be applied back at the end - by multiplying float(k) - by 2^-23 we get the unbiased exponent of k. */ - float32x4_t scale_back = vcvtq_f32_s32 (vshrq_n_s32 (k, 23)); + return log1pf_inline (x, ptr_barrier (&data)); +} - /* Apply the scaling back. */ - float32x4_t y = vfmaq_f32 (p, scale_back, d->ln2); +#endif - if (__glibc_unlikely (v_any_u32 (special_cases))) - return special_case (special_arg, y, special_cases); - return y; -} libmvec_hidden_def (V_NAME_F1 (log1p)) HALF_WIDTH_ALIAS_F1 (log1p) +strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1)) +libmvec_hidden_def (V_NAME_F1 (logp1)) +HALF_WIDTH_ALIAS_F1 (logp1) diff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c index f645cc997e..5256d5e94c 100644 --- a/sysdeps/aarch64/fpu/log1pf_sve.c +++ b/sysdeps/aarch64/fpu/log1pf_sve.c @@ -98,3 +98,5 @@ svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg) return y; } + +strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1)) diff --git a/sysdeps/aarch64/fpu/log2f_advsimd.c b/sysdeps/aarch64/fpu/log2f_advsimd.c index db21836749..84effe4fe9 100644 --- a/sysdeps/aarch64/fpu/log2f_advsimd.c +++ b/sysdeps/aarch64/fpu/log2f_advsimd.c @@ -22,9 +22,9 @@ static const struct data { - uint32x4_t min_norm; + uint32x4_t off, offset_lower_bound; uint16x8_t special_bound; - uint32x4_t off, mantissa_mask; + uint32x4_t mantissa_mask; float32x4_t poly[9]; } data = { /* Coefficients generated using Remez algorithm approximate @@ -34,18 +34,22 @@ static const struct data V4 (-0x1.715458p-1f), V4 (0x1.ec701cp-2f), V4 (-0x1.7171a4p-2f), V4 (0x1.27a0b8p-2f), V4 (-0x1.e5143ep-3f), V4 (0x1.9d8ecap-3f), V4 (-0x1.c675bp-3f), V4 (0x1.9e495p-3f) }, - .min_norm = V4 (0x00800000), - .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm. */ + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab), + .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000). */ .off = V4 (0x3f2aaaab), /* 0.666667. */ .mantissa_mask = V4 (0x007fffff), }; static float32x4_t VPCS_ATTR NOINLINE -special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r, - uint16x4_t cmp) +special_case (float32x4_t n, uint32x4_t u_off, float32x4_t p, float32x4_t r, + uint16x4_t cmp, const struct data *d) { /* Fall back to scalar code. */ - return v_call_f32 (log2f, x, vfmaq_f32 (n, p, r), vmovl_u16 (cmp)); + return v_call_f32 (log2f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)), + vfmaq_f32 (n, p, r), vmovl_u16 (cmp)); } /* Fast implementation for single precision AdvSIMD log2, @@ -56,15 +60,21 @@ special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r, float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x) { const struct data *d = ptr_barrier (&data); - uint32x4_t u = vreinterpretq_u32_f32 (x); - uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm), - vget_low_u16 (d->special_bound)); + + /* To avoid having to mov x out of the way, keep u after offset has been + applied, and recover x by adding the offset back in the special-case + handler. */ + uint32x4_t u_off = vreinterpretq_u32_f32 (x); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - u = vsubq_u32 (u, d->off); + u_off = vsubq_u32 (u_off, d->off); float32x4_t n = vcvtq_f32_s32 ( - vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend. */ - u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off); + vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend. */ + + uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound), + vget_low_u16 (d->special_bound)); + + uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off); float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f)); /* y = log2(1+r) + n. */ @@ -72,7 +82,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x) float32x4_t p = v_pw_horner_8_f32 (r, r2, d->poly); if (__glibc_unlikely (v_any_u16h (special))) - return special_case (x, n, p, r, special); + return special_case (n, u_off, p, r, special, d); return vfmaq_f32 (n, p, r); } libmvec_hidden_def (V_NAME_F1 (log2)) diff --git a/sysdeps/aarch64/fpu/log2f_sve.c b/sysdeps/aarch64/fpu/log2f_sve.c index 5031c42483..939d89bfb9 100644 --- a/sysdeps/aarch64/fpu/log2f_sve.c +++ b/sysdeps/aarch64/fpu/log2f_sve.c @@ -23,6 +23,7 @@ static const struct data { float poly_02468[5]; float poly_1357[4]; + uint32_t off, lower; } data = { .poly_1357 = { /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs @@ -32,18 +33,23 @@ static const struct data }, .poly_02468 = { 0x1.715476p0f, 0x1.ec701cp-2f, 0x1.27a0b8p-2f, 0x1.9d8ecap-3f, 0x1.9e495p-3f }, + .off = 0x3f2aaaab, + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .lower = 0x00800000 - 0x3f2aaaab }; -#define Min (0x00800000) -#define Max (0x7f800000) -#define Thres (0x7f000000) /* Max - Min. */ +#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000. */ #define MantissaMask (0x007fffff) -#define Off (0x3f2aaaab) /* 0.666667. */ static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp) +special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y, + svbool_t cmp) { - return sv_call_f32 (log2f, x, y, cmp); + return sv_call_f32 ( + log2f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)), + svmla_x (svptrue_b32 (), p, r2, y), cmp); } /* Optimised implementation of SVE log2f, using the same algorithm @@ -55,19 +61,20 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg) { const struct data *d = ptr_barrier (&data); - svuint32_t u = svreinterpret_u32 (x); - svbool_t special = svcmpge (pg, svsub_x (pg, u, Min), Thres); + svuint32_t u_off = svreinterpret_u32 (x); + + u_off = svsub_x (pg, u_off, d->off); + svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - u = svsub_x (pg, u, Off); svfloat32_t n = svcvt_f32_x ( - pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend. */ - u = svand_x (pg, u, MantissaMask); - u = svadd_x (pg, u, Off); + pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend. */ + svuint32_t u = svand_x (pg, u_off, MantissaMask); + u = svadd_x (pg, u, d->off); svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f); /* y = log2(1+r) + n. */ - svfloat32_t r2 = svmul_x (pg, r, r); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); /* Evaluate polynomial using pairwise Horner scheme. */ svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]); @@ -81,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg) y = svmla_x (pg, q_01, r2, y); if (__glibc_unlikely (svptest_any (pg, special))) - return special_case (x, svmla_x (svnot_z (pg, special), n, r, y), special); - return svmla_x (pg, n, r, y); + return special_case (u_off, n, r, y, special); + return svmla_x (svptrue_b32 (), n, r, y); } diff --git a/sysdeps/aarch64/fpu/logf_advsimd.c b/sysdeps/aarch64/fpu/logf_advsimd.c index 3c0d0fcdc7..c20dbfd6c0 100644 --- a/sysdeps/aarch64/fpu/logf_advsimd.c +++ b/sysdeps/aarch64/fpu/logf_advsimd.c @@ -21,20 +21,22 @@ static const struct data { - uint32x4_t min_norm; + uint32x4_t off, offset_lower_bound; uint16x8_t special_bound; + uint32x4_t mantissa_mask; float32x4_t poly[7]; - float32x4_t ln2, tiny_bound; - uint32x4_t off, mantissa_mask; + float32x4_t ln2; } data = { /* 3.34 ulp error. */ .poly = { V4 (-0x1.3e737cp-3f), V4 (0x1.5a9aa2p-3f), V4 (-0x1.4f9934p-3f), V4 (0x1.961348p-3f), V4 (-0x1.00187cp-2f), V4 (0x1.555d7cp-2f), V4 (-0x1.ffffc8p-2f) }, .ln2 = V4 (0x1.62e43p-1f), - .tiny_bound = V4 (0x1p-126), - .min_norm = V4 (0x00800000), - .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm. */ + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab), + .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000). */ .off = V4 (0x3f2aaaab), /* 0.666667. */ .mantissa_mask = V4 (0x007fffff) }; @@ -42,32 +44,37 @@ static const struct data #define P(i) d->poly[7 - i] static float32x4_t VPCS_ATTR NOINLINE -special_case (float32x4_t x, float32x4_t y, float32x4_t r2, float32x4_t p, - uint16x4_t cmp) +special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2, + uint16x4_t cmp, const struct data *d) { /* Fall back to scalar code. */ - return v_call_f32 (logf, x, vfmaq_f32 (p, y, r2), vmovl_u16 (cmp)); + return v_call_f32 (logf, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)), + vfmaq_f32 (p, y, r2), vmovl_u16 (cmp)); } float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x) { const struct data *d = ptr_barrier (&data); float32x4_t n, p, q, r, r2, y; - uint32x4_t u; + uint32x4_t u, u_off; uint16x4_t cmp; - u = vreinterpretq_u32_f32 (x); - cmp = vcge_u16 (vsubhn_u32 (u, d->min_norm), - vget_low_u16 (d->special_bound)); + /* To avoid having to mov x out of the way, keep u after offset has been + applied, and recover x by adding the offset back in the special-case + handler. */ + u_off = vreinterpretq_u32_f32 (x); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - u = vsubq_u32 (u, d->off); + u_off = vsubq_u32 (u_off, d->off); n = vcvtq_f32_s32 ( - vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend. */ - u = vandq_u32 (u, d->mantissa_mask); + vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend. */ + u = vandq_u32 (u_off, d->mantissa_mask); u = vaddq_u32 (u, d->off); r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f)); + cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound), + vget_low_u16 (d->special_bound)); + /* y = log(1+r) + n*ln2. */ r2 = vmulq_f32 (r, r); /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))). */ @@ -80,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x) p = vfmaq_f32 (r, d->ln2, n); if (__glibc_unlikely (v_any_u16h (cmp))) - return special_case (x, y, r2, p, cmp); + return special_case (p, u_off, y, r2, cmp, d); return vfmaq_f32 (p, y, r2); } libmvec_hidden_def (V_NAME_F1 (log)) diff --git a/sysdeps/aarch64/fpu/logf_sve.c b/sysdeps/aarch64/fpu/logf_sve.c index d64e810cfe..5b9324678d 100644 --- a/sysdeps/aarch64/fpu/logf_sve.c +++ b/sysdeps/aarch64/fpu/logf_sve.c @@ -24,6 +24,7 @@ static const struct data float poly_0135[4]; float poly_246[3]; float ln2; + uint32_t off, lower; } data = { .poly_0135 = { /* Coefficients copied from the AdvSIMD routine in math/, then rearranged so @@ -32,19 +33,24 @@ static const struct data -0x1.3e737cp-3f, 0x1.5a9aa2p-3f, 0x1.961348p-3f, 0x1.555d7cp-2f }, .poly_246 = { -0x1.4f9934p-3f, -0x1.00187cp-2f, -0x1.ffffc8p-2f }, - .ln2 = 0x1.62e43p-1f + .ln2 = 0x1.62e43p-1f, + .off = 0x3f2aaaab, + /* Lower bound is the smallest positive normal float 0x00800000. For + optimised register use subnormals are detected after offset has been + subtracted, so lower bound is 0x0080000 - offset (which wraps around). */ + .lower = 0x00800000 - 0x3f2aaaab }; -#define Min (0x00800000) -#define Max (0x7f800000) -#define Thresh (0x7f000000) /* Max - Min. */ +#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000. */ #define Mask (0x007fffff) -#define Off (0x3f2aaaab) /* 0.666667. */ static svfloat32_t NOINLINE -special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp) +special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y, + svbool_t cmp) { - return sv_call_f32 (logf, x, y, cmp); + return sv_call_f32 ( + logf, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)), + svmla_x (svptrue_b32 (), p, r2, y), cmp); } /* Optimised implementation of SVE logf, using the same algorithm and @@ -55,19 +61,21 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg) { const struct data *d = ptr_barrier (&data); - svuint32_t u = svreinterpret_u32 (x); - svbool_t cmp = svcmpge (pg, svsub_x (pg, u, Min), Thresh); + svuint32_t u_off = svreinterpret_u32 (x); + + u_off = svsub_x (pg, u_off, d->off); + svbool_t cmp = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh); /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3. */ - u = svsub_x (pg, u, Off); svfloat32_t n = svcvt_f32_x ( - pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend. */ - u = svand_x (pg, u, Mask); - u = svadd_x (pg, u, Off); + pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend. */ + + svuint32_t u = svand_x (pg, u_off, Mask); + u = svadd_x (pg, u, d->off); svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f); /* y = log(1+r) + n*ln2. */ - svfloat32_t r2 = svmul_x (pg, r, r); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); /* n*ln2 + r + r2*(P6 + r*P5 + r2*(P4 + r*P3 + r2*(P2 + r*P1 + r2*P0))). */ svfloat32_t p_0135 = svld1rq (svptrue_b32 (), &d->poly_0135[0]); svfloat32_t p = svmla_lane (sv_f32 (d->poly_246[0]), r, p_0135, 1); @@ -80,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg) p = svmla_x (pg, r, n, d->ln2); if (__glibc_unlikely (svptest_any (pg, cmp))) - return special_case (x, svmla_x (svnot_z (pg, cmp), p, r2, y), cmp); + return special_case (u_off, p, r2, y, cmp); return svmla_x (pg, p, r2, y); } diff --git a/sysdeps/aarch64/fpu/sin_advsimd.c b/sysdeps/aarch64/fpu/sin_advsimd.c index a0d9d3b819..718125cbad 100644 --- a/sysdeps/aarch64/fpu/sin_advsimd.c +++ b/sysdeps/aarch64/fpu/sin_advsimd.c @@ -22,7 +22,7 @@ static const struct data { float64x2_t poly[7]; - float64x2_t range_val, inv_pi, shift, pi_1, pi_2, pi_3; + float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3; } data = { .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7), V2 (-0x1.a01a019936f27p-13), V2 (0x1.71de37a97d93ep-19), @@ -34,12 +34,13 @@ static const struct data .pi_1 = V2 (0x1.921fb54442d18p+1), .pi_2 = V2 (0x1.1a62633145c06p-53), .pi_3 = V2 (0x1.c1cd129024e09p-106), - .shift = V2 (0x1.8p52), }; #if WANT_SIMD_EXCEPT -# define TinyBound v_u64 (0x3000000000000000) /* asuint64 (0x1p-255). */ -# define Thresh v_u64 (0x1160000000000000) /* RangeVal - TinyBound. */ +/* asuint64(0x1p-253)), below which multiply by inv_pi underflows. */ +# define TinyBound v_u64 (0x3020000000000000) +/* RangeVal - TinyBound. */ +# define Thresh v_u64 (0x1160000000000000) #endif #define C(i) d->poly[i] @@ -72,16 +73,15 @@ float64x2_t VPCS_ATTR V_NAME_D1 (sin) (float64x2_t x) fenv). These lanes will be fixed by special-case handler later. */ uint64x2_t ir = vreinterpretq_u64_f64 (vabsq_f64 (x)); cmp = vcgeq_u64 (vsubq_u64 (ir, TinyBound), Thresh); - r = vbslq_f64 (cmp, vreinterpretq_f64_u64 (cmp), x); + r = vreinterpretq_f64_u64 (vbicq_u64 (vreinterpretq_u64_f64 (x), cmp)); #else r = x; cmp = vcageq_f64 (x, d->range_val); #endif /* n = rint(|x|/pi). */ - n = vfmaq_f64 (d->shift, d->inv_pi, r); - odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63); - n = vsubq_f64 (n, d->shift); + n = vrndaq_f64 (vmulq_f64 (r, d->inv_pi)); + odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63); /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */ r = vfmsq_f64 (r, d->pi_1, n); diff --git a/sysdeps/aarch64/fpu/sinf_advsimd.c b/sysdeps/aarch64/fpu/sinf_advsimd.c index 375dfc3331..6ee9a23d5b 100644 --- a/sysdeps/aarch64/fpu/sinf_advsimd.c +++ b/sysdeps/aarch64/fpu/sinf_advsimd.c @@ -22,7 +22,7 @@ static const struct data { float32x4_t poly[4]; - float32x4_t range_val, inv_pi, shift, pi_1, pi_2, pi_3; + float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3; } data = { /* 1.886 ulp error. */ .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f), @@ -33,13 +33,14 @@ static const struct data .pi_3 = V4 (-0x1.ee59dap-49f), .inv_pi = V4 (0x1.45f306p-2f), - .shift = V4 (0x1.8p+23f), .range_val = V4 (0x1p20f) }; #if WANT_SIMD_EXCEPT -# define TinyBound v_u32 (0x21000000) /* asuint32(0x1p-61f). */ -# define Thresh v_u32 (0x28800000) /* RangeVal - TinyBound. */ +/* asuint32(0x1p-59f), below which multiply by inv_pi underflows. */ +# define TinyBound v_u32 (0x22000000) +/* RangeVal - TinyBound. */ +# define Thresh v_u32 (0x27800000) #endif #define C(i) d->poly[i] @@ -64,23 +65,22 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sin) (float32x4_t x) /* If fenv exceptions are to be triggered correctly, set any special lanes to 1 (which is neutral w.r.t. fenv). These lanes will be fixed by special-case handler later. */ - r = vbslq_f32 (cmp, vreinterpretq_f32_u32 (cmp), x); + r = vreinterpretq_f32_u32 (vbicq_u32 (vreinterpretq_u32_f32 (x), cmp)); #else r = x; cmp = vcageq_f32 (x, d->range_val); #endif - /* n = rint(|x|/pi) */ - n = vfmaq_f32 (d->shift, d->inv_pi, r); - odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31); - n = vsubq_f32 (n, d->shift); + /* n = rint(|x|/pi). */ + n = vrndaq_f32 (vmulq_f32 (r, d->inv_pi)); + odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31); - /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2) */ + /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */ r = vfmsq_f32 (r, d->pi_1, n); r = vfmsq_f32 (r, d->pi_2, n); r = vfmsq_f32 (r, d->pi_3, n); - /* y = sin(r) */ + /* y = sin(r). */ r2 = vmulq_f32 (r, r); y = vfmaq_f32 (C (2), C (3), r2); y = vfmaq_f32 (C (1), y, r2); diff --git a/sysdeps/aarch64/fpu/sinhf_advsimd.c b/sysdeps/aarch64/fpu/sinhf_advsimd.c index 6bb7482dc2..c6ed7598e7 100644 --- a/sysdeps/aarch64/fpu/sinhf_advsimd.c +++ b/sysdeps/aarch64/fpu/sinhf_advsimd.c @@ -23,15 +23,13 @@ static const struct data { struct v_expm1f_data expm1f_consts; - uint32x4_t halff; #if WANT_SIMD_EXCEPT uint32x4_t tiny_bound, thresh; #else - uint32x4_t oflow_bound; + float32x4_t oflow_bound; #endif } data = { .expm1f_consts = V_EXPM1F_DATA, - .halff = V4 (0x3f000000), #if WANT_SIMD_EXCEPT /* 0x1.6a09e8p-32, below which expm1f underflows. */ .tiny_bound = V4 (0x2fb504f4), @@ -39,14 +37,15 @@ static const struct data .thresh = V4 (0x12fbbbb3), #else /* 0x1.61814ep+6, above which expm1f helper overflows. */ - .oflow_bound = V4 (0x42b0c0a7), + .oflow_bound = V4 (0x1.61814ep+6), #endif }; static float32x4_t NOINLINE VPCS_ATTR -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, float32x4_t t, float32x4_t halfsign, + uint32x4_t special) { - return v_call_f32 (sinhf, x, y, special); + return v_call_f32 (sinhf, x, vmulq_f32 (t, halfsign), special); } /* Approximation for vector single-precision sinh(x) using expm1. @@ -60,15 +59,15 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x) uint32x4_t ix = vreinterpretq_u32_f32 (x); float32x4_t ax = vabsq_f32 (x); - uint32x4_t iax = vreinterpretq_u32_f32 (ax); - uint32x4_t sign = veorq_u32 (ix, iax); - float32x4_t halfsign = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->halff)); + float32x4_t halfsign = vreinterpretq_f32_u32 ( + vbslq_u32 (v_u32 (0x80000000), ix, vreinterpretq_u32_f32 (v_f32 (0.5)))); #if WANT_SIMD_EXCEPT - uint32x4_t special = vcgeq_u32 (vsubq_u32 (iax, d->tiny_bound), d->thresh); + uint32x4_t special = vcgeq_u32 ( + vsubq_u32 (vreinterpretq_u32_f32 (ax), d->tiny_bound), d->thresh); ax = v_zerofy_f32 (ax, special); #else - uint32x4_t special = vcgeq_u32 (iax, d->oflow_bound); + uint32x4_t special = vcageq_f32 (x, d->oflow_bound); #endif /* Up to the point that expm1f overflows, we can use it to calculate sinhf @@ -80,7 +79,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x) /* Fall back to the scalar variant for any lanes that should trigger an exception. */ if (__glibc_unlikely (v_any_u32 (special))) - return special_case (x, vmulq_f32 (t, halfsign), special); + return special_case (x, t, halfsign, special); return vmulq_f32 (t, halfsign); } diff --git a/sysdeps/aarch64/fpu/sv_erf_data.c b/sysdeps/aarch64/fpu/sv_erf_data.c deleted file mode 100644 index a53878f893..0000000000 --- a/sysdeps/aarch64/fpu/sv_erf_data.c +++ /dev/null @@ -1,1570 +0,0 @@ -/* Table for SVE erf approximation - - Copyright (C) 2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include "vecmath_config.h" - -/* Lookup table used in vector erf. - For each possible rounded input r (multiples of 1/128), between - r = 0.0 and r = 6.0 (769 values): - - the first entry __erf_data.tab.erf contains the values of erf(r), - - the second entry __erf_data.tab.scale contains the values of - 2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the - algorithm, since lookup is performed only for x >= 1/64-1/512. */ -const struct sv_erf_data __sv_erf_data = { - .erf = { 0x0.0000000000000p+0, - 0x1.20dbf3deb1340p-7, - 0x1.20d77083f17a0p-6, - 0x1.b137e0cf584dcp-6, - 0x1.20c5645dd2538p-5, - 0x1.68e5d3bbc9526p-5, - 0x1.b0fafef135745p-5, - 0x1.f902a77bd3821p-5, - 0x1.207d480e90658p-4, - 0x1.44703e87e8593p-4, - 0x1.68591a1e83b5dp-4, - 0x1.8c36beb8a8d23p-4, - 0x1.b0081148a873ap-4, - 0x1.d3cbf7e70a4b3p-4, - 0x1.f78159ec8bb50p-4, - 0x1.0d939005f65e5p-3, - 0x1.1f5e1a35c3b89p-3, - 0x1.311fc15f56d14p-3, - 0x1.42d7fc2f64959p-3, - 0x1.548642321d7c6p-3, - 0x1.662a0bdf7a89fp-3, - 0x1.77c2d2a765f9ep-3, - 0x1.895010fdbdbfdp-3, - 0x1.9ad142662e14dp-3, - 0x1.ac45e37fe2526p-3, - 0x1.bdad72110a648p-3, - 0x1.cf076d1233237p-3, - 0x1.e05354b96ff36p-3, - 0x1.f190aa85540e2p-3, - 0x1.015f78a3dcf3dp-2, - 0x1.09eed6982b948p-2, - 0x1.127631eb8de32p-2, - 0x1.1af54e232d609p-2, - 0x1.236bef825d9a2p-2, - 0x1.2bd9db0f7827fp-2, - 0x1.343ed6989b7d9p-2, - 0x1.3c9aa8b84bedap-2, - 0x1.44ed18d9f6462p-2, - 0x1.4d35ef3e5372ep-2, - 0x1.5574f4ffac98ep-2, - 0x1.5da9f415ff23fp-2, - 0x1.65d4b75b00471p-2, - 0x1.6df50a8dff772p-2, - 0x1.760aba57a76bfp-2, - 0x1.7e15944d9d3e4p-2, - 0x1.861566f5fd3c0p-2, - 0x1.8e0a01cab516bp-2, - 0x1.95f3353cbb146p-2, - 0x1.9dd0d2b721f39p-2, - 0x1.a5a2aca209394p-2, - 0x1.ad68966569a87p-2, - 0x1.b522646bbda68p-2, - 0x1.bccfec24855b8p-2, - 0x1.c4710406a65fcp-2, - 0x1.cc058392a6d2dp-2, - 0x1.d38d4354c3bd0p-2, - 0x1.db081ce6e2a48p-2, - 0x1.e275eaf25e458p-2, - 0x1.e9d68931ae650p-2, - 0x1.f129d471eabb1p-2, - 0x1.f86faa9428f9dp-2, - 0x1.ffa7ea8eb5fd0p-2, - 0x1.03693a371519cp-1, - 0x1.06f794ab2cae7p-1, - 0x1.0a7ef5c18edd2p-1, - 0x1.0dff4f247f6c6p-1, - 0x1.1178930ada115p-1, - 0x1.14eab43841b55p-1, - 0x1.1855a5fd3dd50p-1, - 0x1.1bb95c3746199p-1, - 0x1.1f15cb50bc4dep-1, - 0x1.226ae840d4d70p-1, - 0x1.25b8a88b6dd7fp-1, - 0x1.28ff0240d52cdp-1, - 0x1.2c3debfd7d6c1p-1, - 0x1.2f755ce9a21f4p-1, - 0x1.32a54cb8db67bp-1, - 0x1.35cdb3a9a144dp-1, - 0x1.38ee8a84beb71p-1, - 0x1.3c07ca9cb4f9ep-1, - 0x1.3f196dcd0f135p-1, - 0x1.42236e79a5fa6p-1, - 0x1.4525c78dd5966p-1, - 0x1.4820747ba2dc2p-1, - 0x1.4b13713ad3513p-1, - 0x1.4dfeba47f63ccp-1, - 0x1.50e24ca35fd2cp-1, - 0x1.53be25d016a4fp-1, - 0x1.569243d2b3a9bp-1, - 0x1.595ea53035283p-1, - 0x1.5c2348ecc4dc3p-1, - 0x1.5ee02e8a71a53p-1, - 0x1.61955607dd15dp-1, - 0x1.6442bfdedd397p-1, - 0x1.66e86d0312e82p-1, - 0x1.69865ee075011p-1, - 0x1.6c1c9759d0e5fp-1, - 0x1.6eab18c74091bp-1, - 0x1.7131e5f496a5ap-1, - 0x1.73b1021fc0cb8p-1, - 0x1.762870f720c6fp-1, - 0x1.78983697dc96fp-1, - 0x1.7b00578c26037p-1, - 0x1.7d60d8c979f7bp-1, - 0x1.7fb9bfaed8078p-1, - 0x1.820b1202f27fbp-1, - 0x1.8454d5f25760dp-1, - 0x1.8697120d92a4ap-1, - 0x1.88d1cd474a2e0p-1, - 0x1.8b050ef253c37p-1, - 0x1.8d30debfc572ep-1, - 0x1.8f5544bd00c04p-1, - 0x1.91724951b8fc6p-1, - 0x1.9387f53df5238p-1, - 0x1.959651980da31p-1, - 0x1.979d67caa6631p-1, - 0x1.999d4192a5715p-1, - 0x1.9b95e8fd26abap-1, - 0x1.9d8768656cc42p-1, - 0x1.9f71ca72cffb6p-1, - 0x1.a1551a16aaeafp-1, - 0x1.a331628a45b92p-1, - 0x1.a506af4cc00f4p-1, - 0x1.a6d50c20fa293p-1, - 0x1.a89c850b7d54dp-1, - 0x1.aa5d265064366p-1, - 0x1.ac16fc7143263p-1, - 0x1.adca142b10f98p-1, - 0x1.af767a741088bp-1, - 0x1.b11c3c79bb424p-1, - 0x1.b2bb679ead19cp-1, - 0x1.b4540978921eep-1, - 0x1.b5e62fce16095p-1, - 0x1.b771e894d602ep-1, - 0x1.b8f741ef54f83p-1, - 0x1.ba764a2af2b78p-1, - 0x1.bbef0fbde6221p-1, - 0x1.bd61a1453ab44p-1, - 0x1.bece0d82d1a5cp-1, - 0x1.c034635b66e23p-1, - 0x1.c194b1d49a184p-1, - 0x1.c2ef0812fc1bdp-1, - 0x1.c443755820d64p-1, - 0x1.c5920900b5fd1p-1, - 0x1.c6dad2829ec62p-1, - 0x1.c81de16b14cefp-1, - 0x1.c95b455cce69dp-1, - 0x1.ca930e0e2a825p-1, - 0x1.cbc54b476248dp-1, - 0x1.ccf20ce0c0d27p-1, - 0x1.ce1962c0e0d8bp-1, - 0x1.cf3b5cdaf0c39p-1, - 0x1.d0580b2cfd249p-1, - 0x1.d16f7dbe41ca0p-1, - 0x1.d281c49d818d0p-1, - 0x1.d38eefdf64fddp-1, - 0x1.d4970f9ce00d9p-1, - 0x1.d59a33f19ed42p-1, - 0x1.d6986cfa798e7p-1, - 0x1.d791cad3eff01p-1, - 0x1.d8865d98abe01p-1, - 0x1.d97635600bb89p-1, - 0x1.da61623cb41e0p-1, - 0x1.db47f43b2980dp-1, - 0x1.dc29fb60715afp-1, - 0x1.dd0787a8bb39dp-1, - 0x1.dde0a90611a0dp-1, - 0x1.deb56f5f12d28p-1, - 0x1.df85ea8db188ep-1, - 0x1.e0522a5dfda73p-1, - 0x1.e11a3e8cf4eb8p-1, - 0x1.e1de36c75ba58p-1, - 0x1.e29e22a89d766p-1, - 0x1.e35a11b9b61cep-1, - 0x1.e4121370224ccp-1, - 0x1.e4c6372cd8927p-1, - 0x1.e5768c3b4a3fcp-1, - 0x1.e62321d06c5e0p-1, - 0x1.e6cc0709c8a0dp-1, - 0x1.e7714aec96534p-1, - 0x1.e812fc64db369p-1, - 0x1.e8b12a44944a8p-1, - 0x1.e94be342e6743p-1, - 0x1.e9e335fb56f87p-1, - 0x1.ea7730ed0bbb9p-1, - 0x1.eb07e27a133aap-1, - 0x1.eb9558e6b42cep-1, - 0x1.ec1fa258c4beap-1, - 0x1.eca6ccd709544p-1, - 0x1.ed2ae6489ac1ep-1, - 0x1.edabfc7453e63p-1, - 0x1.ee2a1d004692cp-1, - 0x1.eea5557137ae0p-1, - 0x1.ef1db32a2277cp-1, - 0x1.ef93436bc2daap-1, - 0x1.f006135426b26p-1, - 0x1.f0762fde45ee6p-1, - 0x1.f0e3a5e1a1788p-1, - 0x1.f14e8211e8c55p-1, - 0x1.f1b6d0fea5f4dp-1, - 0x1.f21c9f12f0677p-1, - 0x1.f27ff89525acfp-1, - 0x1.f2e0e9a6a8b09p-1, - 0x1.f33f7e43a706bp-1, - 0x1.f39bc242e43e6p-1, - 0x1.f3f5c1558b19ep-1, - 0x1.f44d870704911p-1, - 0x1.f4a31ebcd47dfp-1, - 0x1.f4f693b67bd77p-1, - 0x1.f547f10d60597p-1, - 0x1.f59741b4b97cfp-1, - 0x1.f5e4907982a07p-1, - 0x1.f62fe80272419p-1, - 0x1.f67952cff6282p-1, - 0x1.f6c0db3c34641p-1, - 0x1.f7068b7b10fd9p-1, - 0x1.f74a6d9a38383p-1, - 0x1.f78c8b812d498p-1, - 0x1.f7cceef15d631p-1, - 0x1.f80ba18636f07p-1, - 0x1.f848acb544e95p-1, - 0x1.f88419ce4e184p-1, - 0x1.f8bdf1fb78370p-1, - 0x1.f8f63e416ebffp-1, - 0x1.f92d077f8d56dp-1, - 0x1.f96256700da8ep-1, - 0x1.f99633a838a57p-1, - 0x1.f9c8a7989af0dp-1, - 0x1.f9f9ba8d3c733p-1, - 0x1.fa2974addae45p-1, - 0x1.fa57ddfe27376p-1, - 0x1.fa84fe5e05c8dp-1, - 0x1.fab0dd89d1309p-1, - 0x1.fadb831a9f9c3p-1, - 0x1.fb04f6868a944p-1, - 0x1.fb2d3f20f9101p-1, - 0x1.fb54641aebbc9p-1, - 0x1.fb7a6c834b5a2p-1, - 0x1.fb9f5f4739170p-1, - 0x1.fbc3433260ca5p-1, - 0x1.fbe61eef4cf6ap-1, - 0x1.fc07f907bc794p-1, - 0x1.fc28d7e4f9cd0p-1, - 0x1.fc48c1d033c7ap-1, - 0x1.fc67bcf2d7b8fp-1, - 0x1.fc85cf56ecd38p-1, - 0x1.fca2fee770c79p-1, - 0x1.fcbf5170b578bp-1, - 0x1.fcdacca0bfb73p-1, - 0x1.fcf57607a6e7cp-1, - 0x1.fd0f5317f582fp-1, - 0x1.fd2869270a56fp-1, - 0x1.fd40bd6d7a785p-1, - 0x1.fd58550773cb5p-1, - 0x1.fd6f34f52013ap-1, - 0x1.fd85621b0876dp-1, - 0x1.fd9ae142795e3p-1, - 0x1.fdafb719e6a69p-1, - 0x1.fdc3e835500b3p-1, - 0x1.fdd7790ea5bc0p-1, - 0x1.fdea6e062d0c9p-1, - 0x1.fdfccb62e52d3p-1, - 0x1.fe0e9552ebdd6p-1, - 0x1.fe1fcfebe2083p-1, - 0x1.fe307f2b503d0p-1, - 0x1.fe40a6f70af4bp-1, - 0x1.fe504b1d9696cp-1, - 0x1.fe5f6f568b301p-1, - 0x1.fe6e1742f7cf6p-1, - 0x1.fe7c466dc57a1p-1, - 0x1.fe8a004c19ae6p-1, - 0x1.fe97483db8670p-1, - 0x1.fea4218d6594ap-1, - 0x1.feb08f7146046p-1, - 0x1.febc950b3fa75p-1, - 0x1.fec835695932ep-1, - 0x1.fed37386190fbp-1, - 0x1.fede5248e38f4p-1, - 0x1.fee8d486585eep-1, - 0x1.fef2fd00af31ap-1, - 0x1.fefcce6813974p-1, - 0x1.ff064b5afffbep-1, - 0x1.ff0f766697c76p-1, - 0x1.ff18520700971p-1, - 0x1.ff20e0a7ba8c2p-1, - 0x1.ff2924a3f7a83p-1, - 0x1.ff312046f2339p-1, - 0x1.ff38d5cc4227fp-1, - 0x1.ff404760319b4p-1, - 0x1.ff47772010262p-1, - 0x1.ff4e671a85425p-1, - 0x1.ff55194fe19dfp-1, - 0x1.ff5b8fb26f5f6p-1, - 0x1.ff61cc26c1578p-1, - 0x1.ff67d08401202p-1, - 0x1.ff6d9e943c231p-1, - 0x1.ff733814af88cp-1, - 0x1.ff789eb6130c9p-1, - 0x1.ff7dd41ce2b4dp-1, - 0x1.ff82d9e1a76d8p-1, - 0x1.ff87b1913e853p-1, - 0x1.ff8c5cad200a5p-1, - 0x1.ff90dcaba4096p-1, - 0x1.ff9532f846ab0p-1, - 0x1.ff9960f3eb327p-1, - 0x1.ff9d67f51ddbap-1, - 0x1.ffa14948549a7p-1, - 0x1.ffa506302ebaep-1, - 0x1.ffa89fe5b3625p-1, - 0x1.ffac17988ef4bp-1, - 0x1.ffaf6e6f4f5c0p-1, - 0x1.ffb2a5879f35ep-1, - 0x1.ffb5bdf67fe6fp-1, - 0x1.ffb8b8c88295fp-1, - 0x1.ffbb970200110p-1, - 0x1.ffbe599f4f9d9p-1, - 0x1.ffc10194fcb64p-1, - 0x1.ffc38fcffbb7cp-1, - 0x1.ffc60535dd7f5p-1, - 0x1.ffc862a501fd7p-1, - 0x1.ffcaa8f4c9beap-1, - 0x1.ffccd8f5c66d1p-1, - 0x1.ffcef371ea4d7p-1, - 0x1.ffd0f92cb6ba7p-1, - 0x1.ffd2eae369a07p-1, - 0x1.ffd4c94d29fdbp-1, - 0x1.ffd6951b33686p-1, - 0x1.ffd84ef9009eep-1, - 0x1.ffd9f78c7524ap-1, - 0x1.ffdb8f7605ee7p-1, - 0x1.ffdd1750e1220p-1, - 0x1.ffde8fb314ebfp-1, - 0x1.ffdff92db56e5p-1, - 0x1.ffe1544d01ccbp-1, - 0x1.ffe2a1988857cp-1, - 0x1.ffe3e19349dc7p-1, - 0x1.ffe514bbdc197p-1, - 0x1.ffe63b8c8b5f7p-1, - 0x1.ffe7567b7b5e1p-1, - 0x1.ffe865fac722bp-1, - 0x1.ffe96a78a04a9p-1, - 0x1.ffea645f6d6dap-1, - 0x1.ffeb5415e7c44p-1, - 0x1.ffec39ff380b9p-1, - 0x1.ffed167b12ac2p-1, - 0x1.ffede9e5d3262p-1, - 0x1.ffeeb49896c6dp-1, - 0x1.ffef76e956a9fp-1, - 0x1.fff0312b010b5p-1, - 0x1.fff0e3ad91ec2p-1, - 0x1.fff18ebe2b0e1p-1, - 0x1.fff232a72b48ep-1, - 0x1.fff2cfb0453d9p-1, - 0x1.fff3661e9569dp-1, - 0x1.fff3f634b79f9p-1, - 0x1.fff48032dbe40p-1, - 0x1.fff50456dab8cp-1, - 0x1.fff582dc48d30p-1, - 0x1.fff5fbfc8a439p-1, - 0x1.fff66feee5129p-1, - 0x1.fff6dee89352ep-1, - 0x1.fff7491cd4af6p-1, - 0x1.fff7aebcff755p-1, - 0x1.fff80ff8911fdp-1, - 0x1.fff86cfd3e657p-1, - 0x1.fff8c5f702ccfp-1, - 0x1.fff91b102fca8p-1, - 0x1.fff96c717b695p-1, - 0x1.fff9ba420e834p-1, - 0x1.fffa04a7928b1p-1, - 0x1.fffa4bc63ee9ap-1, - 0x1.fffa8fc0e5f33p-1, - 0x1.fffad0b901755p-1, - 0x1.fffb0ecebee1bp-1, - 0x1.fffb4a210b172p-1, - 0x1.fffb82cd9dcbfp-1, - 0x1.fffbb8f1049c6p-1, - 0x1.fffbeca6adbe9p-1, - 0x1.fffc1e08f25f5p-1, - 0x1.fffc4d3120aa1p-1, - 0x1.fffc7a37857d2p-1, - 0x1.fffca53375ce3p-1, - 0x1.fffcce3b57bffp-1, - 0x1.fffcf564ab6b7p-1, - 0x1.fffd1ac4135f9p-1, - 0x1.fffd3e6d5cd87p-1, - 0x1.fffd607387b07p-1, - 0x1.fffd80e8ce0dap-1, - 0x1.fffd9fdeabccep-1, - 0x1.fffdbd65e5ad0p-1, - 0x1.fffdd98e903b2p-1, - 0x1.fffdf46816833p-1, - 0x1.fffe0e0140857p-1, - 0x1.fffe26683972ap-1, - 0x1.fffe3daa95b18p-1, - 0x1.fffe53d558ae9p-1, - 0x1.fffe68f4fa777p-1, - 0x1.fffe7d156d244p-1, - 0x1.fffe904222101p-1, - 0x1.fffea2860ee1ep-1, - 0x1.fffeb3ebb267bp-1, - 0x1.fffec47d19457p-1, - 0x1.fffed443e2787p-1, - 0x1.fffee34943b15p-1, - 0x1.fffef1960d85dp-1, - 0x1.fffeff32af7afp-1, - 0x1.ffff0c273bea2p-1, - 0x1.ffff187b6bc0ep-1, - 0x1.ffff2436a21dcp-1, - 0x1.ffff2f5fefcaap-1, - 0x1.ffff39fe16963p-1, - 0x1.ffff44178c8d2p-1, - 0x1.ffff4db27f146p-1, - 0x1.ffff56d4d5e5ep-1, - 0x1.ffff5f8435efcp-1, - 0x1.ffff67c604180p-1, - 0x1.ffff6f9f67e55p-1, - 0x1.ffff77154e0d6p-1, - 0x1.ffff7e2c6aea2p-1, - 0x1.ffff84e93cd75p-1, - 0x1.ffff8b500e77cp-1, - 0x1.ffff9164f8e46p-1, - 0x1.ffff972be5c59p-1, - 0x1.ffff9ca891572p-1, - 0x1.ffffa1de8c582p-1, - 0x1.ffffa6d13de73p-1, - 0x1.ffffab83e54b8p-1, - 0x1.ffffaff99bac4p-1, - 0x1.ffffb43555b5fp-1, - 0x1.ffffb839e52f3p-1, - 0x1.ffffbc09fa7cdp-1, - 0x1.ffffbfa82616bp-1, - 0x1.ffffc316d9ed0p-1, - 0x1.ffffc6586abf6p-1, - 0x1.ffffc96f1165ep-1, - 0x1.ffffcc5cec0c1p-1, - 0x1.ffffcf23ff5fcp-1, - 0x1.ffffd1c637b2bp-1, - 0x1.ffffd4456a10dp-1, - 0x1.ffffd6a3554a1p-1, - 0x1.ffffd8e1a2f22p-1, - 0x1.ffffdb01e8546p-1, - 0x1.ffffdd05a75eap-1, - 0x1.ffffdeee4f810p-1, - 0x1.ffffe0bd3e852p-1, - 0x1.ffffe273c15b7p-1, - 0x1.ffffe41314e06p-1, - 0x1.ffffe59c6698bp-1, - 0x1.ffffe710d565ep-1, - 0x1.ffffe8717232dp-1, - 0x1.ffffe9bf4098cp-1, - 0x1.ffffeafb377d5p-1, - 0x1.ffffec2641a9ep-1, - 0x1.ffffed413e5b7p-1, - 0x1.ffffee4d01cd6p-1, - 0x1.ffffef4a55bd4p-1, - 0x1.fffff039f9e8fp-1, - 0x1.fffff11ca4876p-1, - 0x1.fffff1f302bc1p-1, - 0x1.fffff2bdb904dp-1, - 0x1.fffff37d63a36p-1, - 0x1.fffff43297019p-1, - 0x1.fffff4dde0118p-1, - 0x1.fffff57fc4a95p-1, - 0x1.fffff618c3da6p-1, - 0x1.fffff6a956450p-1, - 0x1.fffff731ee681p-1, - 0x1.fffff7b2f8ed6p-1, - 0x1.fffff82cdcf1bp-1, - 0x1.fffff89ffc4aap-1, - 0x1.fffff90cb3c81p-1, - 0x1.fffff9735b73bp-1, - 0x1.fffff9d446cccp-1, - 0x1.fffffa2fc5015p-1, - 0x1.fffffa8621251p-1, - 0x1.fffffad7a2652p-1, - 0x1.fffffb248c39dp-1, - 0x1.fffffb6d1e95dp-1, - 0x1.fffffbb196132p-1, - 0x1.fffffbf22c1e2p-1, - 0x1.fffffc2f171e3p-1, - 0x1.fffffc688a9cfp-1, - 0x1.fffffc9eb76acp-1, - 0x1.fffffcd1cbc28p-1, - 0x1.fffffd01f36afp-1, - 0x1.fffffd2f57d68p-1, - 0x1.fffffd5a2041fp-1, - 0x1.fffffd8271d12p-1, - 0x1.fffffda86faa9p-1, - 0x1.fffffdcc3b117p-1, - 0x1.fffffdedf37edp-1, - 0x1.fffffe0db6b91p-1, - 0x1.fffffe2ba0ea5p-1, - 0x1.fffffe47ccb60p-1, - 0x1.fffffe62534d4p-1, - 0x1.fffffe7b4c81ep-1, - 0x1.fffffe92ced93p-1, - 0x1.fffffea8ef9cfp-1, - 0x1.fffffebdc2ec6p-1, - 0x1.fffffed15bcbap-1, - 0x1.fffffee3cc32cp-1, - 0x1.fffffef5251c2p-1, - 0x1.ffffff0576917p-1, - 0x1.ffffff14cfb92p-1, - 0x1.ffffff233ee1dp-1, - 0x1.ffffff30d18e8p-1, - 0x1.ffffff3d9480fp-1, - 0x1.ffffff4993c46p-1, - 0x1.ffffff54dab72p-1, - 0x1.ffffff5f74141p-1, - 0x1.ffffff6969fb8p-1, - 0x1.ffffff72c5fb6p-1, - 0x1.ffffff7b91176p-1, - 0x1.ffffff83d3d07p-1, - 0x1.ffffff8b962bep-1, - 0x1.ffffff92dfba2p-1, - 0x1.ffffff99b79d2p-1, - 0x1.ffffffa0248e8p-1, - 0x1.ffffffa62ce54p-1, - 0x1.ffffffabd69b4p-1, - 0x1.ffffffb127525p-1, - 0x1.ffffffb624592p-1, - 0x1.ffffffbad2affp-1, - 0x1.ffffffbf370cdp-1, - 0x1.ffffffc355dfdp-1, - 0x1.ffffffc733572p-1, - 0x1.ffffffcad3626p-1, - 0x1.ffffffce39b67p-1, - 0x1.ffffffd169d0cp-1, - 0x1.ffffffd466fa5p-1, - 0x1.ffffffd7344aap-1, - 0x1.ffffffd9d4aabp-1, - 0x1.ffffffdc4ad7ap-1, - 0x1.ffffffde9964ep-1, - 0x1.ffffffe0c2bf0p-1, - 0x1.ffffffe2c92dbp-1, - 0x1.ffffffe4aed5ep-1, - 0x1.ffffffe675bbdp-1, - 0x1.ffffffe81fc4ep-1, - 0x1.ffffffe9aeb97p-1, - 0x1.ffffffeb24467p-1, - 0x1.ffffffec81ff2p-1, - 0x1.ffffffedc95e7p-1, - 0x1.ffffffeefbc85p-1, - 0x1.fffffff01a8b6p-1, - 0x1.fffffff126e1ep-1, - 0x1.fffffff221f30p-1, - 0x1.fffffff30cd3fp-1, - 0x1.fffffff3e8892p-1, - 0x1.fffffff4b606fp-1, - 0x1.fffffff57632dp-1, - 0x1.fffffff629e44p-1, - 0x1.fffffff6d1e56p-1, - 0x1.fffffff76ef3fp-1, - 0x1.fffffff801c1fp-1, - 0x1.fffffff88af67p-1, - 0x1.fffffff90b2e3p-1, - 0x1.fffffff982fc1p-1, - 0x1.fffffff9f2e9fp-1, - 0x1.fffffffa5b790p-1, - 0x1.fffffffabd229p-1, - 0x1.fffffffb18582p-1, - 0x1.fffffffb6d844p-1, - 0x1.fffffffbbd0aap-1, - 0x1.fffffffc0748fp-1, - 0x1.fffffffc4c96cp-1, - 0x1.fffffffc8d462p-1, - 0x1.fffffffcc9a41p-1, - 0x1.fffffffd01f89p-1, - 0x1.fffffffd36871p-1, - 0x1.fffffffd678edp-1, - 0x1.fffffffd954aep-1, - 0x1.fffffffdbff2ap-1, - 0x1.fffffffde7ba0p-1, - 0x1.fffffffe0cd16p-1, - 0x1.fffffffe2f664p-1, - 0x1.fffffffe4fa30p-1, - 0x1.fffffffe6daf7p-1, - 0x1.fffffffe89b0cp-1, - 0x1.fffffffea3c9ap-1, - 0x1.fffffffebc1a9p-1, - 0x1.fffffffed2c21p-1, - 0x1.fffffffee7dc8p-1, - 0x1.fffffffefb847p-1, - 0x1.ffffffff0dd2bp-1, - 0x1.ffffffff1ede9p-1, - 0x1.ffffffff2ebdap-1, - 0x1.ffffffff3d843p-1, - 0x1.ffffffff4b453p-1, - 0x1.ffffffff58126p-1, - 0x1.ffffffff63fc3p-1, - 0x1.ffffffff6f121p-1, - 0x1.ffffffff79626p-1, - 0x1.ffffffff82fabp-1, - 0x1.ffffffff8be77p-1, - 0x1.ffffffff94346p-1, - 0x1.ffffffff9bec8p-1, - 0x1.ffffffffa319fp-1, - 0x1.ffffffffa9c63p-1, - 0x1.ffffffffaffa4p-1, - 0x1.ffffffffb5be5p-1, - 0x1.ffffffffbb1a2p-1, - 0x1.ffffffffc014ep-1, - 0x1.ffffffffc4b56p-1, - 0x1.ffffffffc901cp-1, - 0x1.ffffffffccfffp-1, - 0x1.ffffffffd0b56p-1, - 0x1.ffffffffd4271p-1, - 0x1.ffffffffd759dp-1, - 0x1.ffffffffda520p-1, - 0x1.ffffffffdd13cp-1, - 0x1.ffffffffdfa2dp-1, - 0x1.ffffffffe202dp-1, - 0x1.ffffffffe4371p-1, - 0x1.ffffffffe642ap-1, - 0x1.ffffffffe8286p-1, - 0x1.ffffffffe9eb0p-1, - 0x1.ffffffffeb8d0p-1, - 0x1.ffffffffed10ap-1, - 0x1.ffffffffee782p-1, - 0x1.ffffffffefc57p-1, - 0x1.fffffffff0fa7p-1, - 0x1.fffffffff218fp-1, - 0x1.fffffffff3227p-1, - 0x1.fffffffff4188p-1, - 0x1.fffffffff4fc9p-1, - 0x1.fffffffff5cfdp-1, - 0x1.fffffffff6939p-1, - 0x1.fffffffff748ep-1, - 0x1.fffffffff7f0dp-1, - 0x1.fffffffff88c5p-1, - 0x1.fffffffff91c6p-1, - 0x1.fffffffff9a1bp-1, - 0x1.fffffffffa1d2p-1, - 0x1.fffffffffa8f6p-1, - 0x1.fffffffffaf92p-1, - 0x1.fffffffffb5b0p-1, - 0x1.fffffffffbb58p-1, - 0x1.fffffffffc095p-1, - 0x1.fffffffffc56dp-1, - 0x1.fffffffffc9e8p-1, - 0x1.fffffffffce0dp-1, - 0x1.fffffffffd1e1p-1, - 0x1.fffffffffd56cp-1, - 0x1.fffffffffd8b3p-1, - 0x1.fffffffffdbbap-1, - 0x1.fffffffffde86p-1, - 0x1.fffffffffe11dp-1, - 0x1.fffffffffe380p-1, - 0x1.fffffffffe5b6p-1, - 0x1.fffffffffe7c0p-1, - 0x1.fffffffffe9a2p-1, - 0x1.fffffffffeb60p-1, - 0x1.fffffffffecfbp-1, - 0x1.fffffffffee77p-1, - 0x1.fffffffffefd6p-1, - 0x1.ffffffffff11ap-1, - 0x1.ffffffffff245p-1, - 0x1.ffffffffff359p-1, - 0x1.ffffffffff457p-1, - 0x1.ffffffffff542p-1, - 0x1.ffffffffff61bp-1, - 0x1.ffffffffff6e3p-1, - 0x1.ffffffffff79bp-1, - 0x1.ffffffffff845p-1, - 0x1.ffffffffff8e2p-1, - 0x1.ffffffffff973p-1, - 0x1.ffffffffff9f8p-1, - 0x1.ffffffffffa73p-1, - 0x1.ffffffffffae4p-1, - 0x1.ffffffffffb4cp-1, - 0x1.ffffffffffbadp-1, - 0x1.ffffffffffc05p-1, - 0x1.ffffffffffc57p-1, - 0x1.ffffffffffca2p-1, - 0x1.ffffffffffce7p-1, - 0x1.ffffffffffd27p-1, - 0x1.ffffffffffd62p-1, - 0x1.ffffffffffd98p-1, - 0x1.ffffffffffdcap-1, - 0x1.ffffffffffdf8p-1, - 0x1.ffffffffffe22p-1, - 0x1.ffffffffffe49p-1, - 0x1.ffffffffffe6cp-1, - 0x1.ffffffffffe8dp-1, - 0x1.ffffffffffeabp-1, - 0x1.ffffffffffec7p-1, - 0x1.ffffffffffee1p-1, - 0x1.ffffffffffef8p-1, - 0x1.fffffffffff0ep-1, - 0x1.fffffffffff22p-1, - 0x1.fffffffffff34p-1, - 0x1.fffffffffff45p-1, - 0x1.fffffffffff54p-1, - 0x1.fffffffffff62p-1, - 0x1.fffffffffff6fp-1, - 0x1.fffffffffff7bp-1, - 0x1.fffffffffff86p-1, - 0x1.fffffffffff90p-1, - 0x1.fffffffffff9ap-1, - 0x1.fffffffffffa2p-1, - 0x1.fffffffffffaap-1, - 0x1.fffffffffffb1p-1, - 0x1.fffffffffffb8p-1, - 0x1.fffffffffffbep-1, - 0x1.fffffffffffc3p-1, - 0x1.fffffffffffc8p-1, - 0x1.fffffffffffcdp-1, - 0x1.fffffffffffd1p-1, - 0x1.fffffffffffd5p-1, - 0x1.fffffffffffd9p-1, - 0x1.fffffffffffdcp-1, - 0x1.fffffffffffdfp-1, - 0x1.fffffffffffe2p-1, - 0x1.fffffffffffe4p-1, - 0x1.fffffffffffe7p-1, - 0x1.fffffffffffe9p-1, - 0x1.fffffffffffebp-1, - 0x1.fffffffffffedp-1, - 0x1.fffffffffffeep-1, - 0x1.ffffffffffff0p-1, - 0x1.ffffffffffff1p-1, - 0x1.ffffffffffff3p-1, - 0x1.ffffffffffff4p-1, - 0x1.ffffffffffff5p-1, - 0x1.ffffffffffff6p-1, - 0x1.ffffffffffff7p-1, - 0x1.ffffffffffff7p-1, - 0x1.ffffffffffff8p-1, - 0x1.ffffffffffff9p-1, - 0x1.ffffffffffff9p-1, - 0x1.ffffffffffffap-1, - 0x1.ffffffffffffbp-1, - 0x1.ffffffffffffbp-1, - 0x1.ffffffffffffbp-1, - 0x1.ffffffffffffcp-1, - 0x1.ffffffffffffcp-1, - 0x1.ffffffffffffdp-1, - 0x1.ffffffffffffdp-1, - 0x1.ffffffffffffdp-1, - 0x1.ffffffffffffdp-1, - 0x1.ffffffffffffep-1, - 0x1.ffffffffffffep-1, - 0x1.ffffffffffffep-1, - 0x1.ffffffffffffep-1, - 0x1.ffffffffffffep-1, - 0x1.ffffffffffffep-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.fffffffffffffp-1, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - 0x1.0000000000000p+0, - }, - .scale = { 0x1.20dd750429b6dp+0, - 0x1.20d8f1975c85dp+0, - 0x1.20cb67bd452c7p+0, - 0x1.20b4d8bac36c1p+0, - 0x1.209546ad13ccfp+0, - 0x1.206cb4897b148p+0, - 0x1.203b261cd0052p+0, - 0x1.2000a00ae3804p+0, - 0x1.1fbd27cdc72d3p+0, - 0x1.1f70c3b4f2cc7p+0, - 0x1.1f1b7ae44867fp+0, - 0x1.1ebd5552f795bp+0, - 0x1.1e565bca400d4p+0, - 0x1.1de697e413d28p+0, - 0x1.1d6e14099944ap+0, - 0x1.1cecdb718d61cp+0, - 0x1.1c62fa1e869b6p+0, - 0x1.1bd07cdd189acp+0, - 0x1.1b357141d95d5p+0, - 0x1.1a91e5a748165p+0, - 0x1.19e5e92b964abp+0, - 0x1.19318bae53a04p+0, - 0x1.1874ddcdfce24p+0, - 0x1.17aff0e56ec10p+0, - 0x1.16e2d7093cd8cp+0, - 0x1.160da304ed92fp+0, - 0x1.153068581b781p+0, - 0x1.144b3b337c90cp+0, - 0x1.135e3075d076bp+0, - 0x1.12695da8b5bdep+0, - 0x1.116cd8fd67618p+0, - 0x1.1068b94962e5ep+0, - 0x1.0f5d1602f7e41p+0, - 0x1.0e4a073dc1b91p+0, - 0x1.0d2fa5a70c168p+0, - 0x1.0c0e0a8223359p+0, - 0x1.0ae54fa490722p+0, - 0x1.09b58f724416bp+0, - 0x1.087ee4d9ad247p+0, - 0x1.07416b4fbfe7cp+0, - 0x1.05fd3ecbec297p+0, - 0x1.04b27bc403d30p+0, - 0x1.03613f2812dafp+0, - 0x1.0209a65e29545p+0, - 0x1.00abcf3e187a9p+0, - 0x1.fe8fb01a47307p-1, - 0x1.fbbbbef34b4b2p-1, - 0x1.f8dc092d58ff8p-1, - 0x1.f5f0cdaf15313p-1, - 0x1.f2fa4c16c0019p-1, - 0x1.eff8c4b1375dbp-1, - 0x1.ecec7870ebca7p-1, - 0x1.e9d5a8e4c934ep-1, - 0x1.e6b4982f158b9p-1, - 0x1.e38988fc46e72p-1, - 0x1.e054be79d3042p-1, - 0x1.dd167c4cf9d2ap-1, - 0x1.d9cf06898cdafp-1, - 0x1.d67ea1a8b5368p-1, - 0x1.d325927fb9d89p-1, - 0x1.cfc41e36c7df9p-1, - 0x1.cc5a8a3fbea40p-1, - 0x1.c8e91c4d01368p-1, - 0x1.c5701a484ef9dp-1, - 0x1.c1efca49a5011p-1, - 0x1.be68728e29d5dp-1, - 0x1.bada596f25436p-1, - 0x1.b745c55905bf8p-1, - 0x1.b3aafcc27502ep-1, - 0x1.b00a46237d5bep-1, - 0x1.ac63e7ecc1411p-1, - 0x1.a8b8287ec6a09p-1, - 0x1.a5074e2157620p-1, - 0x1.a1519efaf889ep-1, - 0x1.9d97610879642p-1, - 0x1.99d8da149c13fp-1, - 0x1.96164fafd8de3p-1, - 0x1.925007283d7aap-1, - 0x1.8e86458169af8p-1, - 0x1.8ab94f6caa71dp-1, - 0x1.86e9694134b9ep-1, - 0x1.8316d6f48133dp-1, - 0x1.7f41dc12c9e89p-1, - 0x1.7b6abbb7aaf19p-1, - 0x1.7791b886e7403p-1, - 0x1.73b714a552763p-1, - 0x1.6fdb11b1e0c34p-1, - 0x1.6bfdf0beddaf5p-1, - 0x1.681ff24b4ab04p-1, - 0x1.6441563c665d4p-1, - 0x1.60625bd75d07bp-1, - 0x1.5c8341bb23767p-1, - 0x1.58a445da7c74cp-1, - 0x1.54c5a57629db0p-1, - 0x1.50e79d1749ac9p-1, - 0x1.4d0a6889dfd9fp-1, - 0x1.492e42d78d2c5p-1, - 0x1.4553664273d24p-1, - 0x1.417a0c4049fd0p-1, - 0x1.3da26d759aef5p-1, - 0x1.39ccc1b136d5ap-1, - 0x1.35f93fe7d1b3dp-1, - 0x1.32281e2fd1a92p-1, - 0x1.2e5991bd4cbfcp-1, - 0x1.2a8dcede3673bp-1, - 0x1.26c508f6bd0ffp-1, - 0x1.22ff727dd6f7bp-1, - 0x1.1f3d3cf9ffe5ap-1, - 0x1.1b7e98fe26217p-1, - 0x1.17c3b626c7a11p-1, - 0x1.140cc3173f007p-1, - 0x1.1059ed7740313p-1, - 0x1.0cab61f084b93p-1, - 0x1.09014c2ca74dap-1, - 0x1.055bd6d32e8d7p-1, - 0x1.01bb2b87c6968p-1, - 0x1.fc3ee5d1524b0p-2, - 0x1.f511a91a67d2ap-2, - 0x1.edeeee0959518p-2, - 0x1.e6d6ffaa65a25p-2, - 0x1.dfca26f5bbf88p-2, - 0x1.d8c8aace11e63p-2, - 0x1.d1d2cfff91594p-2, - 0x1.cae8d93f1d7b6p-2, - 0x1.c40b0729ed547p-2, - 0x1.bd3998457afdap-2, - 0x1.b674c8ffc6283p-2, - 0x1.afbcd3afe8ab6p-2, - 0x1.a911f096fbc26p-2, - 0x1.a27455e14c93cp-2, - 0x1.9be437a7de946p-2, - 0x1.9561c7f23a47bp-2, - 0x1.8eed36b886d93p-2, - 0x1.8886b1e5ecfd1p-2, - 0x1.822e655b417e6p-2, - 0x1.7be47af1f5d89p-2, - 0x1.75a91a7f4d2edp-2, - 0x1.6f7c69d7d3ef8p-2, - 0x1.695e8cd31867ep-2, - 0x1.634fa54fa285fp-2, - 0x1.5d4fd33729015p-2, - 0x1.575f3483021c3p-2, - 0x1.517de540ce2a3p-2, - 0x1.4babff975a04cp-2, - 0x1.45e99bcbb7915p-2, - 0x1.4036d0468a7a2p-2, - 0x1.3a93b1998736cp-2, - 0x1.35005285227f1p-2, - 0x1.2f7cc3fe6f423p-2, - 0x1.2a09153529381p-2, - 0x1.24a55399ea239p-2, - 0x1.1f518ae487dc8p-2, - 0x1.1a0dc51a9934dp-2, - 0x1.14da0a961fd14p-2, - 0x1.0fb6620c550afp-2, - 0x1.0aa2d09497f2bp-2, - 0x1.059f59af7a906p-2, - 0x1.00abff4dec7a3p-2, - 0x1.f79183b101c5bp-3, - 0x1.edeb406d9c824p-3, - 0x1.e4652fadcb6b2p-3, - 0x1.daff4969c0b04p-3, - 0x1.d1b982c501370p-3, - 0x1.c893ce1dcbef7p-3, - 0x1.bf8e1b1ca2279p-3, - 0x1.b6a856c3ed54fp-3, - 0x1.ade26b7fbed95p-3, - 0x1.a53c4135a6526p-3, - 0x1.9cb5bd549b111p-3, - 0x1.944ec2e4f5630p-3, - 0x1.8c07329874652p-3, - 0x1.83deeada4d25ap-3, - 0x1.7bd5c7df3fe9cp-3, - 0x1.73eba3b5b07b7p-3, - 0x1.6c205655be71fp-3, - 0x1.6473b5b15a7a1p-3, - 0x1.5ce595c455b0ap-3, - 0x1.5575c8a468361p-3, - 0x1.4e241e912c305p-3, - 0x1.46f066040a832p-3, - 0x1.3fda6bc016994p-3, - 0x1.38e1fae1d6a9dp-3, - 0x1.3206dceef5f87p-3, - 0x1.2b48d9e5dea1cp-3, - 0x1.24a7b84d38971p-3, - 0x1.1e233d434b813p-3, - 0x1.17bb2c8d41535p-3, - 0x1.116f48a6476ccp-3, - 0x1.0b3f52ce8c383p-3, - 0x1.052b0b1a174eap-3, - 0x1.fe6460fef4680p-4, - 0x1.f2a901ccafb37p-4, - 0x1.e723726b824a9p-4, - 0x1.dbd32ac4c99b0p-4, - 0x1.d0b7a0f921e7cp-4, - 0x1.c5d0497c09e74p-4, - 0x1.bb1c972f23e50p-4, - 0x1.b09bfb7d11a83p-4, - 0x1.a64de673e8837p-4, - 0x1.9c31c6df3b1b8p-4, - 0x1.92470a61b6965p-4, - 0x1.888d1d8e510a3p-4, - 0x1.7f036c0107294p-4, - 0x1.75a96077274bap-4, - 0x1.6c7e64e7281cbp-4, - 0x1.6381e2980956bp-4, - 0x1.5ab342383d177p-4, - 0x1.5211ebf41880bp-4, - 0x1.499d478bca735p-4, - 0x1.4154bc68d75c3p-4, - 0x1.3937b1b319259p-4, - 0x1.31458e6542847p-4, - 0x1.297db960e4f63p-4, - 0x1.21df9981f8e53p-4, - 0x1.1a6a95b1e786fp-4, - 0x1.131e14fa1625dp-4, - 0x1.0bf97e95f2a64p-4, - 0x1.04fc3a0481321p-4, - 0x1.fc4b5e32d6259p-5, - 0x1.eeea8c1b1db93p-5, - 0x1.e1d4cf1e2450ap-5, - 0x1.d508f9a1ea64ep-5, - 0x1.c885df3451a07p-5, - 0x1.bc4a54a84e834p-5, - 0x1.b055303221015p-5, - 0x1.a4a549829587ep-5, - 0x1.993979e14fffdp-5, - 0x1.8e109c4622913p-5, - 0x1.83298d717210ep-5, - 0x1.78832c03aa2b1p-5, - 0x1.6e1c5893c380bp-5, - 0x1.63f3f5c4de13bp-5, - 0x1.5a08e85af27e0p-5, - 0x1.505a174e9c929p-5, - 0x1.46e66be002240p-5, - 0x1.3dacd1a8d8ccdp-5, - 0x1.34ac36ad8dafep-5, - 0x1.2be38b6d92415p-5, - 0x1.2351c2f2d1449p-5, - 0x1.1af5d2e04f3f6p-5, - 0x1.12ceb37ff9bc3p-5, - 0x1.0adb5fcfa8c75p-5, - 0x1.031ad58d56279p-5, - 0x1.f7182a851bca2p-6, - 0x1.e85c449e377f2p-6, - 0x1.da0005e5f28dfp-6, - 0x1.cc0180af00a8bp-6, - 0x1.be5ecd2fcb5f9p-6, - 0x1.b1160991ff737p-6, - 0x1.a4255a00b9f03p-6, - 0x1.978ae8b55ce1bp-6, - 0x1.8b44e6031383ep-6, - 0x1.7f5188610ddc8p-6, - 0x1.73af0c737bb45p-6, - 0x1.685bb5134ef13p-6, - 0x1.5d55cb54cd53ap-6, - 0x1.529b9e8cf9a1ep-6, - 0x1.482b8455dc491p-6, - 0x1.3e03d891b37dep-6, - 0x1.3422fd6d12e2bp-6, - 0x1.2a875b5ffab56p-6, - 0x1.212f612dee7fbp-6, - 0x1.181983e5133ddp-6, - 0x1.0f443edc5ce49p-6, - 0x1.06ae13b0d3255p-6, - 0x1.fcab1483ea7fcp-7, - 0x1.ec72615a894c4p-7, - 0x1.dcaf3691fc448p-7, - 0x1.cd5ec93c12431p-7, - 0x1.be7e5ac24963bp-7, - 0x1.b00b38d6b3575p-7, - 0x1.a202bd6372dcep-7, - 0x1.94624e78e0fafp-7, - 0x1.87275e3a6869dp-7, - 0x1.7a4f6aca256cbp-7, - 0x1.6dd7fe3358230p-7, - 0x1.61beae53b72b7p-7, - 0x1.56011cc3b036dp-7, - 0x1.4a9cf6bda3f4cp-7, - 0x1.3f8ff5042a88ep-7, - 0x1.34d7dbc76d7e5p-7, - 0x1.2a727a89a3f14p-7, - 0x1.205dac02bd6b9p-7, - 0x1.1697560347b25p-7, - 0x1.0d1d69569b82dp-7, - 0x1.03ede1a45bfeep-7, - 0x1.f60d8aa2a88f2p-8, - 0x1.e4cc4abf7d065p-8, - 0x1.d4143a9dfe965p-8, - 0x1.c3e1a5f5c077cp-8, - 0x1.b430ecf4a83a8p-8, - 0x1.a4fe83fb9db25p-8, - 0x1.9646f35a76623p-8, - 0x1.8806d70b2fc36p-8, - 0x1.7a3ade6c8b3e4p-8, - 0x1.6cdfcbfc1e263p-8, - 0x1.5ff2750fe7820p-8, - 0x1.536fc18f7ce5cp-8, - 0x1.4754abacdf1dcp-8, - 0x1.3b9e3f9d06e3fp-8, - 0x1.30499b503957fp-8, - 0x1.2553ee2a336bfp-8, - 0x1.1aba78ba3af89p-8, - 0x1.107a8c7323a6ep-8, - 0x1.06918b6355624p-8, - 0x1.f9f9cfd9c3035p-9, - 0x1.e77448fb66bb9p-9, - 0x1.d58da68fd1170p-9, - 0x1.c4412bf4b8f0bp-9, - 0x1.b38a3af2e55b4p-9, - 0x1.a3645330550ffp-9, - 0x1.93cb11a30d765p-9, - 0x1.84ba3004a50d0p-9, - 0x1.762d84469c18fp-9, - 0x1.6821000795a03p-9, - 0x1.5a90b00981d93p-9, - 0x1.4d78bba8ca5fdp-9, - 0x1.40d564548fad7p-9, - 0x1.34a305080681fp-9, - 0x1.28de11c5031ebp-9, - 0x1.1d83170fbf6fbp-9, - 0x1.128eb96be8798p-9, - 0x1.07fdb4dafea5fp-9, - 0x1.fb99b8b8279e1p-10, - 0x1.e7f232d9e2630p-10, - 0x1.d4fed7195d7e8p-10, - 0x1.c2b9cf7f893bfp-10, - 0x1.b11d702b3deb1p-10, - 0x1.a024365f771bdp-10, - 0x1.8fc8c794b03b5p-10, - 0x1.8005f08d6f1efp-10, - 0x1.70d6a46e07ddap-10, - 0x1.6235fbd7a4345p-10, - 0x1.541f340697987p-10, - 0x1.468dadf4080abp-10, - 0x1.397ced7af2b15p-10, - 0x1.2ce898809244ep-10, - 0x1.20cc76202c5fap-10, - 0x1.15246dda49d47p-10, - 0x1.09ec86c75d497p-10, - 0x1.fe41cd9bb4eeep-11, - 0x1.e97ba3b77f306p-11, - 0x1.d57f524723822p-11, - 0x1.c245d4b998479p-11, - 0x1.afc85e0f82e12p-11, - 0x1.9e005769dbc1dp-11, - 0x1.8ce75e9f6f8a0p-11, - 0x1.7c7744d9378f7p-11, - 0x1.6caa0d3582fe9p-11, - 0x1.5d79eb71e893bp-11, - 0x1.4ee1429bf7cc0p-11, - 0x1.40daa3c89f5b6p-11, - 0x1.3360ccd23db3ap-11, - 0x1.266ea71d4f71ap-11, - 0x1.19ff4663ae9dfp-11, - 0x1.0e0de78654d1ep-11, - 0x1.0295ef6591848p-11, - 0x1.ef25d37f49fe1p-12, - 0x1.da01102b5f851p-12, - 0x1.c5b5412dcafadp-12, - 0x1.b23a5a23e4210p-12, - 0x1.9f8893d8fd1c1p-12, - 0x1.8d986a4187285p-12, - 0x1.7c629a822bc9ep-12, - 0x1.6be02102b3520p-12, - 0x1.5c0a378c90bcap-12, - 0x1.4cda5374ea275p-12, - 0x1.3e4a23d1f4702p-12, - 0x1.30538fbb77ecdp-12, - 0x1.22f0b496539bdp-12, - 0x1.161be46ad3b50p-12, - 0x1.09cfa445b00ffp-12, - 0x1.fc0d55470cf51p-13, - 0x1.e577bbcd49935p-13, - 0x1.cfd4a5adec5bfp-13, - 0x1.bb1a9657ce465p-13, - 0x1.a740684026555p-13, - 0x1.943d4a1d1ed39p-13, - 0x1.8208bc334a6a5p-13, - 0x1.709a8db59f25cp-13, - 0x1.5feada379d8b7p-13, - 0x1.4ff207314a102p-13, - 0x1.40a8c1949f75ep-13, - 0x1.3207fb7420eb9p-13, - 0x1.2408e9ba3327fp-13, - 0x1.16a501f0e42cap-13, - 0x1.09d5f819c9e29p-13, - 0x1.fb2b792b40a22p-14, - 0x1.e3bcf436a1a95p-14, - 0x1.cd55277c18d05p-14, - 0x1.b7e94604479dcp-14, - 0x1.a36eec00926ddp-14, - 0x1.8fdc1b2dcf7b9p-14, - 0x1.7d2737527c3f9p-14, - 0x1.6b4702d7d5849p-14, - 0x1.5a329b7d30748p-14, - 0x1.49e17724f4d41p-14, - 0x1.3a4b60ba9aa4dp-14, - 0x1.2b6875310f785p-14, - 0x1.1d312098e9dbap-14, - 0x1.0f9e1b4dd36dfp-14, - 0x1.02a8673a94691p-14, - 0x1.ec929a665b449p-15, - 0x1.d4f4b4c8e09edp-15, - 0x1.be6abbb10a5aap-15, - 0x1.a8e8cc1fadef6p-15, - 0x1.94637d5bacfdbp-15, - 0x1.80cfdc72220cfp-15, - 0x1.6e2367dc27f95p-15, - 0x1.5c540b4936fd2p-15, - 0x1.4b581b8d170fcp-15, - 0x1.3b2652b06c2b2p-15, - 0x1.2bb5cc22e5db6p-15, - 0x1.1cfe010e2052dp-15, - 0x1.0ef6c4c84a0fep-15, - 0x1.01984165a5f36p-15, - 0x1.e9b5e8d00ce76p-16, - 0x1.d16f5716c6c1ap-16, - 0x1.ba4f035d60e02p-16, - 0x1.a447b7b03f045p-16, - 0x1.8f4ccca7fc90dp-16, - 0x1.7b5223dac7336p-16, - 0x1.684c227fcacefp-16, - 0x1.562fac4329b48p-16, - 0x1.44f21e49054f2p-16, - 0x1.34894a5e24657p-16, - 0x1.24eb7254ccf83p-16, - 0x1.160f438c70913p-16, - 0x1.07ebd2a2d2844p-16, - 0x1.f4f12e9ab070ap-17, - 0x1.db5ad0b27805cp-17, - 0x1.c304efa2c6f4ep-17, - 0x1.abe09e9144b5ep-17, - 0x1.95df988e76644p-17, - 0x1.80f439b4ee04bp-17, - 0x1.6d11788a69c64p-17, - 0x1.5a2adfa0b4bc4p-17, - 0x1.4834877429b8fp-17, - 0x1.37231085c7d9ap-17, - 0x1.26eb9daed6f7ep-17, - 0x1.1783ceac28910p-17, - 0x1.08e1badf0fcedp-17, - 0x1.f5f7d88472604p-18, - 0x1.db92b5212fb8dp-18, - 0x1.c282cd3957edap-18, - 0x1.aab7abace48dcp-18, - 0x1.94219bfcb4928p-18, - 0x1.7eb1a2075864dp-18, - 0x1.6a597219a93d9p-18, - 0x1.570b69502f313p-18, - 0x1.44ba864670882p-18, - 0x1.335a62115bce2p-18, - 0x1.22df298214423p-18, - 0x1.133d96ae7e0ddp-18, - 0x1.046aeabcfcdecp-18, - 0x1.ecb9cfe1d8642p-19, - 0x1.d21397ead99cbp-19, - 0x1.b8d094c86d374p-19, - 0x1.a0df0f0c626dcp-19, - 0x1.8a2e269750a39p-19, - 0x1.74adc8f4064d3p-19, - 0x1.604ea819f007cp-19, - 0x1.4d0231928c6f9p-19, - 0x1.3aba85fe22e1fp-19, - 0x1.296a70f414053p-19, - 0x1.1905613b3abf2p-19, - 0x1.097f6156f32c5p-19, - 0x1.f59a20caf6695p-20, - 0x1.d9c73698fb1dcp-20, - 0x1.bf716c6168baep-20, - 0x1.a6852c6b58392p-20, - 0x1.8eefd70594a88p-20, - 0x1.789fb715aae95p-20, - 0x1.6383f726a8e04p-20, - 0x1.4f8c96f26a26ap-20, - 0x1.3caa61607f920p-20, - 0x1.2acee2f5ecdb8p-20, - 0x1.19ec60b1242edp-20, - 0x1.09f5cf4dd2877p-20, - 0x1.f5bd95d8730d8p-21, - 0x1.d9371e2ff7c35p-21, - 0x1.be41de54d155ap-21, - 0x1.a4c89e08ef4f3p-21, - 0x1.8cb738399b12cp-21, - 0x1.75fa8dbc84becp-21, - 0x1.608078a70dcbcp-21, - 0x1.4c37c0394d094p-21, - 0x1.39100d5687bfep-21, - 0x1.26f9df8519bd6p-21, - 0x1.15e6827001f18p-21, - 0x1.05c803e4831c1p-21, - 0x1.ed22548cffd35p-22, - 0x1.d06ad6ecdf971p-22, - 0x1.b551c847fbc96p-22, - 0x1.9bc09f112b494p-22, - 0x1.83a1ff0aa239dp-22, - 0x1.6ce1aa3fd7bddp-22, - 0x1.576c72b514859p-22, - 0x1.43302cc4a0da8p-22, - 0x1.301ba221dc9bbp-22, - 0x1.1e1e857adc568p-22, - 0x1.0d2966b1746f7p-22, - 0x1.fa5b4f49cc6b2p-23, - 0x1.dc3ae30b55c16p-23, - 0x1.bfd7555a3bd68p-23, - 0x1.a517d9e61628ap-23, - 0x1.8be4f8f6c951fp-23, - 0x1.74287ded49339p-23, - 0x1.5dcd669f2cd34p-23, - 0x1.48bfd38302870p-23, - 0x1.34ecf8a3c124ap-23, - 0x1.22430f521cbcfp-23, - 0x1.10b1488aeb235p-23, - 0x1.0027c00a263a6p-23, - 0x1.e12ee004efc37p-24, - 0x1.c3e44ae32b16bp-24, - 0x1.a854ea14102a8p-24, - 0x1.8e6761569f45dp-24, - 0x1.7603bac345f65p-24, - 0x1.5f1353cdad001p-24, - 0x1.4980cb3c80949p-24, - 0x1.3537f00b6ad4dp-24, - 0x1.2225b12bffc68p-24, - 0x1.10380e1adb7e9p-24, - 0x1.febc107d5efaap-25, - 0x1.df0f2a0ee6946p-25, - 0x1.c14b2188bcee4p-25, - 0x1.a553644f7f07dp-25, - 0x1.8b0cfce0579dfp-25, - 0x1.725e7c5dd20f7p-25, - 0x1.5b2fe547a1340p-25, - 0x1.456a974e92e93p-25, - 0x1.30f93c3699078p-25, - 0x1.1dc7b5b978cf8p-25, - 0x1.0bc30c5d52f15p-25, - 0x1.f5b2be65a0c7fp-26, - 0x1.d5f3a8dea7357p-26, - 0x1.b82915b03515bp-26, - 0x1.9c3517e789488p-26, - 0x1.81fb7df06136ep-26, - 0x1.6961b8d641d06p-26, - 0x1.524ec4d916caep-26, - 0x1.3cab1343d18d1p-26, - 0x1.2860757487a01p-26, - 0x1.155a09065d4f7p-26, - 0x1.0384250e4c9fcp-26, - 0x1.e59890b926c78p-27, - 0x1.c642116a8a9e3p-27, - 0x1.a8e405e651ab6p-27, - 0x1.8d5f98114f872p-27, - 0x1.7397c5a66e307p-27, - 0x1.5b71456c5a4c4p-27, - 0x1.44d26de513197p-27, - 0x1.2fa31d6371537p-27, - 0x1.1bcca373b7b43p-27, - 0x1.0939ab853339fp-27, - 0x1.efac5187b2863p-28, - 0x1.cf1e86235d0e6p-28, - 0x1.b0a68a2128babp-28, - 0x1.9423165bc4444p-28, - 0x1.7974e743dea3cp-28, - 0x1.607e9eacd1050p-28, - 0x1.4924a74dec728p-28, - 0x1.334d19e0c2160p-28, - 0x1.1edfa3c5f5ccap-28, - 0x1.0bc56f1b54701p-28, - 0x1.f3d2185e047d9p-29, - 0x1.d26cb87945e87p-29, - 0x1.b334fac4b9f99p-29, - 0x1.96076f7918d1cp-29, - 0x1.7ac2d72fc2c63p-29, - 0x1.614801550319ep-29, - 0x1.4979ac8b28926p-29, - 0x1.333c68e2d0548p-29, - 0x1.1e767bce37dd7p-29, - 0x1.0b0fc5b6d05a0p-29, - 0x1.f1e3523b41d7dp-30, - 0x1.d00de6608effep-30, - 0x1.b0778b7b3301ap-30, - 0x1.92fb04ec0f6cfp-30, - 0x1.77756ec9f78fap-30, - 0x1.5dc61922d5a06p-30, - 0x1.45ce65699ff6dp-30, - 0x1.2f71a5f159970p-30, - 0x1.1a94ff571654fp-30, - 0x1.071f4bbea09ecp-30, - 0x1.e9f1ff8ddd774p-31, - 0x1.c818223a202c7p-31, - 0x1.a887bd2b4404dp-31, - 0x1.8b1a336c5eb6bp-31, - 0x1.6fab63324088ap-31, - 0x1.56197e30205bap-31, - 0x1.3e44e45301b92p-31, - 0x1.281000bfe4c3fp-31, - 0x1.135f28f2d50b4p-31, - 0x1.00187dded5975p-31, - 0x1.dc479de0ef001p-32, - 0x1.bad4fdad3caa1p-32, - 0x1.9baed3ed27ab8p-32, - 0x1.7ead9ce4285bbp-32, - 0x1.63ac6b4edc88ep-32, - 0x1.4a88be2a6390cp-32, - 0x1.332259185f1a0p-32, - 0x1.1d5b1f3793044p-32, - 0x1.0916f04b6e18bp-32, - 0x1.ec77101de6926p-33, - 0x1.c960bf23153e0p-33, - 0x1.a8bd20fc65ef7p-33, - 0x1.8a61745ec7d1dp-33, - 0x1.6e25d0e756261p-33, - 0x1.53e4f7d1666cbp-33, - 0x1.3b7c27a7ddb0ep-33, - 0x1.24caf2c32af14p-33, - 0x1.0fb3186804d0fp-33, - 0x1.f830c0bb41fd7p-34, - 0x1.d3c0f1a91c846p-34, - 0x1.b1e5acf351d87p-34, - 0x1.92712d259ce66p-34, - 0x1.7538c60a04476p-34, - 0x1.5a14b04b47879p-34, - 0x1.40dfd87456f4cp-34, - 0x1.2977b1172b9d5p-34, - 0x1.13bc07e891491p-34, - 0x1.ff1dbb4300811p-35, - 0x1.d9a880f306bd8p-35, - 0x1.b6e45220b55e0p-35, - 0x1.96a0b33f2c4dap-35, - 0x1.78b07e9e924acp-35, - 0x1.5ce9ab1670dd2p-35, - 0x1.4325167006bb0p-35, - 0x1.2b3e53538ff3fp-35, - 0x1.15137a7f44864p-35, - 0x1.0084ff125639dp-35, - 0x1.daeb0b7311ec7p-36, - 0x1.b7937d1c40c52p-36, - 0x1.96d082f59ab06p-36, - 0x1.7872d9fa10aadp-36, - 0x1.5c4e8e37bc7d0p-36, - 0x1.423ac0df49a40p-36, - 0x1.2a117230ad284p-36, - 0x1.13af4f04f9998p-36, - 0x1.fde703724e560p-37, - 0x1.d77f0c82e7641p-37, - 0x1.b3ee02611d7ddp-37, - 0x1.92ff33023d5bdp-37, - 0x1.7481a9e69f53fp-37, - 0x1.5847eda620959p-37, - 0x1.3e27c1fcc74bdp-37, - 0x1.25f9ee0b923dcp-37, - 0x1.0f9a0686531ffp-37, - 0x1.f5cc7718082afp-38, - 0x1.cf7e53d6a2ca5p-38, - 0x1.ac0f5f3229372p-38, - 0x1.8b498644847eap-38, - 0x1.6cfa9bcca59dcp-38, - 0x1.50f411d4fd2cdp-38, - 0x1.370ab8327af5ep-38, - 0x1.1f167f88c6b6ep-38, - 0x1.08f24085d4597p-38, - 0x1.e8f70e181d619p-39, - 0x1.c324c20e337dcp-39, - 0x1.a03261574b54ep-39, - 0x1.7fe903cdf5855p-39, - 0x1.6215c58da3450p-39, - 0x1.46897d4b69fc6p-39, - 0x1.2d1877d731b7bp-39, - 0x1.159a386b11517p-39, - 0x1.ffd27ae9393cep-40, - 0x1.d7c593130dd0bp-40, - 0x1.b2cd607c79bcfp-40, - 0x1.90ae4d3405651p-40, - 0x1.71312dd1759e2p-40, - 0x1.5422ef5d8949dp-40, - 0x1.39544b0ecc957p-40, - 0x1.20997f73e73ddp-40, - 0x1.09ca0eaacd277p-40, - 0x1.e9810295890ecp-41, - 0x1.c2b45b5aa4a1dp-41, - 0x1.9eee068fa7596p-41, - 0x1.7df2b399c10a8p-41, - 0x1.5f8b87a31bd85p-41, - 0x1.4385c96e9a2d9p-41, - 0x1.29b2933ef4cbcp-41, - 0x1.11e68a6378f8ap-41, - 0x1.f7f338086a86bp-42, - 0x1.cf8d7d9ce040ap-42, - 0x1.aa577251ae484p-42, - 0x1.8811d739efb5ep-42, - 0x1.68823e52970bep-42, - 0x1.4b72ae68e8b4cp-42, - 0x1.30b14dbe876bcp-42, - 0x1.181012ef86610p-42, - 0x1.01647ba798744p-42, - 0x1.d90e917701675p-43, - 0x1.b2a87e86d0c8ap-43, - 0x1.8f53dcb377293p-43, - 0x1.6ed2f2515e933p-43, - 0x1.50ecc9ed47f19p-43, - 0x1.356cd5ce7799ep-43, - 0x1.1c229a587ab78p-43, - 0x1.04e15ecc7f3f6p-43, - 0x1.deffc7e6a6017p-44, - 0x1.b7b040832f310p-44, - 0x1.938e021f36d76p-44, - 0x1.7258610b3b233p-44, - 0x1.53d3bfc82a909p-44, - 0x1.37c92babdc2fdp-44, - 0x1.1e06010120f6ap-44, - 0x1.065b9616170d4p-44, - 0x1.e13dd96b3753ap-45, - 0x1.b950d32467392p-45, - 0x1.94a72263259a5p-45, - 0x1.72fd93e036cdcp-45, - 0x1.54164576929abp-45, - 0x1.37b83c521fe96p-45, - 0x1.1daf033182e96p-45, - 0x1.05ca50205d26ap-45, - 0x1.dfbb6235639fap-46, - 0x1.b7807e294781fp-46, - 0x1.9298add70a734p-46, - 0x1.70beaf9c7ffb6p-46, - 0x1.51b2cd6709222p-46, - 0x1.353a6cf7f7fffp-46, - 0x1.1b1fa8cbe84a7p-46, - 0x1.0330f0fd69921p-46, - 0x1.da81670f96f9bp-47, - 0x1.b24a16b4d09aap-47, - 0x1.8d6eeb6efdbd6p-47, - 0x1.6ba91ac734785p-47, - 0x1.4cb7966770ab5p-47, - 0x1.305e9721d0981p-47, - 0x1.1667311fff70ap-47, - 0x1.fd3de10d62855p-48, - 0x1.d1aefbcd48d0cp-48, - 0x1.a9cc93c25aca9p-48, - 0x1.85487ee3ea735p-48, - 0x1.63daf8b4b1e0cp-48, - 0x1.45421e69a6ca1p-48, - 0x1.294175802d99ap-48, - 0x1.0fa17bf41068fp-48, - 0x1.f05e82aae2bb9p-49, - 0x1.c578101b29058p-49, - 0x1.9e39dc5dd2f7cp-49, - 0x1.7a553a728bbf2p-49, - 0x1.5982008db1304p-49, - 0x1.3b7e00422e51bp-49, - 0x1.200c898d9ee3ep-49, - 0x1.06f5f7eb65a56p-49, - 0x1.e00e9148a1d25p-50, - 0x1.b623734024e92p-50, - 0x1.8fd4e01891bf8p-50, - 0x1.6cd44c7470d89p-50, - 0x1.4cd9c04158cd7p-50, - 0x1.2fa34bf5c8344p-50, - 0x1.14f4890ff2461p-50, - 0x1.f92c49dfa4df5p-51, - 0x1.ccaaea71ab0dfp-51, - 0x1.a40829f001197p-51, - 0x1.7eef13b59e96cp-51, - 0x1.5d11e1a252bf5p-51, - 0x1.3e296303b2297p-51, - 0x1.21f47009f43cep-51, - 0x1.083768c5e4541p-51, - 0x1.e1777d831265ep-52, - 0x1.b69f10b0191b5p-52, - 0x1.8f8a3a05b5b52p-52, - 0x1.6be573c40c8e7p-52, - 0x1.4b645ba991fdbp-52, - 0x1.2dc119095729fp-52, - }, -}; diff --git a/sysdeps/aarch64/fpu/sv_erff_data.c b/sysdeps/aarch64/fpu/sv_erff_data.c deleted file mode 100644 index 6dcd72af69..0000000000 --- a/sysdeps/aarch64/fpu/sv_erff_data.c +++ /dev/null @@ -1,1058 +0,0 @@ -/* Table for SVE erff approximation - - Copyright (C) 2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include "vecmath_config.h" - -/* Lookup table used in SVE erff. - For each possible rounded input r (multiples of 1/128), between - r = 0.0 and r = 4.0 (513 values): - - __erff_data.erf contains the values of erf(r), - - __erff_data.scale contains the values of 2/sqrt(pi)*exp(-r^2). - Note that indices 0 and 1 are never hit by the algorithm, since lookup is - performed only for x >= 1/64-1/512. */ -const struct sv_erff_data __sv_erff_data = { - .erf = { 0x0.000000p+0, - 0x1.20dbf4p-7, - 0x1.20d770p-6, - 0x1.b137e0p-6, - 0x1.20c564p-5, - 0x1.68e5d4p-5, - 0x1.b0fafep-5, - 0x1.f902a8p-5, - 0x1.207d48p-4, - 0x1.44703ep-4, - 0x1.68591ap-4, - 0x1.8c36bep-4, - 0x1.b00812p-4, - 0x1.d3cbf8p-4, - 0x1.f7815ap-4, - 0x1.0d9390p-3, - 0x1.1f5e1ap-3, - 0x1.311fc2p-3, - 0x1.42d7fcp-3, - 0x1.548642p-3, - 0x1.662a0cp-3, - 0x1.77c2d2p-3, - 0x1.895010p-3, - 0x1.9ad142p-3, - 0x1.ac45e4p-3, - 0x1.bdad72p-3, - 0x1.cf076ep-3, - 0x1.e05354p-3, - 0x1.f190aap-3, - 0x1.015f78p-2, - 0x1.09eed6p-2, - 0x1.127632p-2, - 0x1.1af54ep-2, - 0x1.236bf0p-2, - 0x1.2bd9dcp-2, - 0x1.343ed6p-2, - 0x1.3c9aa8p-2, - 0x1.44ed18p-2, - 0x1.4d35f0p-2, - 0x1.5574f4p-2, - 0x1.5da9f4p-2, - 0x1.65d4b8p-2, - 0x1.6df50ap-2, - 0x1.760abap-2, - 0x1.7e1594p-2, - 0x1.861566p-2, - 0x1.8e0a02p-2, - 0x1.95f336p-2, - 0x1.9dd0d2p-2, - 0x1.a5a2acp-2, - 0x1.ad6896p-2, - 0x1.b52264p-2, - 0x1.bccfecp-2, - 0x1.c47104p-2, - 0x1.cc0584p-2, - 0x1.d38d44p-2, - 0x1.db081cp-2, - 0x1.e275eap-2, - 0x1.e9d68ap-2, - 0x1.f129d4p-2, - 0x1.f86faap-2, - 0x1.ffa7eap-2, - 0x1.03693ap-1, - 0x1.06f794p-1, - 0x1.0a7ef6p-1, - 0x1.0dff50p-1, - 0x1.117894p-1, - 0x1.14eab4p-1, - 0x1.1855a6p-1, - 0x1.1bb95cp-1, - 0x1.1f15ccp-1, - 0x1.226ae8p-1, - 0x1.25b8a8p-1, - 0x1.28ff02p-1, - 0x1.2c3decp-1, - 0x1.2f755cp-1, - 0x1.32a54cp-1, - 0x1.35cdb4p-1, - 0x1.38ee8ap-1, - 0x1.3c07cap-1, - 0x1.3f196ep-1, - 0x1.42236ep-1, - 0x1.4525c8p-1, - 0x1.482074p-1, - 0x1.4b1372p-1, - 0x1.4dfebap-1, - 0x1.50e24cp-1, - 0x1.53be26p-1, - 0x1.569244p-1, - 0x1.595ea6p-1, - 0x1.5c2348p-1, - 0x1.5ee02ep-1, - 0x1.619556p-1, - 0x1.6442c0p-1, - 0x1.66e86ep-1, - 0x1.69865ep-1, - 0x1.6c1c98p-1, - 0x1.6eab18p-1, - 0x1.7131e6p-1, - 0x1.73b102p-1, - 0x1.762870p-1, - 0x1.789836p-1, - 0x1.7b0058p-1, - 0x1.7d60d8p-1, - 0x1.7fb9c0p-1, - 0x1.820b12p-1, - 0x1.8454d6p-1, - 0x1.869712p-1, - 0x1.88d1cep-1, - 0x1.8b050ep-1, - 0x1.8d30dep-1, - 0x1.8f5544p-1, - 0x1.91724ap-1, - 0x1.9387f6p-1, - 0x1.959652p-1, - 0x1.979d68p-1, - 0x1.999d42p-1, - 0x1.9b95e8p-1, - 0x1.9d8768p-1, - 0x1.9f71cap-1, - 0x1.a1551ap-1, - 0x1.a33162p-1, - 0x1.a506b0p-1, - 0x1.a6d50cp-1, - 0x1.a89c86p-1, - 0x1.aa5d26p-1, - 0x1.ac16fcp-1, - 0x1.adca14p-1, - 0x1.af767ap-1, - 0x1.b11c3cp-1, - 0x1.b2bb68p-1, - 0x1.b4540ap-1, - 0x1.b5e630p-1, - 0x1.b771e8p-1, - 0x1.b8f742p-1, - 0x1.ba764ap-1, - 0x1.bbef10p-1, - 0x1.bd61a2p-1, - 0x1.bece0ep-1, - 0x1.c03464p-1, - 0x1.c194b2p-1, - 0x1.c2ef08p-1, - 0x1.c44376p-1, - 0x1.c5920ap-1, - 0x1.c6dad2p-1, - 0x1.c81de2p-1, - 0x1.c95b46p-1, - 0x1.ca930ep-1, - 0x1.cbc54cp-1, - 0x1.ccf20cp-1, - 0x1.ce1962p-1, - 0x1.cf3b5cp-1, - 0x1.d0580cp-1, - 0x1.d16f7ep-1, - 0x1.d281c4p-1, - 0x1.d38ef0p-1, - 0x1.d49710p-1, - 0x1.d59a34p-1, - 0x1.d6986cp-1, - 0x1.d791cap-1, - 0x1.d8865ep-1, - 0x1.d97636p-1, - 0x1.da6162p-1, - 0x1.db47f4p-1, - 0x1.dc29fcp-1, - 0x1.dd0788p-1, - 0x1.dde0aap-1, - 0x1.deb570p-1, - 0x1.df85eap-1, - 0x1.e0522ap-1, - 0x1.e11a3ep-1, - 0x1.e1de36p-1, - 0x1.e29e22p-1, - 0x1.e35a12p-1, - 0x1.e41214p-1, - 0x1.e4c638p-1, - 0x1.e5768cp-1, - 0x1.e62322p-1, - 0x1.e6cc08p-1, - 0x1.e7714ap-1, - 0x1.e812fcp-1, - 0x1.e8b12ap-1, - 0x1.e94be4p-1, - 0x1.e9e336p-1, - 0x1.ea7730p-1, - 0x1.eb07e2p-1, - 0x1.eb9558p-1, - 0x1.ec1fa2p-1, - 0x1.eca6ccp-1, - 0x1.ed2ae6p-1, - 0x1.edabfcp-1, - 0x1.ee2a1ep-1, - 0x1.eea556p-1, - 0x1.ef1db4p-1, - 0x1.ef9344p-1, - 0x1.f00614p-1, - 0x1.f07630p-1, - 0x1.f0e3a6p-1, - 0x1.f14e82p-1, - 0x1.f1b6d0p-1, - 0x1.f21ca0p-1, - 0x1.f27ff8p-1, - 0x1.f2e0eap-1, - 0x1.f33f7ep-1, - 0x1.f39bc2p-1, - 0x1.f3f5c2p-1, - 0x1.f44d88p-1, - 0x1.f4a31ep-1, - 0x1.f4f694p-1, - 0x1.f547f2p-1, - 0x1.f59742p-1, - 0x1.f5e490p-1, - 0x1.f62fe8p-1, - 0x1.f67952p-1, - 0x1.f6c0dcp-1, - 0x1.f7068cp-1, - 0x1.f74a6ep-1, - 0x1.f78c8cp-1, - 0x1.f7cceep-1, - 0x1.f80ba2p-1, - 0x1.f848acp-1, - 0x1.f8841ap-1, - 0x1.f8bdf2p-1, - 0x1.f8f63ep-1, - 0x1.f92d08p-1, - 0x1.f96256p-1, - 0x1.f99634p-1, - 0x1.f9c8a8p-1, - 0x1.f9f9bap-1, - 0x1.fa2974p-1, - 0x1.fa57dep-1, - 0x1.fa84fep-1, - 0x1.fab0dep-1, - 0x1.fadb84p-1, - 0x1.fb04f6p-1, - 0x1.fb2d40p-1, - 0x1.fb5464p-1, - 0x1.fb7a6cp-1, - 0x1.fb9f60p-1, - 0x1.fbc344p-1, - 0x1.fbe61ep-1, - 0x1.fc07fap-1, - 0x1.fc28d8p-1, - 0x1.fc48c2p-1, - 0x1.fc67bcp-1, - 0x1.fc85d0p-1, - 0x1.fca2fep-1, - 0x1.fcbf52p-1, - 0x1.fcdaccp-1, - 0x1.fcf576p-1, - 0x1.fd0f54p-1, - 0x1.fd286ap-1, - 0x1.fd40bep-1, - 0x1.fd5856p-1, - 0x1.fd6f34p-1, - 0x1.fd8562p-1, - 0x1.fd9ae2p-1, - 0x1.fdafb8p-1, - 0x1.fdc3e8p-1, - 0x1.fdd77ap-1, - 0x1.fdea6ep-1, - 0x1.fdfcccp-1, - 0x1.fe0e96p-1, - 0x1.fe1fd0p-1, - 0x1.fe3080p-1, - 0x1.fe40a6p-1, - 0x1.fe504cp-1, - 0x1.fe5f70p-1, - 0x1.fe6e18p-1, - 0x1.fe7c46p-1, - 0x1.fe8a00p-1, - 0x1.fe9748p-1, - 0x1.fea422p-1, - 0x1.feb090p-1, - 0x1.febc96p-1, - 0x1.fec836p-1, - 0x1.fed374p-1, - 0x1.fede52p-1, - 0x1.fee8d4p-1, - 0x1.fef2fep-1, - 0x1.fefccep-1, - 0x1.ff064cp-1, - 0x1.ff0f76p-1, - 0x1.ff1852p-1, - 0x1.ff20e0p-1, - 0x1.ff2924p-1, - 0x1.ff3120p-1, - 0x1.ff38d6p-1, - 0x1.ff4048p-1, - 0x1.ff4778p-1, - 0x1.ff4e68p-1, - 0x1.ff551ap-1, - 0x1.ff5b90p-1, - 0x1.ff61ccp-1, - 0x1.ff67d0p-1, - 0x1.ff6d9ep-1, - 0x1.ff7338p-1, - 0x1.ff789ep-1, - 0x1.ff7dd4p-1, - 0x1.ff82dap-1, - 0x1.ff87b2p-1, - 0x1.ff8c5cp-1, - 0x1.ff90dcp-1, - 0x1.ff9532p-1, - 0x1.ff9960p-1, - 0x1.ff9d68p-1, - 0x1.ffa14ap-1, - 0x1.ffa506p-1, - 0x1.ffa8a0p-1, - 0x1.ffac18p-1, - 0x1.ffaf6ep-1, - 0x1.ffb2a6p-1, - 0x1.ffb5bep-1, - 0x1.ffb8b8p-1, - 0x1.ffbb98p-1, - 0x1.ffbe5ap-1, - 0x1.ffc102p-1, - 0x1.ffc390p-1, - 0x1.ffc606p-1, - 0x1.ffc862p-1, - 0x1.ffcaa8p-1, - 0x1.ffccd8p-1, - 0x1.ffcef4p-1, - 0x1.ffd0fap-1, - 0x1.ffd2eap-1, - 0x1.ffd4cap-1, - 0x1.ffd696p-1, - 0x1.ffd84ep-1, - 0x1.ffd9f8p-1, - 0x1.ffdb90p-1, - 0x1.ffdd18p-1, - 0x1.ffde90p-1, - 0x1.ffdffap-1, - 0x1.ffe154p-1, - 0x1.ffe2a2p-1, - 0x1.ffe3e2p-1, - 0x1.ffe514p-1, - 0x1.ffe63cp-1, - 0x1.ffe756p-1, - 0x1.ffe866p-1, - 0x1.ffe96ap-1, - 0x1.ffea64p-1, - 0x1.ffeb54p-1, - 0x1.ffec3ap-1, - 0x1.ffed16p-1, - 0x1.ffedeap-1, - 0x1.ffeeb4p-1, - 0x1.ffef76p-1, - 0x1.fff032p-1, - 0x1.fff0e4p-1, - 0x1.fff18ep-1, - 0x1.fff232p-1, - 0x1.fff2d0p-1, - 0x1.fff366p-1, - 0x1.fff3f6p-1, - 0x1.fff480p-1, - 0x1.fff504p-1, - 0x1.fff582p-1, - 0x1.fff5fcp-1, - 0x1.fff670p-1, - 0x1.fff6dep-1, - 0x1.fff74ap-1, - 0x1.fff7aep-1, - 0x1.fff810p-1, - 0x1.fff86cp-1, - 0x1.fff8c6p-1, - 0x1.fff91cp-1, - 0x1.fff96cp-1, - 0x1.fff9bap-1, - 0x1.fffa04p-1, - 0x1.fffa4cp-1, - 0x1.fffa90p-1, - 0x1.fffad0p-1, - 0x1.fffb0ep-1, - 0x1.fffb4ap-1, - 0x1.fffb82p-1, - 0x1.fffbb8p-1, - 0x1.fffbecp-1, - 0x1.fffc1ep-1, - 0x1.fffc4ep-1, - 0x1.fffc7ap-1, - 0x1.fffca6p-1, - 0x1.fffccep-1, - 0x1.fffcf6p-1, - 0x1.fffd1ap-1, - 0x1.fffd3ep-1, - 0x1.fffd60p-1, - 0x1.fffd80p-1, - 0x1.fffda0p-1, - 0x1.fffdbep-1, - 0x1.fffddap-1, - 0x1.fffdf4p-1, - 0x1.fffe0ep-1, - 0x1.fffe26p-1, - 0x1.fffe3ep-1, - 0x1.fffe54p-1, - 0x1.fffe68p-1, - 0x1.fffe7ep-1, - 0x1.fffe90p-1, - 0x1.fffea2p-1, - 0x1.fffeb4p-1, - 0x1.fffec4p-1, - 0x1.fffed4p-1, - 0x1.fffee4p-1, - 0x1.fffef2p-1, - 0x1.ffff00p-1, - 0x1.ffff0cp-1, - 0x1.ffff18p-1, - 0x1.ffff24p-1, - 0x1.ffff30p-1, - 0x1.ffff3ap-1, - 0x1.ffff44p-1, - 0x1.ffff4ep-1, - 0x1.ffff56p-1, - 0x1.ffff60p-1, - 0x1.ffff68p-1, - 0x1.ffff70p-1, - 0x1.ffff78p-1, - 0x1.ffff7ep-1, - 0x1.ffff84p-1, - 0x1.ffff8cp-1, - 0x1.ffff92p-1, - 0x1.ffff98p-1, - 0x1.ffff9cp-1, - 0x1.ffffa2p-1, - 0x1.ffffa6p-1, - 0x1.ffffacp-1, - 0x1.ffffb0p-1, - 0x1.ffffb4p-1, - 0x1.ffffb8p-1, - 0x1.ffffbcp-1, - 0x1.ffffc0p-1, - 0x1.ffffc4p-1, - 0x1.ffffc6p-1, - 0x1.ffffcap-1, - 0x1.ffffccp-1, - 0x1.ffffd0p-1, - 0x1.ffffd2p-1, - 0x1.ffffd4p-1, - 0x1.ffffd6p-1, - 0x1.ffffd8p-1, - 0x1.ffffdcp-1, - 0x1.ffffdep-1, - 0x1.ffffdep-1, - 0x1.ffffe0p-1, - 0x1.ffffe2p-1, - 0x1.ffffe4p-1, - 0x1.ffffe6p-1, - 0x1.ffffe8p-1, - 0x1.ffffe8p-1, - 0x1.ffffeap-1, - 0x1.ffffeap-1, - 0x1.ffffecp-1, - 0x1.ffffeep-1, - 0x1.ffffeep-1, - 0x1.fffff0p-1, - 0x1.fffff0p-1, - 0x1.fffff2p-1, - 0x1.fffff2p-1, - 0x1.fffff2p-1, - 0x1.fffff4p-1, - 0x1.fffff4p-1, - 0x1.fffff4p-1, - 0x1.fffff6p-1, - 0x1.fffff6p-1, - 0x1.fffff6p-1, - 0x1.fffff8p-1, - 0x1.fffff8p-1, - 0x1.fffff8p-1, - 0x1.fffff8p-1, - 0x1.fffffap-1, - 0x1.fffffap-1, - 0x1.fffffap-1, - 0x1.fffffap-1, - 0x1.fffffap-1, - 0x1.fffffap-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffcp-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.fffffep-1, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - 0x1.000000p+0, - }, - .scale = { 0x1.20dd76p+0, - 0x1.20d8f2p+0, - 0x1.20cb68p+0, - 0x1.20b4d8p+0, - 0x1.209546p+0, - 0x1.206cb4p+0, - 0x1.203b26p+0, - 0x1.2000a0p+0, - 0x1.1fbd28p+0, - 0x1.1f70c4p+0, - 0x1.1f1b7ap+0, - 0x1.1ebd56p+0, - 0x1.1e565cp+0, - 0x1.1de698p+0, - 0x1.1d6e14p+0, - 0x1.1cecdcp+0, - 0x1.1c62fap+0, - 0x1.1bd07cp+0, - 0x1.1b3572p+0, - 0x1.1a91e6p+0, - 0x1.19e5eap+0, - 0x1.19318cp+0, - 0x1.1874dep+0, - 0x1.17aff0p+0, - 0x1.16e2d8p+0, - 0x1.160da4p+0, - 0x1.153068p+0, - 0x1.144b3cp+0, - 0x1.135e30p+0, - 0x1.12695ep+0, - 0x1.116cd8p+0, - 0x1.1068bap+0, - 0x1.0f5d16p+0, - 0x1.0e4a08p+0, - 0x1.0d2fa6p+0, - 0x1.0c0e0ap+0, - 0x1.0ae550p+0, - 0x1.09b590p+0, - 0x1.087ee4p+0, - 0x1.07416cp+0, - 0x1.05fd3ep+0, - 0x1.04b27cp+0, - 0x1.036140p+0, - 0x1.0209a6p+0, - 0x1.00abd0p+0, - 0x1.fe8fb0p-1, - 0x1.fbbbbep-1, - 0x1.f8dc0ap-1, - 0x1.f5f0cep-1, - 0x1.f2fa4cp-1, - 0x1.eff8c4p-1, - 0x1.ecec78p-1, - 0x1.e9d5a8p-1, - 0x1.e6b498p-1, - 0x1.e38988p-1, - 0x1.e054bep-1, - 0x1.dd167cp-1, - 0x1.d9cf06p-1, - 0x1.d67ea2p-1, - 0x1.d32592p-1, - 0x1.cfc41ep-1, - 0x1.cc5a8ap-1, - 0x1.c8e91cp-1, - 0x1.c5701ap-1, - 0x1.c1efcap-1, - 0x1.be6872p-1, - 0x1.bada5ap-1, - 0x1.b745c6p-1, - 0x1.b3aafcp-1, - 0x1.b00a46p-1, - 0x1.ac63e8p-1, - 0x1.a8b828p-1, - 0x1.a5074ep-1, - 0x1.a1519ep-1, - 0x1.9d9762p-1, - 0x1.99d8dap-1, - 0x1.961650p-1, - 0x1.925008p-1, - 0x1.8e8646p-1, - 0x1.8ab950p-1, - 0x1.86e96ap-1, - 0x1.8316d6p-1, - 0x1.7f41dcp-1, - 0x1.7b6abcp-1, - 0x1.7791b8p-1, - 0x1.73b714p-1, - 0x1.6fdb12p-1, - 0x1.6bfdf0p-1, - 0x1.681ff2p-1, - 0x1.644156p-1, - 0x1.60625cp-1, - 0x1.5c8342p-1, - 0x1.58a446p-1, - 0x1.54c5a6p-1, - 0x1.50e79ep-1, - 0x1.4d0a68p-1, - 0x1.492e42p-1, - 0x1.455366p-1, - 0x1.417a0cp-1, - 0x1.3da26ep-1, - 0x1.39ccc2p-1, - 0x1.35f940p-1, - 0x1.32281ep-1, - 0x1.2e5992p-1, - 0x1.2a8dcep-1, - 0x1.26c508p-1, - 0x1.22ff72p-1, - 0x1.1f3d3cp-1, - 0x1.1b7e98p-1, - 0x1.17c3b6p-1, - 0x1.140cc4p-1, - 0x1.1059eep-1, - 0x1.0cab62p-1, - 0x1.09014cp-1, - 0x1.055bd6p-1, - 0x1.01bb2cp-1, - 0x1.fc3ee6p-2, - 0x1.f511aap-2, - 0x1.edeeeep-2, - 0x1.e6d700p-2, - 0x1.dfca26p-2, - 0x1.d8c8aap-2, - 0x1.d1d2d0p-2, - 0x1.cae8dap-2, - 0x1.c40b08p-2, - 0x1.bd3998p-2, - 0x1.b674c8p-2, - 0x1.afbcd4p-2, - 0x1.a911f0p-2, - 0x1.a27456p-2, - 0x1.9be438p-2, - 0x1.9561c8p-2, - 0x1.8eed36p-2, - 0x1.8886b2p-2, - 0x1.822e66p-2, - 0x1.7be47ap-2, - 0x1.75a91ap-2, - 0x1.6f7c6ap-2, - 0x1.695e8cp-2, - 0x1.634fa6p-2, - 0x1.5d4fd4p-2, - 0x1.575f34p-2, - 0x1.517de6p-2, - 0x1.4bac00p-2, - 0x1.45e99cp-2, - 0x1.4036d0p-2, - 0x1.3a93b2p-2, - 0x1.350052p-2, - 0x1.2f7cc4p-2, - 0x1.2a0916p-2, - 0x1.24a554p-2, - 0x1.1f518ap-2, - 0x1.1a0dc6p-2, - 0x1.14da0ap-2, - 0x1.0fb662p-2, - 0x1.0aa2d0p-2, - 0x1.059f5ap-2, - 0x1.00ac00p-2, - 0x1.f79184p-3, - 0x1.edeb40p-3, - 0x1.e46530p-3, - 0x1.daff4ap-3, - 0x1.d1b982p-3, - 0x1.c893cep-3, - 0x1.bf8e1cp-3, - 0x1.b6a856p-3, - 0x1.ade26cp-3, - 0x1.a53c42p-3, - 0x1.9cb5bep-3, - 0x1.944ec2p-3, - 0x1.8c0732p-3, - 0x1.83deeap-3, - 0x1.7bd5c8p-3, - 0x1.73eba4p-3, - 0x1.6c2056p-3, - 0x1.6473b6p-3, - 0x1.5ce596p-3, - 0x1.5575c8p-3, - 0x1.4e241ep-3, - 0x1.46f066p-3, - 0x1.3fda6cp-3, - 0x1.38e1fap-3, - 0x1.3206dcp-3, - 0x1.2b48dap-3, - 0x1.24a7b8p-3, - 0x1.1e233ep-3, - 0x1.17bb2cp-3, - 0x1.116f48p-3, - 0x1.0b3f52p-3, - 0x1.052b0cp-3, - 0x1.fe6460p-4, - 0x1.f2a902p-4, - 0x1.e72372p-4, - 0x1.dbd32ap-4, - 0x1.d0b7a0p-4, - 0x1.c5d04ap-4, - 0x1.bb1c98p-4, - 0x1.b09bfcp-4, - 0x1.a64de6p-4, - 0x1.9c31c6p-4, - 0x1.92470ap-4, - 0x1.888d1ep-4, - 0x1.7f036cp-4, - 0x1.75a960p-4, - 0x1.6c7e64p-4, - 0x1.6381e2p-4, - 0x1.5ab342p-4, - 0x1.5211ecp-4, - 0x1.499d48p-4, - 0x1.4154bcp-4, - 0x1.3937b2p-4, - 0x1.31458ep-4, - 0x1.297dbap-4, - 0x1.21df9ap-4, - 0x1.1a6a96p-4, - 0x1.131e14p-4, - 0x1.0bf97ep-4, - 0x1.04fc3ap-4, - 0x1.fc4b5ep-5, - 0x1.eeea8cp-5, - 0x1.e1d4d0p-5, - 0x1.d508fap-5, - 0x1.c885e0p-5, - 0x1.bc4a54p-5, - 0x1.b05530p-5, - 0x1.a4a54ap-5, - 0x1.99397ap-5, - 0x1.8e109cp-5, - 0x1.83298ep-5, - 0x1.78832cp-5, - 0x1.6e1c58p-5, - 0x1.63f3f6p-5, - 0x1.5a08e8p-5, - 0x1.505a18p-5, - 0x1.46e66cp-5, - 0x1.3dacd2p-5, - 0x1.34ac36p-5, - 0x1.2be38cp-5, - 0x1.2351c2p-5, - 0x1.1af5d2p-5, - 0x1.12ceb4p-5, - 0x1.0adb60p-5, - 0x1.031ad6p-5, - 0x1.f7182ap-6, - 0x1.e85c44p-6, - 0x1.da0006p-6, - 0x1.cc0180p-6, - 0x1.be5ecep-6, - 0x1.b1160ap-6, - 0x1.a4255ap-6, - 0x1.978ae8p-6, - 0x1.8b44e6p-6, - 0x1.7f5188p-6, - 0x1.73af0cp-6, - 0x1.685bb6p-6, - 0x1.5d55ccp-6, - 0x1.529b9ep-6, - 0x1.482b84p-6, - 0x1.3e03d8p-6, - 0x1.3422fep-6, - 0x1.2a875cp-6, - 0x1.212f62p-6, - 0x1.181984p-6, - 0x1.0f443ep-6, - 0x1.06ae14p-6, - 0x1.fcab14p-7, - 0x1.ec7262p-7, - 0x1.dcaf36p-7, - 0x1.cd5ecap-7, - 0x1.be7e5ap-7, - 0x1.b00b38p-7, - 0x1.a202bep-7, - 0x1.94624ep-7, - 0x1.87275ep-7, - 0x1.7a4f6ap-7, - 0x1.6dd7fep-7, - 0x1.61beaep-7, - 0x1.56011cp-7, - 0x1.4a9cf6p-7, - 0x1.3f8ff6p-7, - 0x1.34d7dcp-7, - 0x1.2a727ap-7, - 0x1.205dacp-7, - 0x1.169756p-7, - 0x1.0d1d6ap-7, - 0x1.03ede2p-7, - 0x1.f60d8ap-8, - 0x1.e4cc4ap-8, - 0x1.d4143ap-8, - 0x1.c3e1a6p-8, - 0x1.b430ecp-8, - 0x1.a4fe84p-8, - 0x1.9646f4p-8, - 0x1.8806d8p-8, - 0x1.7a3adep-8, - 0x1.6cdfccp-8, - 0x1.5ff276p-8, - 0x1.536fc2p-8, - 0x1.4754acp-8, - 0x1.3b9e40p-8, - 0x1.30499cp-8, - 0x1.2553eep-8, - 0x1.1aba78p-8, - 0x1.107a8cp-8, - 0x1.06918cp-8, - 0x1.f9f9d0p-9, - 0x1.e77448p-9, - 0x1.d58da6p-9, - 0x1.c4412cp-9, - 0x1.b38a3ap-9, - 0x1.a36454p-9, - 0x1.93cb12p-9, - 0x1.84ba30p-9, - 0x1.762d84p-9, - 0x1.682100p-9, - 0x1.5a90b0p-9, - 0x1.4d78bcp-9, - 0x1.40d564p-9, - 0x1.34a306p-9, - 0x1.28de12p-9, - 0x1.1d8318p-9, - 0x1.128ebap-9, - 0x1.07fdb4p-9, - 0x1.fb99b8p-10, - 0x1.e7f232p-10, - 0x1.d4fed8p-10, - 0x1.c2b9d0p-10, - 0x1.b11d70p-10, - 0x1.a02436p-10, - 0x1.8fc8c8p-10, - 0x1.8005f0p-10, - 0x1.70d6a4p-10, - 0x1.6235fcp-10, - 0x1.541f34p-10, - 0x1.468daep-10, - 0x1.397ceep-10, - 0x1.2ce898p-10, - 0x1.20cc76p-10, - 0x1.15246ep-10, - 0x1.09ec86p-10, - 0x1.fe41cep-11, - 0x1.e97ba4p-11, - 0x1.d57f52p-11, - 0x1.c245d4p-11, - 0x1.afc85ep-11, - 0x1.9e0058p-11, - 0x1.8ce75ep-11, - 0x1.7c7744p-11, - 0x1.6caa0ep-11, - 0x1.5d79ecp-11, - 0x1.4ee142p-11, - 0x1.40daa4p-11, - 0x1.3360ccp-11, - 0x1.266ea8p-11, - 0x1.19ff46p-11, - 0x1.0e0de8p-11, - 0x1.0295f0p-11, - 0x1.ef25d4p-12, - 0x1.da0110p-12, - 0x1.c5b542p-12, - 0x1.b23a5ap-12, - 0x1.9f8894p-12, - 0x1.8d986ap-12, - 0x1.7c629ap-12, - 0x1.6be022p-12, - 0x1.5c0a38p-12, - 0x1.4cda54p-12, - 0x1.3e4a24p-12, - 0x1.305390p-12, - 0x1.22f0b4p-12, - 0x1.161be4p-12, - 0x1.09cfa4p-12, - 0x1.fc0d56p-13, - 0x1.e577bcp-13, - 0x1.cfd4a6p-13, - 0x1.bb1a96p-13, - 0x1.a74068p-13, - 0x1.943d4ap-13, - 0x1.8208bcp-13, - 0x1.709a8ep-13, - 0x1.5feadap-13, - 0x1.4ff208p-13, - 0x1.40a8c2p-13, - 0x1.3207fcp-13, - 0x1.2408eap-13, - 0x1.16a502p-13, - 0x1.09d5f8p-13, - 0x1.fb2b7ap-14, - 0x1.e3bcf4p-14, - 0x1.cd5528p-14, - 0x1.b7e946p-14, - 0x1.a36eecp-14, - 0x1.8fdc1cp-14, - 0x1.7d2738p-14, - 0x1.6b4702p-14, - 0x1.5a329cp-14, - 0x1.49e178p-14, - 0x1.3a4b60p-14, - 0x1.2b6876p-14, - 0x1.1d3120p-14, - 0x1.0f9e1cp-14, - 0x1.02a868p-14, - 0x1.ec929ap-15, - 0x1.d4f4b4p-15, - 0x1.be6abcp-15, - 0x1.a8e8ccp-15, - 0x1.94637ep-15, - 0x1.80cfdcp-15, - 0x1.6e2368p-15, - 0x1.5c540cp-15, - 0x1.4b581cp-15, - 0x1.3b2652p-15, - 0x1.2bb5ccp-15, - 0x1.1cfe02p-15, - 0x1.0ef6c4p-15, - 0x1.019842p-15, - 0x1.e9b5e8p-16, - 0x1.d16f58p-16, - 0x1.ba4f04p-16, - 0x1.a447b8p-16, - 0x1.8f4cccp-16, - 0x1.7b5224p-16, - 0x1.684c22p-16, - 0x1.562facp-16, - 0x1.44f21ep-16, - 0x1.34894ap-16, - 0x1.24eb72p-16, - 0x1.160f44p-16, - 0x1.07ebd2p-16, - 0x1.f4f12ep-17, - 0x1.db5ad0p-17, - 0x1.c304f0p-17, - 0x1.abe09ep-17, - 0x1.95df98p-17, - 0x1.80f43ap-17, - 0x1.6d1178p-17, - 0x1.5a2ae0p-17, - 0x1.483488p-17, - 0x1.372310p-17, - 0x1.26eb9ep-17, - 0x1.1783cep-17, - 0x1.08e1bap-17, - 0x1.f5f7d8p-18, - 0x1.db92b6p-18, - 0x1.c282cep-18, - 0x1.aab7acp-18, - 0x1.94219cp-18, - 0x1.7eb1a2p-18, - 0x1.6a5972p-18, - 0x1.570b6ap-18, - 0x1.44ba86p-18, - 0x1.335a62p-18, - 0x1.22df2ap-18, - 0x1.133d96p-18, - 0x1.046aeap-18, - 0x1.ecb9d0p-19, - 0x1.d21398p-19, - 0x1.b8d094p-19, - 0x1.a0df10p-19, - 0x1.8a2e26p-19, - 0x1.74adc8p-19, - 0x1.604ea8p-19, - 0x1.4d0232p-19, - 0x1.3aba86p-19, - 0x1.296a70p-19, - 0x1.190562p-19, - 0x1.097f62p-19, - 0x1.f59a20p-20, - 0x1.d9c736p-20, - 0x1.bf716cp-20, - 0x1.a6852cp-20, - 0x1.8eefd8p-20, - 0x1.789fb8p-20, - 0x1.6383f8p-20, - 0x1.4f8c96p-20, - 0x1.3caa62p-20, - 0x1.2acee2p-20, - 0x1.19ec60p-20, - 0x1.09f5d0p-20, - 0x1.f5bd96p-21, - 0x1.d9371ep-21, - 0x1.be41dep-21, - 0x1.a4c89ep-21, - 0x1.8cb738p-21, - 0x1.75fa8ep-21, - 0x1.608078p-21, - 0x1.4c37c0p-21, - 0x1.39100ep-21, - 0x1.26f9e0p-21, - 0x1.15e682p-21, - 0x1.05c804p-21, - 0x1.ed2254p-22, - 0x1.d06ad6p-22, - 0x1.b551c8p-22, - 0x1.9bc0a0p-22, - 0x1.83a200p-22, - 0x1.6ce1aap-22, - 0x1.576c72p-22, - 0x1.43302cp-22, - 0x1.301ba2p-22, - 0x1.1e1e86p-22, - 0x1.0d2966p-22, - 0x1.fa5b50p-23, - 0x1.dc3ae4p-23, - 0x1.bfd756p-23, - 0x1.a517dap-23, - 0x1.8be4f8p-23, - 0x1.74287ep-23, - 0x1.5dcd66p-23, - 0x1.48bfd4p-23, - 0x1.34ecf8p-23, - 0x1.224310p-23, - 0x1.10b148p-23, - }, -}; diff --git a/sysdeps/aarch64/fpu/sv_expf_inline.h b/sysdeps/aarch64/fpu/sv_expf_inline.h index 23963b5f8e..6166df6553 100644 --- a/sysdeps/aarch64/fpu/sv_expf_inline.h +++ b/sysdeps/aarch64/fpu/sv_expf_inline.h @@ -24,19 +24,20 @@ struct sv_expf_data { - float poly[5]; - float inv_ln2, ln2_hi, ln2_lo, shift; + float c1, c3, inv_ln2; + float ln2_lo, c0, c2, c4; + float ln2_hi, shift; }; /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for compatibility with polynomial helpers. Shift is 1.5*2^17 + 127. */ #define SV_EXPF_DATA \ { \ - .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f, \ - 0x1.0e4020p-7f }, \ - \ - .inv_ln2 = 0x1.715476p+0f, .ln2_hi = 0x1.62e4p-1f, \ - .ln2_lo = 0x1.7f7d1cp-20f, .shift = 0x1.803f8p17f, \ + /* Coefficients copied from the polynomial in AdvSIMD variant. */ \ + .c0 = 0x1.ffffecp-1f, .c1 = 0x1.fffdb6p-2f, .c2 = 0x1.555e66p-3f, \ + .c3 = 0x1.573e2ep-5f, .c4 = 0x1.0e4020p-7f, .inv_ln2 = 0x1.715476p+0f, \ + .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f, \ + .shift = 0x1.803f8p17f, \ } #define C(i) sv_f32 (d->poly[i]) @@ -47,26 +48,25 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d) /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)] x = ln2*n + r, with r in [-ln2/2, ln2/2]. */ - /* Load some constants in quad-word chunks to minimise memory access. */ - svfloat32_t c4_invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->poly[4]); + svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->ln2_lo); /* n = round(x/(ln2/N)). */ - svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, c4_invln2_and_ln2, 1); + svfloat32_t z = svmad_x (pg, sv_f32 (d->inv_ln2), x, d->shift); svfloat32_t n = svsub_x (pg, z, d->shift); /* r = x - n*ln2/N. */ - svfloat32_t r = svmls_lane (x, n, c4_invln2_and_ln2, 2); - r = svmls_lane (r, n, c4_invln2_and_ln2, 3); + svfloat32_t r = svmsb_x (pg, sv_f32 (d->ln2_hi), n, x); + r = svmls_lane (r, n, lane_consts, 0); /* scale = 2^(n/N). */ - svfloat32_t scale = svexpa (svreinterpret_u32_f32 (z)); + svfloat32_t scale = svexpa (svreinterpret_u32 (z)); /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6. */ - svfloat32_t p12 = svmla_x (pg, C (1), C (2), r); - svfloat32_t p34 = svmla_lane (C (3), r, c4_invln2_and_ln2, 0); - svfloat32_t r2 = svmul_f32_x (pg, r, r); + svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2); + svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3); + svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r); svfloat32_t p14 = svmla_x (pg, p12, p34, r2); - svfloat32_t p0 = svmul_f32_x (pg, r, C (0)); + svfloat32_t p0 = svmul_lane (r, lane_consts, 1); svfloat32_t poly = svmla_x (pg, p0, r2, p14); return svmla_x (pg, scale, scale, poly); diff --git a/sysdeps/aarch64/fpu/tanhf_advsimd.c b/sysdeps/aarch64/fpu/tanhf_advsimd.c index 50defd6ef0..3ced9b7a41 100644 --- a/sysdeps/aarch64/fpu/tanhf_advsimd.c +++ b/sysdeps/aarch64/fpu/tanhf_advsimd.c @@ -28,13 +28,16 @@ static const struct data /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for negative). */ .boring_bound = V4 (0x41102cb3), .large_bound = V4 (0x7f800000), - .onef = V4 (0x3f800000), }; static float32x4_t NOINLINE VPCS_ATTR -special_case (float32x4_t x, float32x4_t y, uint32x4_t special) +special_case (float32x4_t x, uint32x4_t is_boring, float32x4_t boring, + float32x4_t q, uint32x4_t special) { - return v_call_f32 (tanhf, x, y, special); + return v_call_f32 ( + tanhf, x, + vbslq_f32 (is_boring, boring, vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)))), + special); } /* Approximation for single-precision vector tanh(x), using a simplified @@ -50,7 +53,9 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x) uint32x4_t iax = vreinterpretq_u32_f32 (ax); uint32x4_t sign = veorq_u32 (ix, iax); uint32x4_t is_boring = vcgtq_u32 (iax, d->boring_bound); - float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->onef)); + /* expm1 exponent bias is 1.0f reinterpreted to int. */ + float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 ( + sign, vreinterpretq_u32_s32 (d->expm1f_consts.exponent_bias))); #if WANT_SIMD_EXCEPT /* If fp exceptions are to be triggered properly, set all special and boring @@ -66,10 +71,12 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x) /* tanh(x) = (e^2x - 1) / (e^2x + 1). */ float32x4_t q = expm1f_inline (vmulq_n_f32 (x, 2), &d->expm1f_consts); - float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0))); + if (__glibc_unlikely (v_any_u32 (special))) - return special_case (vreinterpretq_f32_u32 (ix), - vbslq_f32 (is_boring, boring, y), special); + return special_case (vreinterpretq_f32_u32 (ix), is_boring, boring, q, + special); + + float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0))); return vbslq_f32 (is_boring, boring, y); } libmvec_hidden_def (V_NAME_F1 (tanh)) diff --git a/sysdeps/aarch64/fpu/v_expm1f_inline.h b/sysdeps/aarch64/fpu/v_expm1f_inline.h index 59b552da6b..1daedfdd51 100644 --- a/sysdeps/aarch64/fpu/v_expm1f_inline.h +++ b/sysdeps/aarch64/fpu/v_expm1f_inline.h @@ -21,48 +21,47 @@ #define AARCH64_FPU_V_EXPM1F_INLINE_H #include "v_math.h" -#include "poly_advsimd_f32.h" +#include "math_config.h" struct v_expm1f_data { - float32x4_t poly[5]; - float invln2_and_ln2[4]; - float32x4_t shift; + float32x4_t c0, c2; int32x4_t exponent_bias; + float c1, c3, inv_ln2, c4; + float ln2_hi, ln2_lo; }; /* Coefficients generated using fpminimax with degree=5 in [-log(2)/2, - log(2)/2]. Exponent bias is asuint(1.0f). - invln2_and_ln2 Stores constants: invln2, ln2_lo, ln2_hi, 0. */ + log(2)/2]. Exponent bias is asuint(1.0f). */ #define V_EXPM1F_DATA \ { \ - .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5), \ - V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) }, \ - .shift = V4 (0x1.8p23f), .exponent_bias = V4 (0x3f800000), \ - .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 }, \ + .c0 = V4 (0x1.fffffep-2), .c1 = 0x1.5554aep-3, .c2 = V4 (0x1.555736p-5), \ + .c3 = 0x1.12287cp-7, .c4 = 0x1.6b55a2p-10, \ + .exponent_bias = V4 (0x3f800000), .inv_ln2 = 0x1.715476p+0f, \ + .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f, \ } static inline float32x4_t expm1f_inline (float32x4_t x, const struct v_expm1f_data *d) { - /* Helper routine for calculating exp(x) - 1. - Copied from v_expm1f_1u6.c, with all special-case handling removed - the - calling routine should handle special values if required. */ + /* Helper routine for calculating exp(x) - 1. */ + + float32x2_t ln2 = vld1_f32 (&d->ln2_hi); + float32x4_t lane_consts = vld1q_f32 (&d->c1); /* Reduce argument: f in [-ln2/2, ln2/2], i is exact. */ - float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2); - float32x4_t j - = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift); + float32x4_t j = vrndaq_f32 (vmulq_laneq_f32 (x, lane_consts, 2)); int32x4_t i = vcvtq_s32_f32 (j); - float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1); - f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2); + float32x4_t f = vfmsq_lane_f32 (x, j, ln2, 0); + f = vfmsq_lane_f32 (f, j, ln2, 1); - /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f). - Uses Estrin scheme, where the main _ZGVnN4v_expm1f routine uses - Horner. */ + /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f). */ float32x4_t f2 = vmulq_f32 (f, f); float32x4_t f4 = vmulq_f32 (f2, f2); - float32x4_t p = v_estrin_4_f32 (f, f2, f4, d->poly); + float32x4_t p01 = vfmaq_laneq_f32 (d->c0, f, lane_consts, 0); + float32x4_t p23 = vfmaq_laneq_f32 (d->c2, f, lane_consts, 1); + float32x4_t p = vfmaq_f32 (p01, f2, p23); + p = vfmaq_laneq_f32 (p, f4, lane_consts, 3); p = vfmaq_f32 (f, f2, p); /* t = 2^i. */ diff --git a/sysdeps/aarch64/fpu/v_log1pf_inline.h b/sysdeps/aarch64/fpu/v_log1pf_inline.h index 643a6cdcfc..73e45a942e 100644 --- a/sysdeps/aarch64/fpu/v_log1pf_inline.h +++ b/sysdeps/aarch64/fpu/v_log1pf_inline.h @@ -25,54 +25,81 @@ struct v_log1pf_data { - float32x4_t poly[8], ln2; uint32x4_t four; int32x4_t three_quarters; + float c0, c3, c5, c7; + float32x4_t c4, c6, c1, c2, ln2; }; /* Polynomial generated using FPMinimax in [-0.25, 0.5]. First two coefficients (1, -0.5) are not stored as they can be generated more efficiently. */ #define V_LOG1PF_CONSTANTS_TABLE \ { \ - .poly \ - = { V4 (0x1.5555aap-2f), V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f), \ - V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f), V4 (-0x1.0da91p-3f), \ - V4 (0x1.abcb6p-4f), V4 (-0x1.6f0d5ep-5f) }, \ - .ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000), \ - .three_quarters = V4 (0x3f400000) \ + .c0 = 0x1.5555aap-2f, .c1 = V4 (-0x1.000038p-2f), \ + .c2 = V4 (0x1.99675cp-3f), .c3 = -0x1.54ef78p-3f, \ + .c4 = V4 (0x1.28a1f4p-3f), .c5 = -0x1.0da91p-3f, \ + .c6 = V4 (0x1.abcb6p-4f), .c7 = -0x1.6f0d5ep-5f, \ + .ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000), \ + .three_quarters = V4 (0x3f400000) \ } static inline float32x4_t -eval_poly (float32x4_t m, const float32x4_t *c) +eval_poly (float32x4_t m, const struct v_log1pf_data *d) { - /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner (main routine - uses split Estrin, but this way reduces register pressure in the calling - routine). */ - float32x4_t q = vfmaq_f32 (v_f32 (-0.5), m, c[0]); + /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner. */ + float32x4_t c0357 = vld1q_f32 (&d->c0); + float32x4_t q = vfmaq_laneq_f32 (v_f32 (-0.5), m, c0357, 0); float32x4_t m2 = vmulq_f32 (m, m); - q = vfmaq_f32 (m, m2, q); - float32x4_t p = v_pw_horner_6_f32 (m, m2, c + 1); + float32x4_t p67 = vfmaq_laneq_f32 (d->c6, m, c0357, 3); + float32x4_t p45 = vfmaq_laneq_f32 (d->c4, m, c0357, 2); + float32x4_t p23 = vfmaq_laneq_f32 (d->c2, m, c0357, 1); + float32x4_t p = vfmaq_f32 (p45, m2, p67); + p = vfmaq_f32 (p23, m2, p); + p = vfmaq_f32 (d->c1, m, p); p = vmulq_f32 (m2, p); - return vfmaq_f32 (q, m2, p); + p = vfmaq_f32 (m, m2, p); + return vfmaq_f32 (p, m2, q); } static inline float32x4_t -log1pf_inline (float32x4_t x, const struct v_log1pf_data d) +log1pf_inline (float32x4_t x, const struct v_log1pf_data *d) { - /* Helper for calculating log(x + 1). Copied from log1pf_2u1.c, with no - special-case handling. See that file for details of the algorithm. */ + /* Helper for calculating log(x + 1). */ + + /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m + is in [-0.25, 0.5]): + log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2). + + We approximate log1p(m) with a polynomial, then scale by + k*log(2). Instead of doing this directly, we use an intermediate + scale factor s = 4*k*log(2) to ensure the scale is representable + as a normalised fp32 number. */ float32x4_t m = vaddq_f32 (x, v_f32 (1.0f)); + + /* Choose k to scale x to the range [-1/4, 1/2]. */ int32x4_t k - = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d.three_quarters), + = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters), v_s32 (0xff800000)); uint32x4_t ku = vreinterpretq_u32_s32 (k); - float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d.four, ku)); + + /* Scale up to ensure that the scale factor is representable as normalised + fp32 number, and scale m down accordingly. */ + float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku)); + + /* Scale x by exponent manipulation. */ float32x4_t m_scale = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku)); m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s)); - float32x4_t p = eval_poly (m_scale, d.poly); + + /* Evaluate polynomial on the reduced interval. */ + float32x4_t p = eval_poly (m_scale, d); + + /* The scale factor to be applied back at the end - by multiplying float(k) + by 2^-23 we get the unbiased exponent of k. */ float32x4_t scale_back = vmulq_f32 (vcvtq_f32_s32 (k), v_f32 (0x1.0p-23f)); - return vfmaq_f32 (p, scale_back, d.ln2); + + /* Apply the scaling back. */ + return vfmaq_f32 (p, scale_back, d->ln2); } #endif diff --git a/sysdeps/aarch64/fpu/vecmath_config.h b/sysdeps/aarch64/fpu/vecmath_config.h index 7f0a8aa5f2..862eefaf8f 100644 --- a/sysdeps/aarch64/fpu/vecmath_config.h +++ b/sysdeps/aarch64/fpu/vecmath_config.h @@ -75,49 +75,37 @@ extern const struct v_log10_data } table[1 << V_LOG10_TABLE_BITS]; } __v_log10_data attribute_hidden; -extern const struct erff_data +extern const struct v_erff_data { struct { float erf, scale; } tab[513]; -} __erff_data attribute_hidden; +} __v_erff_data attribute_hidden; -extern const struct sv_erff_data -{ - float erf[513]; - float scale[513]; -} __sv_erff_data attribute_hidden; - -extern const struct erf_data +extern const struct v_erf_data { struct { double erf, scale; } tab[769]; -} __erf_data attribute_hidden; - -extern const struct sv_erf_data -{ - double erf[769]; - double scale[769]; -} __sv_erf_data attribute_hidden; +} __v_erf_data attribute_hidden; -extern const struct erfc_data +extern const struct v_erfc_data { struct { double erfc, scale; } tab[3488]; -} __erfc_data attribute_hidden; +} __v_erfc_data attribute_hidden; -extern const struct erfcf_data +extern const struct v_erfcf_data { struct { float erfc, scale; } tab[645]; -} __erfcf_data attribute_hidden; +} __v_erfcf_data attribute_hidden; /* Some data for AdvSIMD and SVE pow's internal exp and log. */ #define V_POW_EXP_TABLE_BITS 8 diff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps index 846fb2c29e..c523d45802 100644 --- a/sysdeps/aarch64/libm-test-ulps +++ b/sysdeps/aarch64/libm-test-ulps @@ -801,6 +801,7 @@ float: 1 ldouble: 1 Function: Imaginary part of "csin": +float: 1 ldouble: 1 Function: Real part of "csin_downward": @@ -1083,22 +1084,18 @@ ldouble: 3 Function: "exp10m1": double: 4 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 5 -float: 3 ldouble: 6 Function: "exp2": @@ -1131,22 +1128,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_advsimd": @@ -1171,7 +1164,6 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_advsimd": @@ -1180,7 +1172,6 @@ float: 1 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_sve": @@ -1189,12 +1180,10 @@ float: 1 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1357,27 +1346,22 @@ ldouble: 1 Function: "log10p1": double: 2 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_advsimd": @@ -1386,7 +1370,6 @@ float: 1 Function: "log1p_downward": double: 1 -float: 2 ldouble: 3 Function: "log1p_sve": @@ -1395,12 +1378,10 @@ float: 1 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1433,22 +1414,18 @@ ldouble: 1 Function: "log2p1": double: 2 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_advsimd": @@ -1474,22 +1451,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 1 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1653,22 +1626,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S index 7ef77ee8c9..b76dde1557 100644 --- a/sysdeps/aarch64/memset.S +++ b/sysdeps/aarch64/memset.S @@ -1,4 +1,5 @@ -/* Copyright (C) 2012-2024 Free Software Foundation, Inc. +/* Generic optimized memset using SIMD. + Copyright (C) 2012-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -17,7 +18,6 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include "memset-reg.h" #ifndef MEMSET # define MEMSET memset @@ -25,130 +25,131 @@ /* Assumptions: * - * ARMv8-a, AArch64, unaligned accesses + * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses. * */ -ENTRY (MEMSET) +#define dstin x0 +#define valw w1 +#define count x2 +#define dst x3 +#define dstend x4 +#define zva_val x5 +#define off x3 +#define dstend2 x5 +ENTRY (MEMSET) PTR_ARG (0) SIZE_ARG (2) dup v0.16B, valw + cmp count, 16 + b.lo L(set_small) + add dstend, dstin, count + cmp count, 64 + b.hs L(set_128) - cmp count, 96 - b.hi L(set_long) - cmp count, 16 - b.hs L(set_medium) - mov val, v0.D[0] + /* Set 16..63 bytes. */ + mov off, 16 + and off, off, count, lsr 1 + sub dstend2, dstend, off + str q0, [dstin] + str q0, [dstin, off] + str q0, [dstend2, -16] + str q0, [dstend, -16] + ret + .p2align 4 /* Set 0..15 bytes. */ - tbz count, 3, 1f - str val, [dstin] - str val, [dstend, -8] - ret - nop -1: tbz count, 2, 2f - str valw, [dstin] - str valw, [dstend, -4] +L(set_small): + add dstend, dstin, count + cmp count, 4 + b.lo 2f + lsr off, count, 3 + sub dstend2, dstend, off, lsl 2 + str s0, [dstin] + str s0, [dstin, off, lsl 2] + str s0, [dstend2, -4] + str s0, [dstend, -4] ret + + /* Set 0..3 bytes. */ 2: cbz count, 3f + lsr off, count, 1 strb valw, [dstin] - tbz count, 1, 3f - strh valw, [dstend, -2] + strb valw, [dstin, off] + strb valw, [dstend, -1] 3: ret - /* Set 17..96 bytes. */ -L(set_medium): - str q0, [dstin] - tbnz count, 6, L(set96) - str q0, [dstend, -16] - tbz count, 5, 1f - str q0, [dstin, 16] - str q0, [dstend, -32] -1: ret - .p2align 4 - /* Set 64..96 bytes. Write 64 bytes from the start and - 32 bytes from the end. */ -L(set96): - str q0, [dstin, 16] +L(set_128): + bic dst, dstin, 15 + cmp count, 128 + b.hi L(set_long) + stp q0, q0, [dstin] stp q0, q0, [dstin, 32] + stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] ret - .p2align 3 - nop + .p2align 4 L(set_long): - and valw, valw, 255 - bic dst, dstin, 15 str q0, [dstin] - cmp count, 256 - ccmp valw, 0, 0, cs - b.eq L(try_zva) -L(no_zva): - sub count, dstend, dst /* Count is 16 too large. */ - sub dst, dst, 16 /* Dst is biased by -32. */ - sub count, count, 64 + 16 /* Adjust count and bias for loop. */ -1: stp q0, q0, [dst, 32] - stp q0, q0, [dst, 64]! -L(tail64): - subs count, count, 64 - b.hi 1b -2: stp q0, q0, [dstend, -64] + str q0, [dst, 16] + tst valw, 255 + b.ne L(no_zva) +#ifndef ZVA64_ONLY + mrs zva_val, dczid_el0 + and zva_val, zva_val, 31 + cmp zva_val, 4 /* ZVA size is 64 bytes. */ + b.ne L(zva_128) +#endif + stp q0, q0, [dst, 32] + bic dst, dstin, 63 + sub count, dstend, dst /* Count is now 64 too large. */ + sub count, count, 64 + 64 /* Adjust count and bias for loop. */ + + /* Write last bytes before ZVA loop. */ + stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] + + .p2align 4 +L(zva64_loop): + add dst, dst, 64 + dc zva, dst + subs count, count, 64 + b.hi L(zva64_loop) ret -L(try_zva): -#ifndef ZVA64_ONLY .p2align 3 - mrs tmp1, dczid_el0 - tbnz tmp1w, 4, L(no_zva) - and tmp1w, tmp1w, 15 - cmp tmp1w, 4 /* ZVA size is 64 bytes. */ - b.ne L(zva_128) - nop -#endif - /* Write the first and last 64 byte aligned block using stp rather - than using DC ZVA. This is faster on some cores. - */ - .p2align 4 -L(zva_64): - str q0, [dst, 16] +L(no_zva): + sub count, dstend, dst /* Count is 32 too large. */ + sub count, count, 64 + 32 /* Adjust count and bias for loop. */ +L(no_zva_loop): stp q0, q0, [dst, 32] - bic dst, dst, 63 stp q0, q0, [dst, 64] - stp q0, q0, [dst, 96] - sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+64+64 /* Adjust count and bias for loop. */ - add dst, dst, 128 -1: dc zva, dst add dst, dst, 64 subs count, count, 64 - b.hi 1b - stp q0, q0, [dst, 0] - stp q0, q0, [dst, 32] + b.hi L(no_zva_loop) stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] ret #ifndef ZVA64_ONLY - .p2align 3 + .p2align 4 L(zva_128): - cmp tmp1w, 5 /* ZVA size is 128 bytes. */ - b.ne L(zva_other) + cmp zva_val, 5 /* ZVA size is 128 bytes. */ + b.ne L(no_zva) - str q0, [dst, 16] stp q0, q0, [dst, 32] stp q0, q0, [dst, 64] stp q0, q0, [dst, 96] bic dst, dst, 127 sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+128 /* Adjust count and bias for loop. */ - add dst, dst, 128 -1: dc zva, dst - add dst, dst, 128 + sub count, count, 128 + 128 /* Adjust count and bias for loop. */ +1: add dst, dst, 128 + dc zva, dst subs count, count, 128 b.hi 1b stp q0, q0, [dstend, -128] @@ -156,35 +157,6 @@ L(zva_128): stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] ret - -L(zva_other): - mov tmp2w, 4 - lsl zva_lenw, tmp2w, tmp1w - add tmp1, zva_len, 64 /* Max alignment bytes written. */ - cmp count, tmp1 - blo L(no_zva) - - sub tmp2, zva_len, 1 - add tmp1, dst, zva_len - add dst, dst, 16 - subs count, tmp1, dst /* Actual alignment bytes to write. */ - bic tmp1, tmp1, tmp2 /* Aligned dc zva start address. */ - beq 2f -1: stp q0, q0, [dst], 64 - stp q0, q0, [dst, -32] - subs count, count, 64 - b.hi 1b -2: mov dst, tmp1 - sub count, dstend, tmp1 /* Remaining bytes to write. */ - subs count, count, zva_len - b.lo 4f -3: dc zva, dst - add dst, dst, zva_len - subs count, count, zva_len - b.hs 3b -4: add count, count, zva_len - sub dst, dst, 32 /* Bias dst for tail loop. */ - b L(tail64) #endif END (MEMSET) diff --git a/sysdeps/aarch64/multiarch/memset_a64fx.S b/sysdeps/aarch64/multiarch/memset_a64fx.S index 2e6d882fc9..f665b5a891 100644 --- a/sysdeps/aarch64/multiarch/memset_a64fx.S +++ b/sysdeps/aarch64/multiarch/memset_a64fx.S @@ -18,7 +18,6 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include <sysdeps/aarch64/memset-reg.h> /* Assumptions: * @@ -36,6 +35,14 @@ .arch armv8.2-a+sve +#define dstin x0 +#define valw w1 +#define count x2 +#define dst x3 +#define dstend x4 +#define tmp1 x5 +#define tmp2 x6 + .macro st1b_unroll first=0, last=7 st1b z0.b, p0, [dst, \first, mul vl] .if \last-\first diff --git a/sysdeps/aarch64/multiarch/memset_emag.S b/sysdeps/aarch64/multiarch/memset_emag.S index 6d714ed0e1..cf1b25f2ed 100644 --- a/sysdeps/aarch64/multiarch/memset_emag.S +++ b/sysdeps/aarch64/multiarch/memset_emag.S @@ -18,7 +18,6 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include "memset-reg.h" /* Assumptions: * @@ -26,6 +25,13 @@ * */ +#define dstin x0 +#define val x1 +#define valw w1 +#define count x2 +#define dst x3 +#define dstend x4 + ENTRY (__memset_emag) PTR_ARG (0) diff --git a/sysdeps/aarch64/multiarch/memset_kunpeng.S b/sysdeps/aarch64/multiarch/memset_kunpeng.S index 7b21550137..f815c20b03 100644 --- a/sysdeps/aarch64/multiarch/memset_kunpeng.S +++ b/sysdeps/aarch64/multiarch/memset_kunpeng.S @@ -18,7 +18,6 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include <sysdeps/aarch64/memset-reg.h> /* Assumptions: * @@ -26,6 +25,12 @@ * */ +#define dstin x0 +#define valw w1 +#define count x2 +#define dst x3 +#define dstend x4 + ENTRY (__memset_kunpeng) PTR_ARG (0) diff --git a/sysdeps/aarch64/multiarch/memset_oryon1.S b/sysdeps/aarch64/multiarch/memset_oryon1.S index b43a43b54e..6fa28a9bd0 100644 --- a/sysdeps/aarch64/multiarch/memset_oryon1.S +++ b/sysdeps/aarch64/multiarch/memset_oryon1.S @@ -19,12 +19,18 @@ <https://www.gnu.org/licenses/>. */ #include <sysdep.h> -#include "memset-reg.h" /* Assumptions: ARMv8-a, AArch64, unaligned accesses */ +#define dstin x0 +#define val x1 +#define valw w1 +#define count x2 +#define dst x3 +#define dstend x4 + ENTRY (__memset_oryon1) PTR_ARG (0) diff --git a/sysdeps/alpha/fpu/libm-test-ulps b/sysdeps/alpha/fpu/libm-test-ulps index e28c2af683..212c52c8cc 100644 --- a/sysdeps/alpha/fpu/libm-test-ulps +++ b/sysdeps/alpha/fpu/libm-test-ulps @@ -1034,22 +1034,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1206,22 +1202,18 @@ ldouble: 3 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 2 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1271,22 +1263,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 2 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1410,22 +1398,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/arc/bits/endianness.h b/sysdeps/arc/bits/endianness.h index 8f17ca84b4..4a6e7d4c15 100644 --- a/sysdeps/arc/bits/endianness.h +++ b/sysdeps/arc/bits/endianness.h @@ -5,11 +5,7 @@ # error "Never use <bits/endian.h> directly; include <endian.h> instead." #endif -/* ARC has selectable endianness. */ -#ifdef __BIG_ENDIAN__ -# define __BYTE_ORDER __BIG_ENDIAN -#else -# define __BYTE_ORDER __LITTLE_ENDIAN -#endif +/* Only little-endian ARC is supported. */ +#define __BYTE_ORDER __LITTLE_ENDIAN #endif /* bits/endianness.h */ diff --git a/sysdeps/arc/configure b/sysdeps/arc/configure index 08e4f23f89..b4192983bf 100644 --- a/sysdeps/arc/configure +++ b/sysdeps/arc/configure @@ -10,7 +10,7 @@ libc_cv_asm_line_sep='`' printf "%s\n" "#define ASM_LINE_SEP $libc_cv_asm_line_sep" >>confdefs.h -# For big endian ABI, generate a symbol for selecting right dynamic linker +# ARC big endian ABI is no longer supported. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 @@ -175,13 +175,8 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arc_be" >&5 printf "%s\n" "$libc_cv_arc_be" >&6; } if test $libc_cv_arc_be = yes; then - # For shlib-versions. - printf "%s\n" "#define HAVE_ARC_BE 1" >>confdefs.h - - config_vars="$config_vars -default-abi = arcbe" -else - config_vars="$config_vars -default-abi = arcle" + as_fn_error $? "big-endian not supported" "$LINENO" 5 fi +config_vars="$config_vars +default-abi = arcle" diff --git a/sysdeps/arc/configure.ac b/sysdeps/arc/configure.ac index 619da4e088..48dc6f5b9b 100644 --- a/sysdeps/arc/configure.ac +++ b/sysdeps/arc/configure.ac @@ -9,7 +9,7 @@ libc_cv_have_sdata_section=no libc_cv_asm_line_sep='`' AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) -# For big endian ABI, generate a symbol for selecting right dynamic linker +# ARC big endian ABI is no longer supported. AC_CACHE_CHECK([for big endian], [libc_cv_arc_be], [AC_EGREP_CPP(yes,[#ifdef __BIG_ENDIAN__ @@ -17,9 +17,6 @@ AC_CACHE_CHECK([for big endian], #endif ], libc_cv_arc_be=yes, libc_cv_arc_be=no)]) if test $libc_cv_arc_be = yes; then - # For shlib-versions. - AC_DEFINE(HAVE_ARC_BE) - LIBC_CONFIG_VAR([default-abi], [arcbe]) -else - LIBC_CONFIG_VAR([default-abi], [arcle]) + AC_MSG_ERROR([big-endian not supported]) fi +LIBC_CONFIG_VAR([default-abi], [arcle]) diff --git a/sysdeps/arc/fpu/libm-test-ulps b/sysdeps/arc/fpu/libm-test-ulps index 7e2c2dff13..7812a11b5b 100644 --- a/sysdeps/arc/fpu/libm-test-ulps +++ b/sysdeps/arc/fpu/libm-test-ulps @@ -789,19 +789,15 @@ float: 1 Function: "exp10m1": double: 4 -float: 2 Function: "exp10m1_downward": double: 3 -float: 3 Function: "exp10m1_towardzero": double: 2 -float: 3 Function: "exp10m1_upward": double: 5 -float: 3 Function: "exp2": double: 1 @@ -819,19 +815,15 @@ float: 1 Function: "exp2m1": double: 2 -float: 2 Function: "exp2m1_downward": double: 3 -float: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 Function: "exp2m1_upward": double: 3 -float: 3 Function: "exp_downward": double: 1 @@ -847,19 +839,15 @@ float: 2 Function: "expm1": double: 2 -float: 2 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 2 -float: 2 Function: "gamma": double: 7 @@ -977,35 +965,27 @@ float: 4 Function: "log10p1": double: 2 -float: 2 Function: "log10p1_downward": double: 2 -float: 3 Function: "log10p1_towardzero": double: 3 -float: 2 Function: "log10p1_upward": double: 2 -float: 3 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 1 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -1021,19 +1001,15 @@ float: 1 Function: "log2p1": double: 2 -float: 2 Function: "log2p1_downward": double: 2 -float: 2 Function: "log2p1_towardzero": double: 2 -float: 2 Function: "log2p1_upward": double: 2 -float: 2 Function: "log_towardzero": double: 1 @@ -1045,19 +1021,15 @@ float: 1 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 1 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1157,19 +1129,15 @@ float: 3 Function: "tgamma": double: 9 -float: 9 Function: "tgamma_downward": double: 9 -float: 9 Function: "tgamma_towardzero": double: 9 -float: 8 Function: "tgamma_upward": double: 9 -float: 9 Function: "y0": double: 3 diff --git a/sysdeps/arc/nofpu/libm-test-ulps b/sysdeps/arc/nofpu/libm-test-ulps index d9d6c76c3e..d0cfa46c3d 100644 --- a/sysdeps/arc/nofpu/libm-test-ulps +++ b/sysdeps/arc/nofpu/libm-test-ulps @@ -194,18 +194,15 @@ float: 1 Function: "exp10m1": double: 3 -float: 2 Function: "exp2": double: 1 Function: "exp2m1": double: 2 -float: 2 Function: "expm1": double: 1 -float: 1 Function: "gamma": double: 4 @@ -237,11 +234,9 @@ float: 2 Function: "log10p1": double: 1 -float: 2 Function: "log1p": double: 1 -float: 1 Function: "log2": double: 2 @@ -249,11 +244,9 @@ float: 1 Function: "log2p1": double: 1 -float: 2 Function: "logp1": double: 1 -float: 1 Function: "pow": double: 1 @@ -279,7 +272,6 @@ float: 2 Function: "tgamma": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/arm/libm-test-ulps b/sysdeps/arm/libm-test-ulps index 100e9d1956..6cdd3d53d6 100644 --- a/sysdeps/arm/libm-test-ulps +++ b/sysdeps/arm/libm-test-ulps @@ -574,6 +574,9 @@ Function: Real part of "csin": double: 1 float: 1 +Function: Imaginary part of "csin": +float: 1 + Function: Real part of "csin_downward": double: 3 float: 3 @@ -779,19 +782,15 @@ float: 1 Function: "exp10m1": double: 3 -float: 2 Function: "exp10m1_downward": double: 3 -float: 3 Function: "exp10m1_towardzero": double: 2 -float: 3 Function: "exp10m1_upward": double: 4 -float: 4 Function: "exp2": double: 1 @@ -811,19 +810,15 @@ float: 1 Function: "exp2m1": double: 2 -float: 2 Function: "exp2m1_downward": double: 3 -float: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 Function: "exp2m1_upward": double: 3 -float: 3 Function: "exp_downward": double: 1 @@ -839,19 +834,15 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -967,35 +958,27 @@ float: 2 Function: "log10p1": double: 1 -float: 2 Function: "log10p1_downward": double: 2 -float: 3 Function: "log10p1_towardzero": double: 3 -float: 2 Function: "log10p1_upward": double: 2 -float: 3 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -1015,19 +998,15 @@ float: 3 Function: "log2p1": double: 1 -float: 2 Function: "log2p1_downward": double: 2 -float: 2 Function: "log2p1_towardzero": double: 2 -float: 2 Function: "log2p1_upward": double: 2 -float: 2 Function: "log_downward": float: 2 @@ -1041,19 +1020,15 @@ float: 2 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1152,19 +1127,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 9 -float: 7 Function: "tgamma_towardzero": double: 9 -float: 7 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/csky/fpu/libm-test-ulps b/sysdeps/csky/fpu/libm-test-ulps index fc634f89ca..a7b2bec17e 100644 --- a/sysdeps/csky/fpu/libm-test-ulps +++ b/sysdeps/csky/fpu/libm-test-ulps @@ -799,19 +799,15 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -923,19 +919,15 @@ float: 2 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -952,19 +944,15 @@ double: 3 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1061,19 +1049,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 8 -float: 7 Function: "tgamma_towardzero": double: 9 -float: 7 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/csky/nofpu/libm-test-ulps b/sysdeps/csky/nofpu/libm-test-ulps index a1e28c8ee0..4e4451a5d2 100644 --- a/sysdeps/csky/nofpu/libm-test-ulps +++ b/sysdeps/csky/nofpu/libm-test-ulps @@ -797,19 +797,15 @@ double: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -924,19 +920,15 @@ float: 2 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -966,19 +958,15 @@ float: 2 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1092,19 +1080,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 5 -float: 5 Function: "tgamma_towardzero": double: 5 -float: 4 Function: "tgamma_upward": double: 4 -float: 4 Function: "y0": double: 3 diff --git a/sysdeps/generic/internal-signals.h b/sysdeps/generic/internal-signals.h index 3db100be10..e031a96bac 100644 --- a/sysdeps/generic/internal-signals.h +++ b/sysdeps/generic/internal-signals.h @@ -20,6 +20,7 @@ # define __INTERNAL_SIGNALS_H #include <signal.h> +#include <internal-sigset.h> #include <sigsetops.h> #include <stdbool.h> #include <stddef.h> @@ -39,10 +40,32 @@ clear_internal_signals (sigset_t *set) { } -typedef sigset_t internal_sigset_t; - #define internal_sigemptyset(__s) __sigemptyset (__s) +#define internal_sigfillset(__s) __sigfillset (__s) #define internal_sigaddset(__s, __i) __sigaddset (__s, __i) #define internal_sigprocmask(__h, __s, __o) __sigprocmask (__h, __s, __o) +static inline void +internal_signal_block_all (internal_sigset_t *oset) +{ + internal_sigset_t set; + internal_sigfillset (&set); + internal_sigprocmask (SIG_BLOCK, &set, oset); +} + +static inline void +internal_signal_restore_set (const internal_sigset_t *set) +{ + internal_sigprocmask (SIG_SETMASK, set, NULL); +} + +static inline void +internal_signal_unblock_signal (int sig) +{ + internal_sigset_t set; + internal_sigemptyset (&set); + internal_sigaddset (&set, sig); + internal_sigprocmask (SIG_UNBLOCK, &set, NULL); +} + #endif /* __INTERNAL_SIGNALS_H */ diff --git a/sysdeps/generic/internal-sigset.h b/sysdeps/generic/internal-sigset.h new file mode 100644 index 0000000000..80279ffc47 --- /dev/null +++ b/sysdeps/generic/internal-sigset.h @@ -0,0 +1,26 @@ +/* Internal sigset_t definition. + Copyright (C) 2022-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _INTERNAL_SIGSET_H +#define _INTERNAL_SIGSET_H + +#include <signal.h> + +typedef sigset_t internal_sigset_t; + +#endif diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 259ce2e7d6..91447a5e77 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -1014,6 +1014,13 @@ extern void _dl_relocate_object (struct link_map *map, int reloc_mode, int consider_profiling) attribute_hidden; +/* Perform relocation, but do not apply RELRO. Does not check + L->relocated. Otherwise the same as _dl_relocate_object. */ +void _dl_relocate_object_no_relro (struct link_map *map, + struct r_scope_elem *scope[], + int reloc_mode, int consider_profiling) + attribute_hidden; + /* Protect PT_GNU_RELRO area. */ extern void _dl_protect_relro (struct link_map *map) attribute_hidden; diff --git a/sysdeps/hppa/fpu/libm-test-ulps b/sysdeps/hppa/fpu/libm-test-ulps index ea5101f6b6..021a2a482c 100644 --- a/sysdeps/hppa/fpu/libm-test-ulps +++ b/sysdeps/hppa/fpu/libm-test-ulps @@ -797,20 +797,16 @@ double: 2 float: 1 Function: "exp10m1": -double: 2 -float: 1 +double: 4 Function: "exp10m1_downward": -double: 1 -float: 1 +double: 3 Function: "exp10m1_towardzero": -double: 1 -float: 1 +double: 2 Function: "exp10m1_upward": -double: 3 -float: 1 +double: 5 Function: "exp2": double: 1 @@ -829,20 +825,16 @@ double: 1 float: 1 Function: "exp2m1": -double: 1 -float: 1 +double: 2 Function: "exp2m1_downward": -double: 2 -float: 1 +double: 3 Function: "exp2m1_towardzero": -double: 2 -float: 1 +double: 3 Function: "exp2m1_upward": -double: 1 -float: 1 +double: 3 Function: "exp_downward": double: 1 @@ -858,20 +850,16 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -992,36 +980,28 @@ double: 2 float: 2 Function: "log10p1": -double: 1 -float: 1 +double: 2 Function: "log10p1_downward": double: 2 -float: 1 Function: "log10p1_towardzero": -double: 2 -float: 2 +double: 3 Function: "log10p1_upward": double: 2 -float: 1 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -1041,19 +1021,15 @@ float: 3 Function: "log2p1": double: 2 -float: 2 Function: "log2p1_downward": double: 2 -float: 2 Function: "log2p1_towardzero": double: 2 -float: 2 Function: "log2p1_upward": double: 2 -float: 2 Function: "log_downward": float: 2 @@ -1067,19 +1043,15 @@ float: 2 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1181,20 +1153,16 @@ float: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 1 Function: "tgamma_downward": double: 9 -float: 7 Function: "tgamma_towardzero": double: 9 -float: 7 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h index cf8a2efe86..b0c9ceb23a 100644 --- a/sysdeps/htl/pthreadP.h +++ b/sysdeps/htl/pthreadP.h @@ -92,6 +92,8 @@ int __pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, int __pthread_attr_getstack (const pthread_attr_t *, void **, size_t *); void __pthread_testcancel (void); +#define __pthread_raise_internal(__sig) raise (__sig) + libc_hidden_proto (__pthread_self) #if IS_IN (libpthread) diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S deleted file mode 100644 index 47f82e1993..0000000000 --- a/sysdeps/i386/fpu/e_log10f.S +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Public domain. - */ - -#include <machine/asm.h> -#include <libm-alias-finite.h> - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log10f) - fldlg2 // log10(2) - flds 4(%esp) // x : log10(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fxam - fnstsw - fld %st // x : x : log10(2) - sahf - jc 3f // in case x is NaN or ±Inf -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log10(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret - -2: fstp %st(0) // x : log10(2) - fyl2x // log10(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log10f) -libm_alias_finite (__ieee754_log10f, __log10f) diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index 7da13797ca..a77ded2648 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -1155,25 +1155,21 @@ ldouble: 2 Function: "exp10m1": double: 3 -float: 1 float128: 3 ldouble: 4 Function: "exp10m1_downward": double: 3 -float: 3 float128: 6 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 2 float128: 6 ldouble: 5 Function: "exp10m1_upward": double: 5 -float: 3 float128: 6 ldouble: 6 @@ -1198,25 +1194,21 @@ ldouble: 1 Function: "exp2m1": double: 2 -float: 1 float128: 2 ldouble: 3 Function: "exp2m1_downward": double: 3 -float: 3 float128: 3 ldouble: 6 Function: "exp2m1_towardzero": double: 3 -float: 2 float128: 4 ldouble: 5 Function: "exp2m1_upward": double: 3 -float: 3 float128: 5 ldouble: 6 @@ -1242,19 +1234,16 @@ ldouble: 3 Function: "expm1_downward": double: 1 -float: 1 float128: 2 ldouble: 4 Function: "expm1_towardzero": double: 1 -float: 1 float128: 4 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 float128: 3 ldouble: 4 @@ -1425,25 +1414,21 @@ ldouble: 1 Function: "log10p1": double: 1 -float: 2 float128: 3 ldouble: 4 Function: "log10p1_downward": double: 2 -float: 1 float128: 4 ldouble: 8 Function: "log10p1_towardzero": double: 2 -float: 1 float128: 3 ldouble: 8 Function: "log10p1_upward": double: 2 -float: 2 float128: 4 ldouble: 6 @@ -1454,19 +1439,16 @@ ldouble: 2 Function: "log1p_downward": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log1p_towardzero": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log1p_upward": double: 1 -float: 1 float128: 2 ldouble: 3 @@ -1495,25 +1477,21 @@ ldouble: 1 Function: "log2p1": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log2p1_downward": double: 2 -float: 2 float128: 3 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 float128: 2 ldouble: 3 Function: "log2p1_upward": -double: 1 -float: 2 +double: 2 float128: 3 ldouble: 5 @@ -1539,19 +1517,16 @@ ldouble: 2 Function: "logp1_downward": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "logp1_towardzero": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "logp1_upward": double: 1 -float: 1 float128: 2 ldouble: 3 @@ -1699,25 +1674,21 @@ ldouble: 4 Function: "tgamma": double: 9 -float: 8 float128: 4 ldouble: 5 Function: "tgamma_downward": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_towardzero": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_upward": double: 9 -float: 8 float128: 4 ldouble: 5 diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S deleted file mode 100644 index a1cb5bf0ab..0000000000 --- a/sysdeps/i386/fpu/s_expm1f.S +++ /dev/null @@ -1,112 +0,0 @@ -/* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996-2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - - /* Using: e^x - 1 = 2^(x * log2(e)) - 1 */ - -#include <sysdep.h> -#include <machine/asm.h> -#include <i386-math-asm.h> -#include <libm-alias-float.h> - - .section .rodata - - .align ALIGNARG(4) - .type minus1,@object -minus1: .double -1.0 - ASM_SIZE_DIRECTIVE(minus1) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type l2e,@object -l2e: .quad 0xb8aa3b295c17f0bc /* 1.442695040888963407359924681002 */ - .short 0x3fff - ASM_SIZE_DIRECTIVE(l2e) - -DEFINE_FLT_MIN - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__expm1f) - movzwl 4+2(%esp), %eax - xorb $0x80, %ah // invert sign bit (now 1 is "positive") - cmpl $0xc2b1, %eax // is num >= 88.5? - jae HIDDEN_JUMPTARGET (__expf) - - flds 4(%esp) // x - fxam // Is NaN, +-Inf or +-0? - xorb $0x80, %ah - cmpl $0xc190, %eax // is num <= -18.0? - fstsw %ax - movb $0x45, %ch - jb 4f - - // Below -18.0 (may be -NaN or -Inf). - andb %ah, %ch -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpb $0x01, %ch - je 5f // If -NaN, jump. - jmp 2f // -large, possibly -Inf. - -4: // In range -18.0 to 88.5 (may be +-0 but not NaN or +-Inf). - andb %ah, %ch - cmpb $0x40, %ch - je 3f // If +-0, jump. -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - -5: fldt MO(l2e) // log2(e) : x - fmulp // log2(e)*x - fld %st // log2(e)*x : log2(e)*x - // Set round-to-nearest temporarily. - subl $8, %esp - cfi_adjust_cfa_offset (8) - fstcw 4(%esp) - movl $0xf3ff, %ecx - andl 4(%esp), %ecx - movl %ecx, (%esp) - fldcw (%esp) - frndint // int(log2(e)*x) : log2(e)*x - fldcw 4(%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x) - fxch // fract(log2(e)*x) : int(log2(e)*x) - f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x) - fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x) - fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrp %st, %st(1) // 2^(log2(e)*x) - FLT_CHECK_FORCE_UFLOW - ret - -2: fstp %st - fldl MO(minus1) // Set result to -1.0. -3: ret -END(__expm1f) -libm_alias_float (__expm1, expm1) diff --git a/sysdeps/i386/fpu/s_log1pf.S b/sysdeps/i386/fpu/s_log1pf.S deleted file mode 100644 index 82a3f448db..0000000000 --- a/sysdeps/i386/fpu/s_log1pf.S +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Public domain. - */ - -#include <machine/asm.h> -#include <i386-math-asm.h> - -RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $") - - .section .rodata - - .align ALIGNARG(4) - /* The fyl2xp1 can only be used for values in - -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2 - 0.29 is a safe value. - */ -limit: .float 0.29 -one: .float 1.0 - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - -/* - * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29, - * otherwise fyl2x with the needed extra computation. - */ - .text -ENTRY(__log1pf) - fldln2 - - flds 4(%esp) - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - fxam - fnstsw - fld %st - sahf - jc 3f // in case x is NaN or ±Inf -4: fabs - fcomps MO(limit) - fnstsw - sahf - jc 2f - - fadds MO(one) - fyl2x - ret - -2: fyl2xp1 - FLT_CHECK_FORCE_UFLOW_NONNAN - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret - -END (__log1pf) diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps index 2c7497bf80..a9cd01bf03 100644 --- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps +++ b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps @@ -1158,25 +1158,21 @@ ldouble: 2 Function: "exp10m1": double: 3 -float: 1 float128: 3 ldouble: 4 Function: "exp10m1_downward": double: 3 -float: 3 float128: 6 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 2 float128: 6 ldouble: 5 Function: "exp10m1_upward": double: 5 -float: 3 float128: 6 ldouble: 6 @@ -1201,25 +1197,21 @@ ldouble: 1 Function: "exp2m1": double: 2 -float: 1 float128: 2 ldouble: 3 Function: "exp2m1_downward": double: 3 -float: 3 float128: 3 ldouble: 6 Function: "exp2m1_towardzero": double: 3 -float: 2 float128: 4 -ldouble: 5 +ldouble: 6 Function: "exp2m1_upward": double: 3 -float: 3 float128: 5 ldouble: 6 @@ -1245,19 +1237,16 @@ ldouble: 3 Function: "expm1_downward": double: 1 -float: 1 float128: 2 ldouble: 4 Function: "expm1_towardzero": double: 1 -float: 1 float128: 4 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 float128: 3 ldouble: 4 @@ -1428,25 +1417,21 @@ ldouble: 1 Function: "log10p1": double: 1 -float: 2 float128: 3 ldouble: 4 Function: "log10p1_downward": double: 2 -float: 1 float128: 4 ldouble: 8 Function: "log10p1_towardzero": double: 2 -float: 1 float128: 3 ldouble: 8 Function: "log10p1_upward": double: 2 -float: 2 float128: 4 ldouble: 6 @@ -1457,19 +1442,16 @@ ldouble: 2 Function: "log1p_downward": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log1p_towardzero": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log1p_upward": double: 1 -float: 1 float128: 2 ldouble: 3 @@ -1498,25 +1480,21 @@ ldouble: 1 Function: "log2p1": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "log2p1_downward": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log2p1_towardzero": double: 2 -float: 2 float128: 2 ldouble: 4 Function: "log2p1_upward": double: 1 -float: 2 float128: 3 ldouble: 5 @@ -1542,19 +1520,16 @@ ldouble: 2 Function: "logp1_downward": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "logp1_towardzero": double: 1 -float: 1 float128: 3 ldouble: 4 Function: "logp1_upward": double: 1 -float: 1 float128: 2 ldouble: 3 @@ -1701,25 +1676,21 @@ ldouble: 4 Function: "tgamma": double: 9 -float: 8 float128: 4 ldouble: 5 Function: "tgamma_downward": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_towardzero": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_upward": double: 8 -float: 8 float128: 4 ldouble: 5 diff --git a/sysdeps/i386/i686/multiarch/s_fma-fma.c b/sysdeps/i386/i686/multiarch/s_fma-fma.c index 9d17f67a10..6c3fbc0290 100644 --- a/sysdeps/i386/i686/multiarch/s_fma-fma.c +++ b/sysdeps/i386/i686/multiarch/s_fma-fma.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/i386/i686/multiarch/s_fma.c b/sysdeps/i386/i686/multiarch/s_fma.c index 978345bda5..3ae111aac5 100644 --- a/sysdeps/i386/i686/multiarch/s_fma.c +++ b/sysdeps/i386/i686/multiarch/s_fma.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/i386/i686/multiarch/s_fmaf-fma.c b/sysdeps/i386/i686/multiarch/s_fmaf-fma.c index f049a60f57..aff92fa5b6 100644 --- a/sysdeps/i386/i686/multiarch/s_fmaf-fma.c +++ b/sysdeps/i386/i686/multiarch/s_fmaf-fma.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/i386/i686/multiarch/s_fmaf.c b/sysdeps/i386/i686/multiarch/s_fmaf.c index e92ebb19a7..c9be68257f 100644 --- a/sysdeps/i386/i686/multiarch/s_fmaf.c +++ b/sysdeps/i386/i686/multiarch/s_fmaf.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/ieee754/dbl-64/gamma_productf.c b/sysdeps/ieee754/dbl-64/gamma_productf.c index f3596eeae4..1cc8931700 100644 --- a/sysdeps/ieee754/dbl-64/gamma_productf.c +++ b/sysdeps/ieee754/dbl-64/gamma_productf.c @@ -1,44 +1 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <math.h> -#include <math-narrow-eval.h> -#include <math_private.h> -#include <float.h> - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -float -__gamma_productf (float x, float x_eps, int n, float *eps) -{ - double x_full = (double) x + (double) x_eps; - double ret = x_full; - for (int i = 1; i < n; i++) - ret *= x_full + i; - - float fret = math_narrow_eval ((float) ret); - *eps = (ret - fret) / fret; - - return fret; -} +/* Not needed. */ diff --git a/sysdeps/ieee754/flt-32/e_gammaf_r.c b/sysdeps/ieee754/flt-32/e_gammaf_r.c index a9730d61c1..6b1f95d50f 100644 --- a/sysdeps/ieee754/flt-32/e_gammaf_r.c +++ b/sysdeps/ieee754/flt-32/e_gammaf_r.c @@ -1,215 +1,176 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. +/* Implementation of the gamma function for binary32. - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. +Copyright (c) 2023-2024 Alexei Sibidanov. - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +The original version of this file was copied from the CORE-MATH +project (file src/binary32/tgamma/tgammaf.c, revision a48e352). - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +/* Changes with respect to the original CORE-MATH code: + - removed the dealing with errno + (this is done in the wrapper math/w_tgammaf_compat.c) + - usage of math_narrow_eval to deal with underflow/overflow + - deal with signgamp + */ #include <math.h> -#include <math-narrow-eval.h> -#include <math_private.h> -#include <fenv_private.h> -#include <math-underflow.h> #include <float.h> +#include <stdint.h> +#include <stddef.h> #include <libm-alias-finite.h> +#include <math-narrow-eval.h> +#include "math_config.h" -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ +float +__ieee754_gammaf_r (float x, int *signgamp) +{ + /* The wrapper in math/w_tgamma_template.c expects *signgamp to be set to a + non-negative value if the returned value is gamma(x), and to a negative + value if it is -gamma(x). + Since the code here directly computes gamma(x), we set it to 1. + */ + if (signgamp != NULL) + *signgamp = 1; -static const float gamma_coeff[] = + /* List of exceptional cases. Each entry contains the 32-bit encoding u of x, + a binary32 approximation f of gamma(x), and a correction term df. */ + static const struct { - 0x1.555556p-4f, - -0xb.60b61p-12f, - 0x3.403404p-12f, + uint32_t u; + float f, df; + } tb[] = { + { 0x27de86a9u, 0x1.268266p+47f, 0x1p22f }, /* x = 0x1.bd0d52p-48 */ + { 0x27e05475u, 0x1.242422p+47f, 0x1p22f }, /* x = 0x1.c0a8eap-48 */ + { 0xb63befb3u, -0x1.5cb6e4p+18f, 0x1p-7f }, /* x = -0x1.77df66p-19 */ + { 0x3c7bb570u, 0x1.021d9p+6f, 0x1p-19f }, /* x = 0x1.f76aep-7 */ + { 0x41e886d1u, 0x1.33136ap+98f, 0x1p73f }, /* x = 0x1.d10da2p+4 */ + { 0xc067d177u, 0x1.f6850cp-3f, 0x1p-28f }, /* x = -0x1.cfa2eep+1 */ + { 0xbd99da31u, -0x1.befe66p+3, -0x1p-22f }, /* x = -0x1.33b462p-4 */ + { 0xbf54c45au, -0x1.a6b4ecp+2, 0x1p-23f }, /* x = -0x1.a988b4p-1 */ + { 0x41ee77feu, 0x1.d3631cp+101, -0x1p-76f }, /* x = 0x1.dceffcp+4 */ + { 0x3f843a64u, 0x1.f6c638p-1, 0x1p-26f }, /* x = 0x1.0874c8p+0 */ }; -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 42, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static float -gammaf_positive (float x, int *exp2_adj) -{ - int local_signgam; - if (x < 0.5f) - { - *exp2_adj = 0; - return __ieee754_expf (__ieee754_lgammaf_r (x + 1, &local_signgam)) / x; - } - else if (x <= 1.5f) - { - *exp2_adj = 0; - return __ieee754_expf (__ieee754_lgammaf_r (x, &local_signgam)); - } - else if (x < 2.5f) - { - *exp2_adj = 0; - float x_adj = x - 1; - return (__ieee754_expf (__ieee754_lgammaf_r (x_adj, &local_signgam)) - * x_adj); - } - else - { - float eps = 0; - float x_eps = 0; - float x_adj = x; - float prod = 1; - if (x < 4.0f) - { - /* Adjust into the range for applying Stirling's - approximation. */ - float n = ceilf (4.0f - x); - x_adj = math_narrow_eval (x + n); - x_eps = (x - (x_adj - n)); - prod = __gamma_productf (x_adj - n, x_eps, n, &eps); + uint32_t t = asuint (x); + uint32_t ax = t << 1; + if (__glibc_unlikely (ax >= (0xffu << 24))) + { /* x=NaN or +/-Inf */ + if (ax == (0xffu << 24)) + { /* x=+/-Inf */ + if (t >> 31) /* x=-Inf */ + return __math_invalidf (x); + return x; /* x=+Inf */ } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - float exp_adj = -eps; - float x_adj_int = roundf (x_adj); - float x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - float x_adj_mant = __frexpf (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2f) + return x + x; /* x=NaN, where x+x ensures the "Invalid operation" + exception is set if x is sNaN */ + } + double z = x; + if (__glibc_unlikely (ax < 0x6d000000u)) + { /* |x| < 0x1p-18 */ + volatile double d = (0x1.fa658c23b1578p-1 - 0x1.d0a118f324b63p-1 * z) + * z - 0x1.2788cfc6fb619p-1; + double f = 1.0 / z + d; + float r = f; + uint64_t rt = asuint64 (f); + if (((rt + 2) & 0xfffffff) < 4) { - x_adj_log2--; - x_adj_mant *= 2.0f; + for (unsigned i = 0; i < sizeof (tb) / sizeof (tb[0]); i++) + if (t == tb[i].u) + return tb[i].f + tb[i].df; } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - float ret = (__ieee754_powf (x_adj_mant, x_adj) - * __ieee754_exp2f (x_adj_log2 * x_adj_frac) - * __ieee754_expf (-x_adj) - * sqrtf (2 * M_PIf / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logf (x_adj); - float bsum = gamma_coeff[NCOEFF - 1]; - float x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1f (exp_adj); + return r; } -} - -float -__ieee754_gammaf_r (float x, int *signgamp) -{ - int32_t hx; - float ret; - - GET_FLOAT_WORD (hx, x); - - if (__glibc_unlikely ((hx & 0x7fffffff) == 0)) + float fx = floorf (x); + if (__glibc_unlikely (x >= 0x1.18522p+5f)) { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; + /* Overflow case. The original CORE-MATH code returns + 0x1p127f * 0x1p127f, but apparently some compilers replace this + by +Inf. */ + return math_narrow_eval (x * 0x1p127f); } - if (__builtin_expect (hx < 0, 0) - && (uint32_t) hx < 0xff800000 && rintf (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); + /* compute k only after the overflow check, otherwise the case to integer + might overflow */ + int k = fx; + if (__glibc_unlikely (fx == x)) + { /* x is integer */ + if (x == 0.0f) + return 1.0f / x; + if (x < 0.0f) + return __math_invalidf (0.0f); + double t0 = 1, x0 = 1; + for (int i = 1; i < k; i++, x0 += 1.0) + t0 *= x0; + return t0; } - if (__glibc_unlikely (hx == 0xff800000)) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; + if (__glibc_unlikely (x < -42.0f)) + { /* negative non-integer */ + /* For x < -42, x non-integer, |gamma(x)| < 2^-151. */ + static const float sgn[2] = { 0x1p-127f, -0x1p-127f }; + /* Underflows always happens */ + return math_narrow_eval (0x1p-127f * sgn[k & 1]); } - if (__glibc_unlikely ((hx & 0x7f800000) == 0x7f800000)) + /* The array c[] stores a degree-15 polynomial approximation for + gamma(x). */ + static const double c[] = { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } + 0x1.c9a76be577123p+0, 0x1.8f2754ddcf90dp+0, 0x1.0d1191949419bp+0, + 0x1.e1f42cf0ae4a1p-2, 0x1.82b358a3ab638p-3, 0x1.e1f2b30cd907bp-5, + 0x1.240f6d4071bd8p-6, 0x1.1522c9f3cd012p-8, 0x1.1fd0051a0525bp-10, + 0x1.9808a8b96c37ep-13, 0x1.b3f78e01152b5p-15, 0x1.49c85a7e1fd04p-18, + 0x1.471ca49184475p-19, -0x1.368f0b7ed9e36p-23, 0x1.882222f9049efp-23, + -0x1.a69ed2042842cp-25 + }; - if (x >= 36.0f) - { - /* Overflow. */ - *signgamp = 0; - ret = math_narrow_eval (FLT_MAX * FLT_MAX); - return ret; - } - else + double m = z - 0x1.7p+1; + double i = roundeven (m); + double step = copysign (1.0, i); + double d = m - i, d2 = d * d, d4 = d2 * d2, d8 = d4 * d4; + double f = (c[0] + d * c[1]) + d2 * (c[2] + d * c[3]) + + d4 * ((c[4] + d * c[5]) + d2 * (c[6] + d * c[7])) + + d8 * ((c[8] + d * c[9]) + d2 * (c[10] + d * c[11]) + + d4 * ((c[12] + d * c[13]) + d2 * (c[14] + d * c[15]))); + int jm = fabs (i); + double w = 1; + if (jm) { - SET_RESTORE_ROUNDF (FE_TONEAREST); - if (x > 0.0f) + z -= 0.5 + step * 0.5; + w = z; + for (int j = jm - 1; j; j--) { - *signgamp = 0; - int exp2_adj; - float tret = gammaf_positive (x, &exp2_adj); - ret = __scalbnf (tret, exp2_adj); + z -= step; + w *= z; } - else if (x >= -FLT_EPSILON / 4.0f) - { - *signgamp = 0; - ret = 1.0f / x; - } - else - { - float tx = truncf (x); - *signgamp = (tx == 2.0f * truncf (tx / 2.0f)) ? -1 : 1; - if (x <= -42.0f) - /* Underflow. */ - ret = FLT_MIN * FLT_MIN; - else - { - float frac = tx - x; - if (frac > 0.5f) - frac = 1.0f - frac; - float sinpix = (frac <= 0.25f - ? __sinf (M_PIf * frac) - : __cosf (M_PIf * (0.5f - frac))); - int exp2_adj; - float tret = M_PIf / (-x * sinpix - * gammaf_positive (-x, &exp2_adj)); - ret = __scalbnf (tret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - ret = math_narrow_eval (ret); - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - { - ret = math_narrow_eval (-copysignf (FLT_MAX, ret) * FLT_MAX); - ret = -ret; - } - else - ret = math_narrow_eval (copysignf (FLT_MAX, ret) * FLT_MAX); - return ret; } - else if (ret == 0) + if (i <= -0.5) + w = 1 / w; + f *= w; + uint64_t rt = asuint64 (f); + float r = f; + /* Deal with exceptional cases. */ + if (__glibc_unlikely (((rt + 2) & 0xfffffff) < 8)) { - if (*signgamp < 0) - { - ret = math_narrow_eval (-copysignf (FLT_MIN, ret) * FLT_MIN); - ret = -ret; - } - else - ret = math_narrow_eval (copysignf (FLT_MIN, ret) * FLT_MIN); - return ret; + for (unsigned j = 0; j < sizeof (tb) / sizeof (tb[0]); j++) + if (t == tb[j].u) + return tb[j].f + tb[j].df; } - else - return ret; + return r; } libm_alias_finite (__ieee754_gammaf_r, __gammaf_r) diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c index 791895e042..03d9e281f3 100644 --- a/sysdeps/ieee754/flt-32/e_log10f.c +++ b/sysdeps/ieee754/flt-32/e_log10f.c @@ -1,54 +1,161 @@ -/* e_log10f.c -- float version of e_log10.c. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ +/* Correctly-rounded radix-10 logarithm function for binary32 value. + +Copyright (c) 2022-2023 Alexei Sibidanov. + +This file is part of the CORE-MATH project +project (file src/binary32/log10/log10f.c, revision bc385c2). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ #include <math.h> -#include <math_private.h> -#include <fix-int-fp-convert-zero.h> +#include <stdint.h> #include <libm-alias-finite.h> +#include "math_config.h" -static const float -two25 = 3.3554432000e+07, /* 0x4c000000 */ -ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */ -log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */ -log10_2lo = 7.9034151668e-07; /* 0x355427db */ +static __attribute__ ((noinline)) float +as_special (float x) +{ + uint32_t ux = asuint (x); + if (ux == 0x7f800000u) + return x; /* +inf */ + uint32_t ax = ux << 1; + if (ax == 0u) + /* -0.0 */ + return __math_divzerof (1); + if (ax > 0xff000000u) + return x + x; /* nan */ + return __math_invalidf (x); +} float -__ieee754_log10f(float x) +__ieee754_log10f (float x) { - float y,z; - int32_t i,k,hx; - - GET_FLOAT_WORD(hx,x); - - k=0; - if (hx < 0x00800000) { /* x < 2**-126 */ - if (__builtin_expect((hx&0x7fffffff)==0, 0)) - return -two25/fabsf (x); /* log(+-0)=-inf */ - if (__builtin_expect(hx<0, 0)) - return (x-x)/(x-x); /* log(-#) = NaN */ - k -= 25; x *= two25; /* subnormal number, scale up x */ - GET_FLOAT_WORD(hx,x); + static const double tr[] = + { + 0x1p+0, 0x1.f81f82p-1, 0x1.f07c1fp-1, 0x1.e9131acp-1, + 0x1.e1e1e1ep-1, 0x1.dae6077p-1, 0x1.d41d41dp-1, 0x1.cd85689p-1, + 0x1.c71c71cp-1, 0x1.c0e0704p-1, 0x1.bacf915p-1, 0x1.b4e81b5p-1, + 0x1.af286bdp-1, 0x1.a98ef6p-1, 0x1.a41a41ap-1, 0x1.9ec8e95p-1, + 0x1.999999ap-1, 0x1.948b0fdp-1, 0x1.8f9c19p-1, 0x1.8acb90fp-1, + 0x1.8618618p-1, 0x1.8181818p-1, 0x1.7d05f41p-1, 0x1.78a4c81p-1, + 0x1.745d174p-1, 0x1.702e05cp-1, 0x1.6c16c17p-1, 0x1.6816817p-1, + 0x1.642c859p-1, 0x1.605816p-1, 0x1.5c9882cp-1, 0x1.58ed231p-1, + 0x1.5555555p-1, 0x1.51d07ebp-1, 0x1.4e5e0a7p-1, 0x1.4afd6ap-1, + 0x1.47ae148p-1, 0x1.446f865p-1, 0x1.4141414p-1, 0x1.3e22cbdp-1, + 0x1.3b13b14p-1, 0x1.3813814p-1, 0x1.3521cfbp-1, 0x1.323e34ap-1, + 0x1.2f684bep-1, 0x1.2c9fb4ep-1, 0x1.29e412ap-1, 0x1.27350b9p-1, + 0x1.2492492p-1, 0x1.21fb781p-1, 0x1.1f7047ep-1, 0x1.1cf06aep-1, + 0x1.1a7b961p-1, 0x1.1811812p-1, 0x1.15b1e5fp-1, 0x1.135c811p-1, + 0x1.1111111p-1, 0x1.0ecf56cp-1, 0x1.0c9715p-1, 0x1.0a6810ap-1, + 0x1.0842108p-1, 0x1.0624dd3p-1, 0x1.041041p-1, 0x1.0204081p-1, + 0.5 + }; + static const double tl[] = + { + -0x1.d45fd6237ebe3p-47, 0x1.b947689311b6ep-8, 0x1.b5e909c96d7d5p-7, + 0x1.45f4f59ed2165p-6, 0x1.af5f92cbd8f1ep-6, 0x1.0ba01a606de8cp-5, + 0x1.3ed119b9a2b7bp-5, 0x1.714834298eec2p-5, 0x1.a30a9d98357fbp-5, + 0x1.d41d512670813p-5, 0x1.02428c0f65519p-4, 0x1.1a23444eecc3ep-4, + 0x1.31b30543f4cb4p-4, 0x1.48f3ed39bfd04p-4, 0x1.5fe8049a0e423p-4, + 0x1.769140a6aa008p-4, 0x1.8cf1836c98cb3p-4, 0x1.a30a9d55541a1p-4, + 0x1.b8de4d1ee823ep-4, 0x1.ce6e4202ca2e6p-4, 0x1.e3bc1accace07p-4, + 0x1.f8c9683b5abd4p-4, 0x1.06cbd68ca9a6ep-3, 0x1.11142f19df73p-3, + 0x1.1b3e71fa7a97fp-3, 0x1.254b4d37a46e3p-3, 0x1.2f3b6912cbf07p-3, + 0x1.390f683115886p-3, 0x1.42c7e7fffc5a8p-3, 0x1.4c65808c78d3cp-3, + 0x1.55e8c50751c55p-3, 0x1.5f52445dec3d8p-3, 0x1.68a288c3f12p-3, + 0x1.71da17bdf0d19p-3, 0x1.7af973608afd9p-3, 0x1.84011952a2579p-3, + 0x1.8cf1837a7ea6p-3, 0x1.95cb2891e43d6p-3, 0x1.9e8e7b0f869ep-3, + 0x1.a73beaa5db18dp-3, 0x1.afd3e394558d3p-3, 0x1.b856cf060d9f1p-3, + 0x1.c0c5134de1ffcp-3, 0x1.c91f1371bc99fp-3, 0x1.d1652ffcd3f53p-3, + 0x1.d997c6f635e75p-3, 0x1.e1b733ab90f3bp-3, 0x1.e9c3ceadac856p-3, + 0x1.f1bdeec43a305p-3, 0x1.f9a5e7a5fa3fep-3, 0x1.00be05ac02f2bp-2, + 0x1.04a054d81a2d4p-2, 0x1.087a0835957fbp-2, 0x1.0c4b457099517p-2, + 0x1.101431aa1fe51p-2, 0x1.13d4f08b98dd8p-2, 0x1.178da53edb892p-2, + 0x1.1b3e71e9f9d58p-2, 0x1.1ee777defdeedp-2, 0x1.2288d7b48e23bp-2, + 0x1.2622b0f52e49fp-2, 0x1.29b522a4c6314p-2, 0x1.2d404b0e30f8p-2, + 0x1.30c4478f3fbe5p-2, 0x1.34413509f7915p-2 + }; + static const union + { + float f; + uint32_t u; + } st[] = + { + { 0x1p+0 }, { 0x1.4p+3 }, { 0x1.9p+6 }, { 0x1.f4p+9 }, + { 0x1.388p+13 }, { 0x1.86ap+16 }, { 0x1.e848p+19 }, { 0x1.312dp+23 }, + { 0x1.7d784p+26 }, { 0x1.dcd65p+29 }, { 0x1.2a05f2p+33 }, { 0 }, + { 0 }, { 0 }, { 0 }, { 0 } + }; + static const double b[] = + { + 0x1.bcb7b15c5a2f8p-2, -0x1.bcbb1dbb88ebap-3, 0x1.2871c39d521c6p-3 + }; + static const double c[] = + { + 0x1.bcb7b1526e50ep-2, -0x1.bcb7b1526e53dp-3, 0x1.287a7636f3fa2p-3, + -0x1.bcb7b146a14b3p-4, 0x1.63c627d5219cbp-4, -0x1.2880736c8762dp-4, + 0x1.fc1ecf913961ap-5 + }; + uint32_t ux = asuint (x); + if (__glibc_unlikely (ux < (1 << 23) || ux >= 0x7f800000u)) + { + if (ux == 0 || ux >= 0x7f800000u) + return as_special (x); + /* subnormal */ + int n = __builtin_clz (ux) - 8; + ux <<= n; + ux -= n << 23; + } + unsigned m = ux & ((1 << 23) - 1), j = (m + (1 << (23 - 7))) >> (23 - 6); + double ix = tr[j], l = tl[j]; + int e = ((int) ux >> 23) - 127; + unsigned je = e + 1; + je = (je * 0x4d104d4) >> 28; + if (__glibc_unlikely (ux == st[je].u)) + return je; + + double tz = asdouble (((int64_t) m | ((int64_t) 1023 << 23)) << (52 - 23)); + double z = tz * ix - 1, z2 = z * z; + double r + = ((e * 0x1.34413509f79ffp-2 + l) + z * b[0]) + z2 * (b[1] + z * b[2]); + float ub = r, lb = r + 0x1.b008p-34; + if (__glibc_unlikely (ub != lb)) + { + double f = z + * ((c[0] + z * c[1]) + + z2 + * ((c[2] + z * c[3]) + + z2 * (c[4] + z * c[5] + z2 * c[6]))); + f -= 0x1.0cee0ed4ca7e9p-54 * e; + f += l - tl[0]; + double el = e * 0x1.34413509f7ap-2; + r = el + f; + ub = r; + tz = r; + if (__glibc_unlikely (!((asuint64 (tz) & ((1 << 28) - 1))))) + { + double dr = (el - r) + f; + r += dr * 32; + ub = r; } - if (__builtin_expect(hx >= 0x7f800000, 0)) return x+x; - k += (hx>>23)-127; - i = ((uint32_t)k&0x80000000)>>31; - hx = (hx&0x007fffff)|((0x7f-i)<<23); - y = (float)(k+i); - if (FIX_INT_FP_CONVERT_ZERO && y == 0.0f) - y = 0.0f; - SET_FLOAT_WORD(x,hx); - z = y*log10_2lo + ivln10*__ieee754_logf(x); - return z+y*log10_2hi; + } + return ub; } libm_alias_finite (__ieee754_log10f, __log10f) diff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h index 729f22cd4f..dc07ebd459 100644 --- a/sysdeps/ieee754/flt-32/math_config.h +++ b/sysdeps/ieee754/flt-32/math_config.h @@ -166,9 +166,9 @@ extern const struct exp2f_data uint64_t tab[1 << EXP2F_TABLE_BITS]; double shift_scaled; double poly[EXP2F_POLY_ORDER]; - double shift; double invln2_scaled; double poly_scaled[EXP2F_POLY_ORDER]; + double shift; } __exp2f_data attribute_hidden; #define LOGF_TABLE_BITS 4 diff --git a/sysdeps/ieee754/flt-32/s_exp10m1f.c b/sysdeps/ieee754/flt-32/s_exp10m1f.c new file mode 100644 index 0000000000..ea3173a174 --- /dev/null +++ b/sysdeps/ieee754/flt-32/s_exp10m1f.c @@ -0,0 +1,227 @@ +/* Implementation of the exp10m1 function for binary32. + +Copyright (c) 2022-2024 Alexei Sibidanov. Paul Zimmermann. + +The original version of this file was copied from the CORE-MATH +project (file src/binary32/exp10m1/exp10m1f.c, revision c46b85b). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +#include <math.h> +#include "math_config.h" +#include <libm-alias-float.h> + +float +__exp10m1f (float x) +{ + const double iln10h = 0x1.a934f09p+1 * 16; + const double iln10l = 0x1.e68dc57f2496p-29 * 16; + double z = x; + uint32_t ux = asuint (x); + uint32_t ax = ux & (~0u >> 1); + if (__glibc_unlikely (ux > 0xc0f0d2f1u)) + { /* x < -7.52575 */ + if (ax > (0xffu << 23)) + return x + x; /* nan */ + return (ux == 0xff800000) ? -0x1p+0f : -0x1p+0f + 0x1p-26f; + } + else if (__glibc_unlikely (ax > 0x421a209au)) + { /* x > 38.5318 */ + if (ax >= asuint (INFINITY)) + return x + x; /* +Inf or NaN */ + return __math_oflowf (0); + } + else if (__glibc_unlikely (ax < 0x3d89c604u)) + { /* |x| < 0.1549/log(10) */ + double z2 = z * z, r; + if (__glibc_unlikely (ax < 0x3d1622fbu)) + { /* |x| < 8.44e-2/log(10) */ + if (__glibc_unlikely (ax < 0x3c8b76a3u)) + { /* |x| < 3.92e-2/log(10) */ + if (__glibc_unlikely (ax < 0x3bcced04u)) + { /* |x| < 1.44e-2/log(10) */ + if (__glibc_unlikely (ax < 0x3acf33ebu)) + { /* |x| < 3.64e-3/log(10 */ + if (__glibc_unlikely (ax < 0x395a966bu)) + { /* |x| < 4.8e-4/log(10 */ + if (__glibc_unlikely (ax < 0x36fe4a4bu)) + { /* |x| < 1.745e-5/log(10) */ + if (__glibc_unlikely (ax < 0x32407f39u)) + { /* |x| < 2.58e-8/log(10) */ + if (__glibc_unlikely (ax < 0x245e5bd9u)) + { /* |x| < 4.82164e-17 */ + r = 0x1.26bb1bbb55516p+1; + } + else + { + if (__glibc_unlikely (ux == 0x2c994b7bu)) + return 0x1.60f974p-37f - 0x1p-90f; + r = 0x1.26bb1bbb55516p+1 + + z * 0x1.53524c73cea69p+1; + } + } + else + { + if (__glibc_unlikely (ux == 0xb6fa215bu)) + return -0x1.1ff87ep-16 + 0x1p-68; + r = 0x1.26bb1bbb55516p+1 + + z * (0x1.53524c73ea62fp+1 + + z * 0x1.0470591de2c75p+1); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55515p+1, 0x1.53524c73cea69p+1, + 0x1.0470595038cc2p+1, 0x1.2bd7609fe1561p+0 + }; + r = (cp[0] + z * cp[1]) + + z2 * (cp[2] + z * cp[3]); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55516p+1, 0x1.53524c73ce6dbp+1, + 0x1.0470591de3024p+1, 0x1.2bd76b79060e6p+0, + 0x1.1429ffd3a963dp-1 + }; + r = (cp[0] + z * cp[1]) + + z2 * (cp[2] + z * (cp[3] + z * cp[4])); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55516p+1, 0x1.53524c73cea67p+1, + 0x1.0470591dc2953p+1, 0x1.2bd760a004d64p+0, + 0x1.142a85da6f072p-1, 0x1.a7ed70725b00ep-3 + }; + r = (cp[0] + z * cp[1]) + z2 + * ((cp[2] + z * cp[3]) + + z2 * (cp[4] + z * cp[5])); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55516p+1, 0x1.53524c73ceadep+1, + 0x1.0470591de2bb4p+1, 0x1.2bd76099a9d33p+0, + 0x1.1429ffd829b0bp-1, 0x1.a7f2a6a0f7dc8p-3, + 0x1.16e4dfbce0f56p-4 + }; + r = (cp[0] + z * cp[1]) + + z2 * ((cp[2] + z * cp[3]) + + z2 * (cp[4] + z * (cp[5] + z * cp[6]))); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55515p+1, 0x1.53524c73cea6ap+1, + 0x1.0470591de476p+1, 0x1.2bd7609fd4ee2p+0, + 0x1.1429ff70a9b48p-1, 0x1.a7ed71259ba5bp-3, + 0x1.16f3004fb3ac1p-4, 0x1.4116b0388aa9fp-6 + }; + r = ((cp[0] + z * cp[1]) + z2 * (cp[2] + z * cp[3])) + + (z2 * z2) * ((cp[4] + z * cp[5]) + z2 * (cp[6] + + z * cp[7])); + } + } + else + { + static const double cp[] = + { + 0x1.26bb1bbb55515p+1, 0x1.53524c73cea42p+1, 0x1.0470591de2d1dp+1, + 0x1.2bd760a010a53p+0, 0x1.1429ffd16170cp-1, 0x1.a7ed6b2a0d97fp-3, + 0x1.16e4e37fa51e4p-4, 0x1.4147fe4c1676fp-6, 0x1.4897c4b3e329ap-8 + }; + r = ((cp[0] + z * cp[1]) + z2 * (cp[2] + z * cp[3])) + + (z2 * z2) * ((cp[4] + z * cp[5]) + + z2 * (cp[6] + z * (cp[7] + z * cp[8]))); + } + r *= z; + return r; + } + else + { + /* -7.52575 < x < -0.1549/log(10) or 0.1549/log(10) < x < 38.5318 */ + static const double tb[] = + { + 0x1p+0, 0x1.0b5586cf9890fp+0, 0x1.172b83c7d517bp+0, + 0x1.2387a6e756238p+0, 0x1.306fe0a31b715p+0, 0x1.3dea64c123422p+0, + 0x1.4bfdad5362a27p+0, 0x1.5ab07dd485429p+0, 0x1.6a09e667f3bcdp+0, + 0x1.7a11473eb0187p+0, 0x1.8ace5422aa0dap+0, 0x1.9c49182a3f09p+0, + 0x1.ae89f995ad3adp+0, 0x1.c199bdd85529cp+0, 0x1.d5818dcfba487p+0, + 0x1.ea4afa2a490dap+0 + }; + static const double c[] = + { + 0x1.62e42fefa398bp-5, 0x1.ebfbdff84555ap-11, 0x1.c6b08d4ad86d3p-17, + 0x1.3b2ad1b1716a2p-23, 0x1.5d7472718ce9dp-30, 0x1.4a1d7f457ac56p-37 + }; + + if (__glibc_unlikely ((ux << 11) == 0)) + { + uint32_t k = (ux >> 21) - 0x1fc; + if (k <= 0xb) + { + if (k == 0) + return 10.0f - 1.0f; + if (k == 4) + return 100.0f - 1.0f; + if (k == 6) + return 1000.0f - 1.0f; + if (k == 8) + return 10000.0f - 1.0f; + if (k == 9) + return 100000.0f - 1.0f; + if (k == 10) + return 1000000.0f - 1.0f; + if (k == 11) + return 10000000.0f - 1.0f; + } + } + double a = iln10h * z; + double ia = floor (a); + double h = (a - ia) + iln10l * z; + int64_t i = ia; + int64_t j = i & 0xf; + int64_t e = i - j; + e >>= 4; + double s = tb[j]; + s *= asdouble ((e + 0x3ffull) << 52); + double h2 = h * h; + double c0 = c[0] + h * c[1]; + double c2 = c[2] + h * c[3]; + double c4 = c[4] + h * c[5]; + c0 += h2 * (c2 + h2 * c4); + double w = s * h; + return (s - 1.0) + w * c0; + } +} +#ifndef __exp10m1f +libm_alias_float (__exp10m1, exp10m1) +#endif diff --git a/sysdeps/ieee754/flt-32/s_exp2m1f.c b/sysdeps/ieee754/flt-32/s_exp2m1f.c new file mode 100644 index 0000000000..325ffb11b0 --- /dev/null +++ b/sysdeps/ieee754/flt-32/s_exp2m1f.c @@ -0,0 +1,194 @@ +/* Correctly-rounded base-2 exponent function biased by 1 for binary32 value. + +Copyright (c) 2022-2024 Alexei Sibidanov. + +The original version of this file was copied from the CORE-MATH +project (file src/binary32/exp2m1/exp2m1f.c, revision baf5f6b). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include <fenv.h> +#include <math.h> +#include "math_config.h" +#include <libm-alias-float.h> +#include <math-narrow-eval.h> +#include <float.h> + +float +__exp2m1f (float x) +{ + double z = x; + uint32_t ux = asuint (x); + uint32_t ax = ux & (~0u >> 1); + if (__glibc_unlikely (ux >= 0xc1c80000u)) + { /* x <= -25 */ + if (ax > (0xffu << 23)) + return x + x; /* nan */ + return (ux == 0xff800000) ? -0x1p+0f : -0x1p+0f + 0x1p-26f; + } + else if (__glibc_unlikely (ax >= 0x43000000u)) + { /* x >= 128 */ + if (ax >= asuint (INFINITY)) + return x + x; /* +Inf or NaN */ + /* exp2m1 (MAX_EXP) should not overflow when rounding towards zero + or towards -Inf. We round FLT_MAX + 2^103 which is in the middle + between FLT_MAX and 2^128 (the next number with unbounded range). */ + float ret = math_narrow_eval (FLT_MAX + 0x1p103f); + if (x == FLT_MAX_EXP && ret == FLT_MAX) + return ret; + return __math_oflowf (0); + } + else if (__glibc_unlikely (ax < 0x3df95f1fu)) + { /* |x| < 8.44e-2/log(2) */ + double z2 = z * z, r; + if (__glibc_unlikely (ax < 0x3d67a4ccu)) + { /* |x| < 3.92e-2/log(2) */ + if (__glibc_unlikely (ax < 0x3caa2feeu)) + { /* |x| < 1.44e-2/log(2) */ + if (__glibc_unlikely (ax < 0x3bac1405u)) + { /* |x| < 3.64e-3/log(2) */ + if (__glibc_unlikely (ax < 0x3a358876u)) + { /* |x| < 4.8e-4/log(2) */ + if (__glibc_unlikely (ax < 0x37d32ef6u)) + { /* |x| < 1.745e-5/log(2) */ + if (__glibc_unlikely (ax < 0x331fdd82u)) + { /* |x| < 2.58e-8/log(2) */ + if (__glibc_unlikely (ax < 0x2538aa3bu)) + /* |x| < 1.60171e-16 */ + r = 0x1.62e42fefa39efp-1; + else + r = 0x1.62e42fefa39fp-1 + + z * 0x1.ebfbdff82c58fp-3; + } + else + { + if (__glibc_unlikely (ux == 0xb3d85005u)) + return -0x1.2bdf76p-24 - 0x1.8p-77; + if (__glibc_unlikely (ux == 0x3338428du)) + return 0x1.fee08ap-26 + 0x1p-80; + static const double c[] = + { + 0x1.62e42fefa39efp-1, 0x1.ebfbdff8548fdp-3, + 0x1.c6b08d704a06dp-5 + }; + r = c[0] + z * (c[1] + z * c[2]); + } + } + else + { + if (__glibc_unlikely (ux == 0x388bca4fu)) + return 0x1.839702p-15 - 0x1.8p-68; + static const double c[] = + { + 0x1.62e42fefa39efp-1, 0x1.ebfbdff82c58fp-3, + 0x1.c6b08dc82b347p-5, 0x1.3b2ab6fbad172p-7 + }; + r = (c[0] + z * c[1]) + z2 * (c[2] + z * c[3]); + } + } + else + { + static const double c[] = + { + 0x1.62e42fefa39efp-1, 0x1.ebfbdff82c068p-3, + 0x1.c6b08d704a6dcp-5, 0x1.3b2ac262c3eedp-7, + 0x1.5d87fe7af779ap-10 + }; + r = (c[0] + z * c[1]) + + z2 * (c[2] + z * (c[3] + z * c[4])); + } + } + else + { + static const double c[] = + { + 0x1.62e42fefa39fp-1, 0x1.ebfbdff82c58dp-3, + 0x1.c6b08d7011d13p-5, 0x1.3b2ab6fbd267dp-7, + 0x1.5d88a81cea49ep-10, 0x1.430912ea9b963p-13 + }; + r = (c[0] + z * c[1]) + + z2 * ((c[2] + z * c[3]) + z2 * (c[4] + z * c[5])); + } + } + else + { + static const double c[] = + { + 0x1.62e42fefa39efp-1, 0x1.ebfbdff82c639p-3, + 0x1.c6b08d7049f1cp-5, 0x1.3b2ab6f5243bdp-7, + 0x1.5d87fe80a9e6cp-10, 0x1.430d0b9257fa8p-13, + 0x1.ffcbfc4cf0952p-17 + }; + r = (c[0] + z * c[1]) + + z2 * ((c[2] + z * c[3]) + + z2 * (c[4] + z * (c[5] + z * c[6]))); + } + } + else + { + static const double c[] = + { + 0x1.62e42fefa39efp-1, 0x1.ebfbdff82c591p-3, + 0x1.c6b08d704cf6bp-5, 0x1.3b2ab6fba00cep-7, + 0x1.5d87fdfdaadb4p-10, 0x1.4309137333066p-13, + 0x1.ffe5e90daf7ddp-17, 0x1.62c0220eed731p-20 + }; + r = ((c[0] + z * c[1]) + z2 * (c[2] + z * c[3])) + + (z2 * z2) * ((c[4] + z * c[5]) + z2 * (c[6] + z * c[7])); + } + r *= z; + return r; + } + else + { + static const double c[] = + { + 0x1.62e42fefa398bp-5, 0x1.ebfbdff84555ap-11, + 0x1.c6b08d4ad86d3p-17, 0x1.3b2ad1b1716a2p-23, + 0x1.5d7472718ce9dp-30, 0x1.4a1d7f457ac56p-37 + }; + static const double tb[] = + { + 0x1p+0, 0x1.0b5586cf9890fp+0, 0x1.172b83c7d517bp+0, + 0x1.2387a6e756238p+0, 0x1.306fe0a31b715p+0, 0x1.3dea64c123422p+0, + 0x1.4bfdad5362a27p+0, 0x1.5ab07dd485429p+0, 0x1.6a09e667f3bcdp+0, + 0x1.7a11473eb0187p+0, 0x1.8ace5422aa0dap+0, 0x1.9c49182a3f09p+0, + 0x1.ae89f995ad3adp+0, 0x1.c199bdd85529cp+0, 0x1.d5818dcfba487p+0, + 0x1.ea4afa2a490dap+0 + }; + double a = 16.0 * z; + double ia = floor (a); + double h = a - ia; + double h2 = h * h; + int64_t i = ia, j = i & 0xf, e = i - j; + e >>= 4; + double s = tb[j]; + s *= asdouble ((e + 0x3ffull) << 52); + double c0 = c[0] + h * c[1]; + double c2 = c[2] + h * c[3]; + double c4 = c[4] + h * c[5]; + c0 += h2 * (c2 + h2 * c4); + double w = s * h; + return (s - 1.0) + w * c0; + } +} +#ifndef __exp2m1f +libm_alias_float (__exp2m1, exp2m1) +#endif diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c index 35f7b5214a..edd7c9acf8 100644 --- a/sysdeps/ieee754/flt-32/s_expm1f.c +++ b/sysdeps/ieee754/flt-32/s_expm1f.c @@ -1,132 +1,124 @@ -/* s_expm1f.c -- float version of s_expm1.c. - */ +/* Correctly-rounded natural exponent function biased by 1 for binary32 value. -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ +Copyright (c) 2022-2024 Alexei Sibidanov. + +This file is part of the CORE-MATH project +project (file src/binary32/expm1/expm1f.c, revision bc385c2). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ -#include <errno.h> -#include <float.h> #include <math.h> -#include <math-barriers.h> -#include <math_private.h> #include <math-underflow.h> #include <libm-alias-float.h> - -static const float huge = 1.0e+30; -static const float tiny = 1.0e-30; - -static const float -one = 1.0, -o_threshold = 8.8721679688e+01,/* 0x42b17180 */ -ln2_hi = 6.9313812256e-01,/* 0x3f317180 */ -ln2_lo = 9.0580006145e-06,/* 0x3717f7d1 */ -invln2 = 1.4426950216e+00,/* 0x3fb8aa3b */ - /* scaled coefficients related to expm1 */ -Q1 = -3.3333335072e-02, /* 0xbd088889 */ -Q2 = 1.5873016091e-03, /* 0x3ad00d01 */ -Q3 = -7.9365076090e-05, /* 0xb8a670cd */ -Q4 = 4.0082177293e-06, /* 0x36867e54 */ -Q5 = -2.0109921195e-07; /* 0xb457edbb */ +#include "math_config.h" float -__expm1f(float x) +__expm1f (float x) { - float y,hi,lo,c,t,e,hxs,hfx,r1; - int32_t k,xsb; - uint32_t hx; - - GET_FLOAT_WORD(hx,x); - xsb = hx&0x80000000; /* sign bit of x */ - if(xsb==0) y=x; else y= -x; /* y = |x| */ - hx &= 0x7fffffff; /* high word of |x| */ - - /* filter out huge and non-finite argument */ - if(hx >= 0x4195b844) { /* if |x|>=27*ln2 */ - if(hx >= 0x42b17218) { /* if |x|>=88.721... */ - if(hx>0x7f800000) - return x+x; /* NaN */ - if(hx==0x7f800000) - return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */ - if(x > o_threshold) { - __set_errno (ERANGE); - return huge*huge; /* overflow */ - } - } - if(xsb!=0) { /* x < -27*ln2, return -1.0 with inexact */ - math_force_eval(x+tiny);/* raise inexact */ - return tiny-one; /* return -1 */ - } - } - - /* argument reduction */ - if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ - if(hx < 0x3F851592) { /* and |x| < 1.5 ln2 */ - if(xsb==0) - {hi = x - ln2_hi; lo = ln2_lo; k = 1;} - else - {hi = x + ln2_hi; lo = -ln2_lo; k = -1;} - } else { - k = invln2*x+((xsb==0)?(float)0.5:(float)-0.5); - t = k; - hi = x - t*ln2_hi; /* t*ln2_hi is exact here */ - lo = t*ln2_lo; - } - x = hi - lo; - c = (hi-x)-lo; - } - else if(hx < 0x33000000) { /* when |x|<2**-25, return x */ - math_check_force_underflow (x); - t = huge+x; /* return x with inexact flags when x!=0 */ - return x - (t-(huge+x)); + static const double c[] = + { + 1, 0x1.62e42fef4c4e7p-6, 0x1.ebfd1b232f475p-13, 0x1.c6b19384ecd93p-20 + }; + static const double ch[] = + { + 0x1.62e42fefa39efp-6, 0x1.ebfbdff82c58fp-13, 0x1.c6b08d702e0edp-20, + 0x1.3b2ab6fb92e5ep-27, 0x1.5d886e6d54203p-35, 0x1.430976b8ce6efp-43 + }; + static const double td[] = + { + 0x1p+0, 0x1.059b0d3158574p+0, 0x1.0b5586cf9890fp+0, + 0x1.11301d0125b51p+0, 0x1.172b83c7d517bp+0, 0x1.1d4873168b9aap+0, + 0x1.2387a6e756238p+0, 0x1.29e9df51fdee1p+0, 0x1.306fe0a31b715p+0, + 0x1.371a7373aa9cbp+0, 0x1.3dea64c123422p+0, 0x1.44e086061892dp+0, + 0x1.4bfdad5362a27p+0, 0x1.5342b569d4f82p+0, 0x1.5ab07dd485429p+0, + 0x1.6247eb03a5585p+0, 0x1.6a09e667f3bcdp+0, 0x1.71f75e8ec5f74p+0, + 0x1.7a11473eb0187p+0, 0x1.82589994cce13p+0, 0x1.8ace5422aa0dbp+0, + 0x1.93737b0cdc5e5p+0, 0x1.9c49182a3f09p+0, 0x1.a5503b23e255dp+0, + 0x1.ae89f995ad3adp+0, 0x1.b7f76f2fb5e47p+0, 0x1.c199bdd85529cp+0, + 0x1.cb720dcef9069p+0, 0x1.d5818dcfba487p+0, 0x1.dfc97337b9b5fp+0, + 0x1.ea4afa2a490dap+0, 0x1.f50765b6e454p+0 + }; + const double iln2 = 0x1.71547652b82fep+5; + const double big = 0x1.8p52; + double z = x; + uint32_t ux = asuint (x); + uint32_t ax = ux << 1; + if (__glibc_likely (ax < 0x7c400000u)) + { /* |x| < 0.15625 */ + if (__glibc_unlikely (ax < 0x676a09e8u)) + { /* |x| < 0x1.6a09e8p-24 */ + if (__glibc_unlikely (ax == 0x0u)) + return x; /* x = +-0 */ + return fmaf (fabsf (x), 0x1p-25f, x); } - else k = 0; - - /* x is now in primary range */ - hfx = (float)0.5*x; - hxs = x*hfx; - r1 = one+hxs*(Q1+hxs*(Q2+hxs*(Q3+hxs*(Q4+hxs*Q5)))); - t = (float)3.0-r1*hfx; - e = hxs*((r1-t)/((float)6.0 - x*t)); - if(k==0) return x - (x*e-hxs); /* c is 0 */ - else { - e = (x*(e-c)-c); - e -= hxs; - if(k== -1) return (float)0.5*(x-e)-(float)0.5; - if(k==1) { - if(x < (float)-0.25) return -(float)2.0*(e-(x+(float)0.5)); - else return one+(float)2.0*(x-e); - } - if (k <= -2 || k>56) { /* suffice to return exp(x)-1 */ - int32_t i; - y = one-(e-x); - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - return y-one; - } - t = one; - if(k<23) { - int32_t i; - SET_FLOAT_WORD(t,0x3f800000 - (0x1000000>>k)); /* t=1-2^-k */ - y = t-(e-x); - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - } else { - int32_t i; - SET_FLOAT_WORD(t,((0x7f-k)<<23)); /* 2^-k */ - y = x-(e+t); - y += one; - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - } + static const double b[] = + { + 0x1.fffffffffffc2p-2, 0x1.55555555555fep-3, 0x1.555555559767fp-5, + 0x1.1111111098dc1p-7, 0x1.6c16bca988aa9p-10, 0x1.a01a07658483fp-13, + 0x1.a05b04d2c3503p-16, 0x1.71de3a960b5e3p-19 + }; + double z2 = z * z, z4 = z2 * z2; + double r = z + z2 + * ((b[0] + z * b[1]) + z2 * (b[2] + z * b[3]) + + z4 * ((b[4] + z * b[5]) + z2 * (b[6] + z * b[7]))); + return r; + } + if (__glibc_unlikely (ax >= 0x8562e430u)) + { /* |x| > 88.72 */ + if (ax > (0xffu << 24)) + return x + x; /* nan */ + if (__glibc_unlikely (ux >> 31)) + { /* x < 0 */ + if (ax == (0xffu << 24)) + return -1.0f; + return -1.0f + 0x1p-26f; } - return y; + if (ax == (0xffu << 24)) + return INFINITY; + return __math_oflowf (0); + } + double a = iln2 * z; + double ia = roundeven (a); + double h = a - ia; + double h2 = h * h; + uint64_t u = asuint64 (ia + big); + double c2 = c[2] + h * c[3], c0 = c[0] + h * c[1]; + const uint64_t *tdl = (uint64_t *) ((void *) td); + double sv = asdouble (tdl[u & 0x1f] + ((u >> 5) << 52)); + double r = (c0 + h2 * c2) * sv - 1.0; + float ub = r, lb = r - sv * 0x1.3b3p-33; + if (__glibc_unlikely (ub != lb)) + { + if (__glibc_unlikely (ux > 0xc18aa123u)) /* x < -17.32 */ + return -1.0f + 0x1p-26f; + const double iln2h = 0x1.7154765p+5; + const double iln2l = 0x1.5c17f0bbbe88p-26; + double s = sv; + h = (iln2h * z - ia) + iln2l * z; + h2 = h * h; + double w = s * h; + r = (s - 1) + w + * ((ch[0] + h * ch[1]) + + h2 * ((ch[2] + h * ch[3]) + h2 * (ch[4] + h * ch[5]))); + ub = r; + } + return ub; } libm_alias_float (__expm1, expm1) diff --git a/sysdeps/ieee754/flt-32/s_log10p1f.c b/sysdeps/ieee754/flt-32/s_log10p1f.c new file mode 100644 index 0000000000..64deb1eeda --- /dev/null +++ b/sysdeps/ieee754/flt-32/s_log10p1f.c @@ -0,0 +1,182 @@ +/* Correctly-rounded biased argument base-10 logarithm function for binary32 value. + +Copyright (c) 2022-2023 Alexei Sibidanov. + +This file is part of the CORE-MATH project +project (file src/binary32/log10p1/log10p1f.c revision bc385c2). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include <stdint.h> +#include <errno.h> +#include <fenv.h> +#include <libm-alias-float.h> +#include "math_config.h" + +static __attribute__ ((noinline)) float +as_special (float x) +{ + uint32_t ux = asuint (x); + if (ux == 0x7f800000u) + return x; /* +inf */ + uint32_t ax = ux << 1; + if (ax == 0x17fu << 24) + /* x+1 = 0.0 */ + return __math_divzerof (1); + if (ax > 0xff000000u) + return x + x; /* nan */ + return __math_invalidf (x); +} + +float +__log10p1f (float x) +{ + static const double tr[] = + { + 0x1p+0, 0x1.f81f82p-1, 0x1.f07c1fp-1, 0x1.e9131acp-1, + 0x1.e1e1e1ep-1, 0x1.dae6077p-1, 0x1.d41d41dp-1, 0x1.cd85689p-1, + 0x1.c71c71cp-1, 0x1.c0e0704p-1, 0x1.bacf915p-1, 0x1.b4e81b5p-1, + 0x1.af286bdp-1, 0x1.a98ef6p-1, 0x1.a41a41ap-1, 0x1.9ec8e95p-1, + 0x1.999999ap-1, 0x1.948b0fdp-1, 0x1.8f9c19p-1, 0x1.8acb90fp-1, + 0x1.8618618p-1, 0x1.8181818p-1, 0x1.7d05f41p-1, 0x1.78a4c81p-1, + 0x1.745d174p-1, 0x1.702e05cp-1, 0x1.6c16c17p-1, 0x1.6816817p-1, + 0x1.642c859p-1, 0x1.605816p-1, 0x1.5c9882cp-1, 0x1.58ed231p-1, + 0x1.5555555p-1, 0x1.51d07ebp-1, 0x1.4e5e0a7p-1, 0x1.4afd6ap-1, + 0x1.47ae148p-1, 0x1.446f865p-1, 0x1.4141414p-1, 0x1.3e22cbdp-1, + 0x1.3b13b14p-1, 0x1.3813814p-1, 0x1.3521cfbp-1, 0x1.323e34ap-1, + 0x1.2f684bep-1, 0x1.2c9fb4ep-1, 0x1.29e412ap-1, 0x1.27350b9p-1, + 0x1.2492492p-1, 0x1.21fb781p-1, 0x1.1f7047ep-1, 0x1.1cf06aep-1, + 0x1.1a7b961p-1, 0x1.1811812p-1, 0x1.15b1e5fp-1, 0x1.135c811p-1, + 0x1.1111111p-1, 0x1.0ecf56cp-1, 0x1.0c9715p-1, 0x1.0a6810ap-1, + 0x1.0842108p-1, 0x1.0624dd3p-1, 0x1.041041p-1, 0x1.0204081p-1, + 0.5 + }; + static const double tl[] = + { + 0x1.562ec497ef351p-43, 0x1.b9476892ea99cp-8, 0x1.b5e909c959eecp-7, + 0x1.45f4f59ec84fp-6, 0x1.af5f92cbcf2aap-6, 0x1.0ba01a6069052p-5, + 0x1.3ed119b99dd41p-5, 0x1.714834298a088p-5, 0x1.a30a9d98309c1p-5, + 0x1.d41d51266b9d9p-5, 0x1.02428c0f62dfcp-4, 0x1.1a23444eea521p-4, + 0x1.31b30543f2597p-4, 0x1.48f3ed39bd5e7p-4, 0x1.5fe8049a0bd06p-4, + 0x1.769140a6a78eap-4, 0x1.8cf1836c96595p-4, 0x1.a30a9d5551a84p-4, + 0x1.b8de4d1ee5b21p-4, 0x1.ce6e4202c7bc9p-4, 0x1.e3bc1accaa6eap-4, + 0x1.f8c9683b584b7p-4, 0x1.06cbd68ca86ep-3, 0x1.11142f19de3a2p-3, + 0x1.1b3e71fa795fp-3, 0x1.254b4d37a3354p-3, 0x1.2f3b6912cab79p-3, + 0x1.390f6831144f7p-3, 0x1.42c7e7fffb21ap-3, 0x1.4c65808c779aep-3, + 0x1.55e8c507508c7p-3, 0x1.5f52445deb049p-3, 0x1.68a288c3efe72p-3, + 0x1.71da17bdef98bp-3, 0x1.7af9736089c4bp-3, 0x1.84011952a11ebp-3, + 0x1.8cf1837a7d6d1p-3, 0x1.95cb2891e3048p-3, 0x1.9e8e7b0f85651p-3, + 0x1.a73beaa5d9dfep-3, 0x1.afd3e39454544p-3, 0x1.b856cf060c662p-3, + 0x1.c0c5134de0c6dp-3, 0x1.c91f1371bb611p-3, 0x1.d1652ffcd2bc5p-3, + 0x1.d997c6f634ae6p-3, 0x1.e1b733ab8fbadp-3, 0x1.e9c3ceadab4c8p-3, + 0x1.f1bdeec438f77p-3, 0x1.f9a5e7a5f906fp-3, 0x1.00be05ac02564p-2, + 0x1.04a054d81990cp-2, 0x1.087a083594e33p-2, 0x1.0c4b457098b4fp-2, + 0x1.101431aa1f48ap-2, 0x1.13d4f08b98411p-2, 0x1.178da53edaecbp-2, + 0x1.1b3e71e9f9391p-2, 0x1.1ee777defd526p-2, 0x1.2288d7b48d874p-2, + 0x1.2622b0f52dad8p-2, 0x1.29b522a4c594cp-2, 0x1.2d404b0e305b9p-2, + 0x1.30c4478f3f21dp-2, 0x1.34413509f6f4dp-2 + }; + static const union + { + float f; + uint32_t u; + } st[] = + { + { 0x0p+0 }, { 0x1.2p+3 }, { 0x1.8cp+6 }, + { 0x1.f38p+9 }, { 0x1.3878p+13 }, { 0x1.869fp+16 }, + { 0x1.e847ep+19 }, { 0x1.312cfep+23 } + }; + double z = x; + uint32_t ux = asuint (x); + if (__glibc_unlikely (ux >= 0x17fu << 23)) /* x <= -1 */ + return as_special (x); + uint32_t ax = ux & (~0u >> 1); + if (__glibc_unlikely (ax == 0)) + return copysign (0, x); + if (__glibc_unlikely (ax >= (0xff << 23))) /* +inf, nan */ + return as_special (x); + int ie = ux; + ie >>= 23; + unsigned int je = ie - 126; + je = (je * 0x9a209a8) >> 29; + if (__glibc_unlikely (ux == st[je].u)) + return je; + + uint64_t tz = asuint64 (z + 1.0); + uint64_t m = tz & (~(uint64_t) 0 >> 12); + int32_t e = (tz >> 52) - 1023, j = ((m + ((int64_t) 1 << 45)) >> 46); + tz = m | ((uint64_t) 0x3ff << 52); + double ix = tr[j], l = tl[j]; + double off = e * 0x1.34413509f79ffp-2 + l; + double v = asdouble (tz) * ix - 1; + + static const double h[] = + { + 0x1.bcb7b150bf6d8p-2, -0x1.bcb7b1738c07ep-3, + 0x1.287de19e795c5p-3, -0x1.bca44edc44bc4p-4 + }; + double v2 = v * v; + double f = (h[0] + v * h[1]) + v2 * (h[2] + v * h[3]); + double r = off + v * f; + float ub = r; + float lb = r + 0x1.5cp-42; + if (__glibc_unlikely (ub != lb)) + { + if (__glibc_unlikely (ax < 0x3d32743eu)) + { /* 0x1.64e87cp-5f */ + if (__glibc_unlikely (ux == 0xa6aba8afu)) + return -0x1.2a33bcp-51f + 0x1p-76f; + if (__glibc_unlikely (ux == 0xaf39b9a7u)) + return -0x1.42a342p-34f + 0x1p-59f; + if (__glibc_unlikely (ux == 0x399a7c00u)) + return 0x1.0c53cap-13f + 0x1p-38f; + z /= 2.0 + z; + double z2 = z * z, z4 = z2 * z2; + static const double c[] = + { + 0x1.bcb7b1526e50fp-1, 0x1.287a76370129dp-2, + 0x1.63c62378fa3dbp-3, 0x1.fca4139a42374p-4 + }; + float ret = z * ((c[0] + z2 * c[1]) + z4 * (c[2] + z2 * c[3])); + if (x != 0.0f && ret == 0.0) + __set_errno (ERANGE); + return ret; + } + if (__glibc_unlikely (ux == 0x7956ba5eu)) + return 0x1.16bebap+5f + 0x1p-20f; + if (__glibc_unlikely (ux == 0xbd86ffb9u)) + return -0x1.e53536p-6f + 0x1p-31f; + static const double c[] = + { + 0x1.bcb7b1526e50ep-2, -0x1.bcb7b1526e53dp-3, 0x1.287a7636f3fa2p-3, + -0x1.bcb7b146a14b3p-4, 0x1.63c627d5219cbp-4, -0x1.2880736c8762dp-4, + 0x1.fc1ecf913961ap-5 + }; + f = v + * ((c[0] + v * c[1]) + + v2 * ((c[2] + v * c[3]) + v2 * (c[4] + v * c[5] + v2 * c[6]))); + f += l - tl[0]; + double el = e * 0x1.34413509f79ffp-2; + r = el + f; + ub = r; + } + return ub; +} +libm_alias_float (__log10p1, log10p1) diff --git a/sysdeps/ieee754/flt-32/s_log1pf.c b/sysdeps/ieee754/flt-32/s_log1pf.c index 555f0f82c8..d1686e78aa 100644 --- a/sysdeps/ieee754/flt-32/s_log1pf.c +++ b/sysdeps/ieee754/flt-32/s_log1pf.c @@ -1,116 +1,181 @@ -/* s_log1pf.c -- float version of s_log1p.c. - */ +/* Correctly-rounded biased argument natural logarithm function for binary32 + value. -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ +Copyright (c) 2023, 2024 Alexei Sibidanov. -#include <float.h> -#include <math.h> -#include <math-barriers.h> -#include <math_private.h> -#include <math-underflow.h> -#include <libc-diag.h> +This file is part of the CORE-MATH project +project (file src/binary32/log1p/log1pf.c revision bc385c2). -static const float -ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ -ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ -two25 = 3.355443200e+07, /* 0x4c000000 */ -Lp1 = 6.6666668653e-01, /* 3F2AAAAB */ -Lp2 = 4.0000000596e-01, /* 3ECCCCCD */ -Lp3 = 2.8571429849e-01, /* 3E924925 */ -Lp4 = 2.2222198546e-01, /* 3E638E29 */ -Lp5 = 1.8183572590e-01, /* 3E3A3325 */ -Lp6 = 1.5313838422e-01, /* 3E1CD04F */ -Lp7 = 1.4798198640e-01; /* 3E178897 */ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -static const float zero = 0.0; +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -float -__log1pf(float x) +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include <math.h> +#include <stdint.h> +#include <errno.h> +#include <libm-alias-float.h> +#include "math_config.h" + +static __attribute__ ((noinline)) float +as_special (float x) { - float hfsq,f,c,s,z,R,u; - int32_t k,hx,hu,ax; + uint32_t t = asuint (x); + if (t == 0xbf800000u) + return __math_divzerof (1); + if (t == 0x7f800000u) + return x; /* +inf */ + uint32_t ax = t << 1; + if (ax > 0xff000000u) + return x + x; /* nan */ + return __math_invalidf (0.0f); +} - GET_FLOAT_WORD(hx,x); - ax = hx&0x7fffffff; +float +__log1pf (float x) +{ + static const double x0[] = + { + 0x1.f81f82p-1, 0x1.e9131acp-1, 0x1.dae6077p-1, 0x1.cd85689p-1, + 0x1.c0e0704p-1, 0x1.b4e81b5p-1, 0x1.a98ef6p-1, 0x1.9ec8e95p-1, + 0x1.948b0fdp-1, 0x1.8acb90fp-1, 0x1.8181818p-1, 0x1.78a4c81p-1, + 0x1.702e05cp-1, 0x1.6816817p-1, 0x1.605816p-1, 0x1.58ed231p-1, + 0x1.51d07ebp-1, 0x1.4afd6ap-1, 0x1.446f865p-1, 0x1.3e22cbdp-1, + 0x1.3813814p-1, 0x1.323e34ap-1, 0x1.2c9fb4ep-1, 0x1.27350b9p-1, + 0x1.21fb781p-1, 0x1.1cf06aep-1, 0x1.1811812p-1, 0x1.135c811p-1, + 0x1.0ecf56cp-1, 0x1.0a6810ap-1, 0x1.0624dd3p-1, 0x1.0204081p-1 + }; + static const double lixb[] = + { + 0x1.fc0a8909b4218p-7, 0x1.77458f51aac89p-5, 0x1.341d793afb997p-4, + 0x1.a926d3a5ebd2ap-4, 0x1.0d77e7a8a823dp-3, 0x1.44d2b6c557102p-3, + 0x1.7ab89040accecp-3, 0x1.af3c94ecab3d6p-3, 0x1.e27076d54e6c9p-3, + 0x1.0a324e3888ad5p-2, 0x1.22941fc0c7357p-2, 0x1.3a64c56ae3fdbp-2, + 0x1.51aad874af21fp-2, 0x1.686c81d300eap-2, 0x1.7eaf83c7fa9b5p-2, + 0x1.947941aa610ecp-2, 0x1.a9cec9a3f023bp-2, 0x1.beb4d9ea4156ep-2, + 0x1.d32fe7f35e5c7p-2, 0x1.e7442617b817ap-2, 0x1.faf588dd5ed1p-2, + 0x1.0723e5c635c39p-1, 0x1.109f39d53c99p-1, 0x1.19ee6b38a4668p-1, + 0x1.23130d7f93c3bp-1, 0x1.2c0e9ec9b0b85p-1, 0x1.34e289cb35eccp-1, + 0x1.3d9026ad3d3f3p-1, 0x1.4618bc1eadbbbp-1, 0x1.4e7d8127dd8a9p-1, + 0x1.56bf9d5967092p-1, 0x1.5ee02a926936ep-1 + }; + static const double lix[] = + { + 0x1.fc0a890fc03e4p-7, 0x1.77458f532dcfcp-5, 0x1.341d793bbd1d1p-4, + 0x1.a926d3a6ad563p-4, 0x1.0d77e7a908e59p-3, 0x1.44d2b6c5b7d1ep-3, + 0x1.7ab890410d909p-3, 0x1.af3c94ed0bff3p-3, 0x1.e27076d5af2e6p-3, + 0x1.0a324e38b90e3p-2, 0x1.22941fc0f7966p-2, 0x1.3a64c56b145eap-2, + 0x1.51aad874df82dp-2, 0x1.686c81d3314afp-2, 0x1.7eaf83c82afc3p-2, + 0x1.947941aa916fbp-2, 0x1.a9cec9a42084ap-2, 0x1.beb4d9ea71b7cp-2, + 0x1.d32fe7f38ebd5p-2, 0x1.e7442617e8788p-2, 0x1.faf588dd8f31fp-2, + 0x1.0723e5c64df4p-1, 0x1.109f39d554c97p-1, 0x1.19ee6b38bc96fp-1, + 0x1.23130d7fabf43p-1, 0x1.2c0e9ec9c8e8cp-1, 0x1.34e289cb4e1d3p-1, + 0x1.3d9026ad556fbp-1, 0x1.4618bc1ec5ec2p-1, 0x1.4e7d8127f5bb1p-1, + 0x1.56bf9d597f399p-1, 0x1.5ee02a9281675p-1 + }; + static const double b[] = + { + 0x1p+0, + -0x1p-1, + 0x1.5555555556f6bp-2, + -0x1.00000000029b9p-2, + 0x1.9999988d176e4p-3, + -0x1.55555418889a7p-3, + 0x1.24adeca50e2bcp-3, + -0x1.001ba33bf57cfp-3 + }; - k = 1; - if (hx < 0x3ed413d7) { /* x < 0.41422 */ - if(ax>=0x3f800000) { /* x <= -1.0 */ - if(x==(float)-1.0) return -two25/zero; /* log1p(-1)=-inf */ - else return (x-x)/(x-x); /* log1p(x<-1)=NaN */ - } - if(ax<0x31000000) { /* |x| < 2**-29 */ - math_force_eval(two25+x); /* raise inexact */ - if (ax<0x24800000) /* |x| < 2**-54 */ - { - math_check_force_underflow (x); - return x; - } - else - return x - x*x*(float)0.5; - } - if(hx>0||hx<=((int32_t)0xbe95f61f)) { - k=0;f=x;hu=1;} /* -0.2929<x<0.41422 */ + double z = x; + uint32_t ux = asuint (x); + uint32_t ax = ux & (~0u >> 1); + if (__glibc_likely (ax < 0x3c880000)) + { + if (__glibc_unlikely (ax < 0x33000000)) + { + if (!ax) + return x; + return fmaf (x, -x, x); } - if (hx >= 0x7f800000) return x+x; - if(k!=0) { - if(hx<0x5a000000) { - u = (float)1.0+x; - GET_FLOAT_WORD(hu,u); - k = (hu>>23)-127; - /* correction term */ - c = (k>0)? (float)1.0-(u-x):x-(u-(float)1.0); - c /= u; - } else { - u = x; - GET_FLOAT_WORD(hu,u); - k = (hu>>23)-127; - c = 0; - } - hu &= 0x007fffff; - if(hu<0x3504f7) { - SET_FLOAT_WORD(u,hu|0x3f800000);/* normalize u */ - } else { - k += 1; - SET_FLOAT_WORD(u,hu|0x3f000000); /* normalize u/2 */ - hu = (0x00800000-hu)>>2; + double z2 = z * z, z4 = z2 * z2; + double f = z2 + * ((b[1] + z * b[2]) + z2 * (b[3] + z * b[4]) + + z4 * ((b[5] + z * b[6]) + z2 * b[7])); + double r = z + f; + if (__glibc_unlikely ((asuint64 (r) & 0xfffffffll) == 0)) + r += 0x1p14 * (f + (z - r)); + return r; + } + else + { + if (__glibc_unlikely (ux >= 0xbf800000u || ax >= 0x7f800000)) + return as_special (x); + uint64_t tp = asuint64 (z + 1); + int e = tp >> 52; + uint64_t m52 = tp & (~(uint64_t) 0 >> 12); + unsigned int j = (tp >> (52 - 5)) & 31; + e -= 0x3ff; + double xd = asdouble (m52 | ((uint64_t) 0x3ff << 52)); + z = xd * x0[j] - 1; + static const double c[] = + { + -0x1.3902c33434e7fp-43, 0x1.ffffffe1cbed5p-1, -0x1.ffffff7d1b014p-2, + 0x1.5564e0ed3613ap-2, -0x1.0012232a00d4ap-2 + }; + const double ln2 = 0x1.62e42fefa39efp-1; + double z2 = z * z, + r = (ln2 * e + lixb[j]) + + z * ((c[1] + z * c[2]) + z2 * (c[3] + z * c[4])); + float ub = r; + float lb = r + 2.2e-11; + if (__glibc_unlikely (ub != lb)) + { + double z4 = z2 * z2, + f = z + * ((b[0] + z * b[1]) + z2 * (b[2] + z * b[3]) + + z4 * ((b[4] + z * b[5]) + z2 * (b[6] + z * b[7]))); + const double ln2l = 0x1.7f7d1cf79abcap-20, ln2h = 0x1.62e4p-1; + double Lh = ln2h * e; + double Ll = ln2l * e; + double rl = f + Ll + lix[j]; + double tr = rl + Lh; + if (__glibc_unlikely ((asuint64 (tr) & 0xfffffffll) == 0)) + { + if (x == -0x1.247ab0p-6) + return -0x1.271f0ep-6f - 0x1p-31f; + if (x == -0x1.3a415ep-5) + return -0x1.407112p-5f + 0x1p-30f; + if (x == 0x1.fb035ap-2) + return 0x1.9bddc2p-2f + 0x1p-27f; + tr += 64 * (rl + (Lh - tr)); } - f = u-(float)1.0; - } - hfsq=(float)0.5*f*f; - if(hu==0) { /* |f| < 2**-20 */ - if(f==zero) { - if(k==0) return zero; - else {c += k*ln2_lo; return k*ln2_hi+c;} + else if (rl + (Lh - tr) == 0.0) + { + if (x == 0x1.b7fd86p-4) + return 0x1.a1ece2p-4f + 0x1p-29f; + if (x == -0x1.3a415ep-5) + return -0x1.407112p-5f + 0x1p-30f; + if (x == 0x1.43c7e2p-6) + return 0x1.409f80p-6f + 0x1p-31f; } - R = hfsq*(1.0f-0.66666666666666666f*f); - if(k==0) return f-R; else - return k*ln2_hi-((R-(k*ln2_lo+c))-f); + ub = tr; } - s = f/((float)2.0+f); - z = s*s; - R = z*(Lp1+z*(Lp2+z*(Lp3+z*(Lp4+z*(Lp5+z*(Lp6+z*Lp7)))))); - if (k == 0) - return f - (hfsq - s * (hfsq + R)); - else - { - /* With GCC 7 when compiling with -Os the compiler warns - that c might be used uninitialized. This can't be true - because k must be 0 for c to be uninitialized and we - handled that computation earlier without using c. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized"); - return k * ln2_hi - ((hfsq - (s * (hfsq + R) - + (k * ln2_lo + c))) - f); - DIAG_POP_NEEDS_COMMENT; - } + return ub; + } } +libm_alias_float (__log1p, log1p) +strong_alias (__log1pf, __logp1f) +libm_alias_float (__logp1, logp1) diff --git a/sysdeps/ieee754/flt-32/s_log2p1f.c b/sysdeps/ieee754/flt-32/s_log2p1f.c new file mode 100644 index 0000000000..09e77dc08a --- /dev/null +++ b/sysdeps/ieee754/flt-32/s_log2p1f.c @@ -0,0 +1,248 @@ +/* Correctly-rounded biased argument natural logarithm function for binary32 + value. + +Copyright (c) 2022-2024 Alexei Sibidanov. + +This file is part of the CORE-MATH project +project (file src/binary32/log2p1/log2p1f.c revision bc385c2). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include <errno.h> +#include <math.h> +#include <math-underflow.h> +#include <libm-alias-float.h> +#include "math_config.h" + +float +__log2p1f (float x) +{ + static const double ix[] = + { + 0x1p+0, 0x1.fc07f01fcp-1, 0x1.f81f81f82p-1, + 0x1.f44659e4ap-1, 0x1.f07c1f07cp-1, 0x1.ecc07b302p-1, + 0x1.e9131abfp-1, 0x1.e573ac902p-1, 0x1.e1e1e1e1ep-1, + 0x1.de5d6e3f8p-1, 0x1.dae6076bap-1, 0x1.d77b654b8p-1, + 0x1.d41d41d42p-1, 0x1.d0cb58f6ep-1, 0x1.cd8568904p-1, + 0x1.ca4b3055ep-1, 0x1.c71c71c72p-1, 0x1.c3f8f01c4p-1, + 0x1.c0e070382p-1, 0x1.bdd2b8994p-1, 0x1.bacf914c2p-1, + 0x1.b7d6c3ddap-1, 0x1.b4e81b4e8p-1, 0x1.b2036406cp-1, + 0x1.af286bca2p-1, 0x1.ac5701ac6p-1, 0x1.a98ef606ap-1, + 0x1.a6d01a6dp-1, 0x1.a41a41a42p-1, 0x1.a16d3f97ap-1, + 0x1.9ec8e951p-1, 0x1.9c2d14ee4p-1, 0x1.99999999ap-1, + 0x1.970e4f80cp-1, 0x1.948b0fcd6p-1, 0x1.920fb49dp-1, + 0x1.8f9c18f9cp-1, 0x1.8d3018d3p-1, 0x1.8acb90f6cp-1, + 0x1.886e5f0acp-1, 0x1.861861862p-1, 0x1.83c977ab2p-1, + 0x1.818181818p-1, 0x1.7f405fd02p-1, 0x1.7d05f417ep-1, + 0x1.7ad2208ep-1, 0x1.78a4c8178p-1, 0x1.767dce434p-1, + 0x1.745d1745ep-1, 0x1.724287f46p-1, 0x1.702e05c0cp-1, + 0x1.6e1f76b44p-1, 0x1.6c16c16c2p-1, 0x1.6a13cd154p-1, + 0x1.681681682p-1, 0x1.661ec6a52p-1, 0x1.642c8590cp-1, + 0x1.623fa7702p-1, 0x1.605816058p-1, 0x1.5e75bb8dp-1, + 0x1.5c9882b94p-1, 0x1.5ac056b02p-1, 0x1.58ed23082p-1, + 0x1.571ed3c5p-1, 0x1.555555556p-1, 0x1.5390948f4p-1, + 0x1.51d07eae2p-1, 0x1.501501502p-1, 0x1.4e5e0a73p-1, + 0x1.4cab88726p-1, 0x1.4afd6a052p-1, 0x1.49539e3b2p-1, + 0x1.47ae147aep-1, 0x1.460cbc7f6p-1, 0x1.446f86562p-1, + 0x1.42d6625d6p-1, 0x1.414141414p-1, 0x1.3fb013fbp-1, + 0x1.3e22cbce4p-1, 0x1.3c995a47cp-1, 0x1.3b13b13b2p-1, + 0x1.3991c2c18p-1, 0x1.381381382p-1, 0x1.3698df3dep-1, + 0x1.3521cfb2cp-1, 0x1.33ae45b58p-1, 0x1.323e34a2cp-1, + 0x1.30d19013p-1, 0x1.2f684bda2p-1, 0x1.2e025c04cp-1, + 0x1.2c9fb4d82p-1, 0x1.2b404ad02p-1, 0x1.29e4129e4p-1, + 0x1.288b01288p-1, 0x1.27350b882p-1, 0x1.25e22708p-1, + 0x1.24924924ap-1, 0x1.23456789ap-1, 0x1.21fb78122p-1, + 0x1.20b470c68p-1, 0x1.1f7047dc2p-1, 0x1.1e2ef3b4p-1, + 0x1.1cf06ada2p-1, 0x1.1bb4a4046p-1, 0x1.1a7b9611ap-1, + 0x1.19453808cp-1, 0x1.181181182p-1, 0x1.16e068942p-1, + 0x1.15b1e5f76p-1, 0x1.1485f0e0ap-1, 0x1.135c81136p-1, + 0x1.12358e75ep-1, 0x1.111111112p-1, 0x1.0fef010fep-1, + 0x1.0ecf56be6p-1, 0x1.0db20a89p-1, 0x1.0c9714fbcp-1, + 0x1.0b7e6ec26p-1, 0x1.0a6810a68p-1, 0x1.0953f3902p-1, + 0x1.084210842p-1, 0x1.073260a48p-1, 0x1.0624dd2f2p-1, + 0x1.05197f7d8p-1, 0x1.041041042p-1, 0x1.03091b52p-1, + 0x1.020408102p-1, 0x1.01010101p-1, 0x1p-1 + }; + + static const double lix[] = { + 0x0p+0, -0x1.6fe50b6f1eafap-7, -0x1.6e79685c160d5p-6, + -0x1.11cd1d51955bap-5, -0x1.6bad37591e03p-5, -0x1.c4dfab908ddb5p-5, + -0x1.0eb389fab4795p-4, -0x1.3aa2fdd26ae99p-4, -0x1.663f6faca846bp-4, + -0x1.918a16e4cb157p-4, -0x1.bc84240a78a13p-4, -0x1.e72ec1181cfb1p-4, + -0x1.08c588cd964e4p-3, -0x1.1dcd19759f2e3p-3, -0x1.32ae9e27627c6p-3, + -0x1.476a9f989a58ap-3, -0x1.5c01a39fa6533p-3, -0x1.70742d4eed455p-3, + -0x1.84c2bd02d6434p-3, -0x1.98edd077e9f0ap-3, -0x1.acf5e2db31eeap-3, + -0x1.c0db6cddaa82dp-3, -0x1.d49ee4c33121ap-3, -0x1.e840be751d775p-3, + -0x1.fbc16b9003e0bp-3, -0x1.0790adbae3fcp-2, -0x1.11307dad465b5p-2, + -0x1.1ac05b2924cc5p-2, -0x1.24407ab0cc41p-2, -0x1.2db10fc4ea424p-2, + -0x1.37124cea58697p-2, -0x1.406463b1d455dp-2, -0x1.49a784bcbaa37p-2, + -0x1.52dbdfc4f341dp-2, -0x1.5c01a39ff2c9bp-2, -0x1.6518fe46abaa5p-2, + -0x1.6e221cd9d6933p-2, -0x1.771d2ba7f5791p-2, -0x1.800a56315ee2ap-2, + -0x1.88e9c72df8611p-2, -0x1.91bba891d495fp-2, -0x1.9a8023920fa4dp-2, + -0x1.a33760a7fbca6p-2, -0x1.abe18797d2effp-2, -0x1.b47ebf734b923p-2, + -0x1.bd0f2e9eb2b84p-2, -0x1.c592fad2be1aap-2, -0x1.ce0a4923cf5e6p-2, + -0x1.d6753e02f4ebcp-2, -0x1.ded3fd445afp-2, -0x1.e726aa1e558fep-2, + -0x1.ef6d67325ba38p-2, -0x1.f7a8568c8aea6p-2, -0x1.ffd799a81be87p-2, + 0x1.f804ae8d33c4p-2, 0x1.efec61b04af4ep-2, 0x1.e7df5fe572606p-2, + 0x1.dfdd89d5b0009p-2, 0x1.d7e6c0abbd924p-2, 0x1.cffae611a74d6p-2, + 0x1.c819dc2d8578cp-2, 0x1.c043859e5bdbcp-2, 0x1.b877c57b47c04p-2, + 0x1.b0b67f4f29a66p-2, 0x1.a8ff97183ed07p-2, 0x1.a152f14293c74p-2, + 0x1.99b072a9289cap-2, 0x1.921800927e284p-2, 0x1.8a8980ac4113p-2, + 0x1.8304d90c2859dp-2, 0x1.7b89f02cbd49ap-2, 0x1.7418aceb84ab1p-2, + 0x1.6cb0f68656c95p-2, 0x1.6552b49993dc2p-2, 0x1.5dfdcf1eacd7bp-2, + 0x1.56b22e6b97c18p-2, 0x1.4f6fbb2ce6943p-2, 0x1.48365e6957b42p-2, + 0x1.4106017c0dbcfp-2, 0x1.39de8e15727d9p-2, 0x1.32bfee37489bcp-2, + 0x1.2baa0c34989c3p-2, 0x1.249cd2b177fd5p-2, 0x1.1d982c9d50468p-2, + 0x1.169c0536677acp-2, 0x1.0fa848045f67bp-2, 0x1.08bce0d9a7c6p-2, + 0x1.01d9bbcf66a2cp-2, 0x1.f5fd8a90e2d85p-3, 0x1.e857d3d3af1e5p-3, + 0x1.dac22d3ec5f4ep-3, 0x1.cd3c712db459ap-3, 0x1.bfc67a7ff3c22p-3, + 0x1.b2602497678f4p-3, 0x1.a5094b555a1f8p-3, 0x1.97c1cb136b96fp-3, + 0x1.8a8980ac8652dp-3, 0x1.7d60496c83f66p-3, 0x1.7046031c7cdafp-3, + 0x1.633a8bf460335p-3, 0x1.563dc2a08b102p-3, 0x1.494f863bbc1dep-3, + 0x1.3c6fb6507a37ep-3, 0x1.2f9e32d5257ecp-3, 0x1.22dadc2a627efp-3, + 0x1.1625931802e49p-3, 0x1.097e38cef9519p-3, 0x1.f9c95dc138295p-4, + 0x1.e0b1ae90505f6p-4, 0x1.c7b528b5fcffap-4, 0x1.aed391abb17a1p-4, + 0x1.960caf9bd35eap-4, 0x1.7d60496e3edebp-4, 0x1.64ce26bf2108ep-4, + 0x1.4c560fe5b573bp-4, 0x1.33f7cde24adfbp-4, 0x1.1bb32a5ed9353p-4, + 0x1.0387efbd3006ep-4, 0x1.d6ebd1f1d0955p-5, 0x1.a6f9c37a8beabp-5, + 0x1.77394c9d6762cp-5, 0x1.47aa07358e1a4p-5, 0x1.184b8e4d490efp-5, + 0x1.d23afc4d95c78p-6, 0x1.743ee8678a7cbp-6, 0x1.16a21e243bf78p-6, + 0x1.72c7ba20c907ep-7, 0x1.720d9c0536e17p-8, 0x0p+0 + }; + + double z = x; + uint32_t ux = asuint (x); + uint32_t ax = ux & (~0u >> 1); + if (__glibc_unlikely (ux >= 0x17fu << 23)) + { /* x <= -1 */ + if (ux == (0x17fu << 23)) + return __math_divzerof (1); + if (ux > (0x1ffu << 23)) + return x + x; /* nan */ + return __math_invalidf (x); + } + else if (__glibc_unlikely (ax >= (0xff << 23))) + { /* +inf, nan */ + if (ax > (0xff << 23)) + return x + x; /* nan */ + return INFINITY; + } + else if (__glibc_likely (ax < 0x3cb7aa26u)) + { /* |x| < 0x1.6f544cp-6 */ + double z2 = z * z, z4 = z2 * z2; + if ( __glibc_likely (ax < 0x3b9d9d34u)) + { /* |x| < 0x1.3b3a68p-8 */ + if (__glibc_likely (ax < 0x39638a7eu)) + { /* |x| < 0x1.c714fcp-13 */ + if (__glibc_likely (ax < 0x329c5639u)) + { /* |x| < 0x1.38ac72p-26 */ + static const double c[] = + { + 0x1.71547652b82fep+0, -0x1.71547652b82ffp-1 + }; + return z * (c[0] + z * c[1]); + } + else + { + if (__glibc_unlikely (ux == 0x32ff7045u)) + return 0x1.70851ap-25f - 0x1.8p-80f; + if (__glibc_unlikely (ux == 0xb395efbbu)) + return -0x1.b0a00ap-24f + 0x1p-76f; + if (__glibc_unlikely (ux == 0x35a14df7u)) + return 0x1.d16d2p-20f + 0x1p-72f; + if (__glibc_unlikely (ux == 0x3841cb81u)) + return 0x1.17949ep-14f + 0x1p-67f; + static const double c[] = + { + 0x1.71547652b82fep+0, -0x1.71547652b82fdp-1, + 0x1.ec709ead0c9a7p-2, -0x1.7154773c1cb29p-2 + }; + return z * ((c[0] + z * c[1]) + z2 * (c[2] + z * c[3])); + } + } + else + { + if (__glibc_unlikely (ux == 0xbac9363du)) + return -0x1.2282aap-9f + 0x1p-61f; + static const double c[] = + { + 0x1.71547652b82fep+0, -0x1.71547652b83p-1, + 0x1.ec709dc28f51bp-2, -0x1.7154765157748p-2, + 0x1.2778a510a3682p-2, -0x1.ec745df1551fcp-3 + }; + return z + * ((c[0] + z * c[1]) + z2 * (c[2] + z * c[3]) + + z4 * ((c[4] + z * c[5]))); + } + } + else + { + static const double c[] = + { + 0x1.71547652b82fep+0, -0x1.71547652b82fbp-1, + 0x1.ec709dc3b6a73p-2, -0x1.71547652dc09p-2, + 0x1.2776c1a88901p-2, -0x1.ec7095bd4d208p-3, + 0x1.a66bec7fc8f7p-3, -0x1.71a900fc3f3f9p-3 + }; + return z + * ((c[0] + z * c[1]) + z2 * (c[2] + z * c[3]) + + z4 * ((c[4] + z * c[5]) + z2 * (c[6] + z * c[7]))); + } + } + else + { /* |x| >= 0x1.6f544cp-6 */ + float h, l; + /* With gcc 6.3.0, if we return 0x1.e90026p+4f + 0x1.fp-21 + in the second exceptional case, with rounding up it yields + 0x1.e90026p+4 which is incorrect, thus we use this workaround. See + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112367. */ + if (__glibc_unlikely (ux == 0x52928e33u)) + { + h = 0x1.318ffap+5f; + l = 0x1.fp-20f; + return h + l; + } + if (__glibc_unlikely (ux == 0x4ebd09e3u)) + { + h = 0x1.e90026p+4f; + l = 0x1.fp-21; + return h + l; + } + uint64_t tp = asuint64 (z + 1.0); + uint64_t m = tp & (~(uint64_t) 0 >> 12); + int e = (tp >> 52) - 0x3ff; + int j = (m + ((int64_t) 1 << (52 - 8))) >> (52 - 7), k = j > 53; + e += k; + double xd = asdouble (m | (uint64_t) 0x3ff << 52); + z = fma (xd, ix[j], -1.0); + static const double c[] = + { + 0x1.71547652b82fep+0, -0x1.71547652b82ffp-1, 0x1.ec709dc32988bp-2, + -0x1.715476521ec2bp-2, 0x1.277801a1ad904p-2, -0x1.ec731704d6a88p-3 + }; + double z2 = z * z; + double c0 = c[0] + z * c[1]; + double c2 = c[2] + z * c[3]; + double c4 = c[4] + z * c[5]; + c0 += z2 * (c2 + z2 * c4); + return (z * c0 - lix[j]) + e; + } +} +libm_alias_float (__log2p1, log2p1) diff --git a/sysdeps/m68k/m680x0/fpu/math_errf.c b/sysdeps/ieee754/flt-32/w_log1pf.c index 1cc8931700..1cc8931700 100644 --- a/sysdeps/m68k/m680x0/fpu/math_errf.c +++ b/sysdeps/ieee754/flt-32/w_log1pf.c diff --git a/sysdeps/loongarch/dl-tlsdesc-dynamic.h b/sysdeps/loongarch/dl-tlsdesc-dynamic.h index d10f4a8800..3daf991001 100644 --- a/sysdeps/loongarch/dl-tlsdesc-dynamic.h +++ b/sysdeps/loongarch/dl-tlsdesc-dynamic.h @@ -19,9 +19,6 @@ <https://www.gnu.org/licenses/>. */ #define FRAME_SIZE (-((-14 * SZREG) & ALMASK)) -#define FRAME_SIZE_LSX (-((-32 * SZVREG) & ALMASK)) -#define FRAME_SIZE_LASX (-((-32 * SZXREG) & ALMASK)) -#define FRAME_SIZE_FLOAT (-((-24 * SZFREG) & ALMASK)) /* Handler for dynamic TLS symbols. Prototype: @@ -155,7 +152,7 @@ Hign address dynamic_block1 <----- dtv5 */ #ifdef USE_LASX #define V_REG_S xvst #define V_REG_L xvld - #define V_SPACE FRAME_SIZE_LASX + #define V_SPACE (-((-32 * SZXREG) & ALMASK)) /* Space for LASX registers. */ #define V_REG(n) $xr##n #define V_REGS 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \ 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 @@ -163,7 +160,7 @@ Hign address dynamic_block1 <----- dtv5 */ #elif defined USE_LSX #define V_REG_S vst #define V_REG_L vld - #define V_SPACE FRAME_SIZE_LSX + #define V_SPACE (-((-32 * SZVREG) & ALMASK)) /* Space for LSX registers. */ #define V_REG(n) $vr##n #define V_REGS 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \ 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 @@ -171,7 +168,7 @@ Hign address dynamic_block1 <----- dtv5 */ #else #define V_REG_S fst.d #define V_REG_L fld.d - #define V_SPACE FRAME_SIZE_FLOAT + #define V_SPACE (-((-24 * SZFREG) & ALMASK)) /* Space for FLOAT registers. */ #define V_REG(n) $f##n #define V_REGS 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 #define V_REGSZ SZFREG diff --git a/sysdeps/loongarch/dl-tlsdesc.S b/sysdeps/loongarch/dl-tlsdesc.S index b6cfd6121d..be76c07cce 100644 --- a/sysdeps/loongarch/dl-tlsdesc.S +++ b/sysdeps/loongarch/dl-tlsdesc.S @@ -69,6 +69,12 @@ _dl_tlsdesc_undefweak: #define Lslow Lslow_lasx #include "dl-tlsdesc-dynamic.h" #undef FRAME_SIZE +#undef V_REG_S +#undef V_REG_L +#undef V_SPACE +#undef V_REG +#undef V_REGS +#undef V_REGSZ #undef USE_LASX #undef _dl_tlsdesc_dynamic #undef Lret @@ -80,6 +86,12 @@ _dl_tlsdesc_undefweak: #define Lslow Lslow_lsx #include "dl-tlsdesc-dynamic.h" #undef FRAME_SIZE +#undef V_REG_S +#undef V_REG_L +#undef V_SPACE +#undef V_REG +#undef V_REGS +#undef V_REGSZ #undef USE_LSX #undef _dl_tlsdesc_dynamic #undef Lret diff --git a/sysdeps/loongarch/lp64/libm-test-ulps b/sysdeps/loongarch/lp64/libm-test-ulps index 833dca40e4..ecd9cc5873 100644 --- a/sysdeps/loongarch/lp64/libm-test-ulps +++ b/sysdeps/loongarch/lp64/libm-test-ulps @@ -977,22 +977,18 @@ ldouble: 3 Function: "exp10m1": double: 4 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 5 -float: 3 ldouble: 6 Function: "exp2": @@ -1014,22 +1010,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_downward": @@ -1046,22 +1038,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1207,42 +1195,34 @@ ldouble: 1 Function: "log10p1": double: 2 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 2 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1264,22 +1244,18 @@ ldouble: 1 Function: "log2p1": double: 2 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_downward": @@ -1294,22 +1270,18 @@ ldouble: 2 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 2 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1432,22 +1404,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/loongarch/nptl/thread_pointer.h b/sysdeps/loongarch/nptl/thread_pointer.h new file mode 100644 index 0000000000..cc96062c93 --- /dev/null +++ b/sysdeps/loongarch/nptl/thread_pointer.h @@ -0,0 +1,30 @@ +/* __thread_pointer definition. loongarch version. + Copyright (C) 2021-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_THREAD_POINTER_H +#define _SYS_THREAD_POINTER_H + +register void *__thread_self asm ("$tp"); + +static inline void * +__thread_pointer (void) +{ + return __thread_self; +} + +#endif /* _SYS_THREAD_POINTER_H */ diff --git a/sysdeps/loongarch/nptl/tls.h b/sysdeps/loongarch/nptl/tls.h index ac1a92ea7b..675c0d27c1 100644 --- a/sysdeps/loongarch/nptl/tls.h +++ b/sysdeps/loongarch/nptl/tls.h @@ -26,8 +26,8 @@ #include <stddef.h> #include <stdint.h> #include <dl-dtv.h> +#include "thread_pointer.h" -register void *__thread_self asm ("$tp"); #define READ_THREAD_POINTER() ({ __thread_self; }) /* Get system call information. */ diff --git a/sysdeps/m68k/coldfire/fpu/libm-test-ulps b/sysdeps/m68k/coldfire/fpu/libm-test-ulps index 1b25a70e3f..8130d491e8 100644 --- a/sysdeps/m68k/coldfire/fpu/libm-test-ulps +++ b/sysdeps/m68k/coldfire/fpu/libm-test-ulps @@ -131,12 +131,6 @@ Function: "log10": double: 1 float: 2 -Function: "log1p": -float: 1 - -Function: "logp1": -float: 1 - Function: "sincos": double: 1 float: 1 @@ -146,7 +140,6 @@ double: 1 Function: "tgamma": double: 1 -float: 1 Function: "y0": double: 2 diff --git a/sysdeps/m68k/m680x0/fpu/libm-test-ulps b/sysdeps/m68k/m680x0/fpu/libm-test-ulps index 6eacfb6b6f..3964b83b81 100644 --- a/sysdeps/m68k/m680x0/fpu/libm-test-ulps +++ b/sysdeps/m68k/m680x0/fpu/libm-test-ulps @@ -882,19 +882,15 @@ ldouble: 3 Function: "exp10m1": double: 1 -float: 1 Function: "exp10m1_downward": double: 1 -float: 1 Function: "exp10m1_towardzero": double: 1 -float: 1 Function: "exp10m1_upward": double: 3 -float: 1 Function: "exp2": double: 1 @@ -907,19 +903,15 @@ double: 1 Function: "exp2m1": double: 1 -float: 1 Function: "exp2m1_downward": double: 2 -float: 1 Function: "exp2m1_towardzero": double: 2 -float: 1 Function: "exp2m1_upward": double: 1 -float: 1 Function: "exp_upward": double: 1 @@ -1099,19 +1091,15 @@ double: 1 Function: "log2p1": double: 1 -float: 2 Function: "log2p1_downward": double: 1 -float: 2 Function: "log2p1_towardzero": double: 1 -float: 2 Function: "log2p1_upward": double: 1 -float: 2 Function: "logp1": double: 1 @@ -1208,22 +1196,18 @@ float: 1 Function: "tgamma": double: 3 -float: 9 ldouble: 9 Function: "tgamma_downward": double: 3 -float: 9 ldouble: 9 Function: "tgamma_towardzero": double: 3 -float: 9 ldouble: 9 Function: "tgamma_upward": double: 2 -float: 9 ldouble: 9 Function: "y0": diff --git a/sysdeps/m68k/m680x0/fpu/w_log1pf.c b/sysdeps/m68k/m680x0/fpu/w_log1pf.c new file mode 100644 index 0000000000..5f363cc66b --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_log1pf.c @@ -0,0 +1,20 @@ +/* Wrapper for __log1p that handles setting errno. + Copyright (C) 2015-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <math-type-macros-float.h> +#include <w_log1p_template.c> diff --git a/sysdeps/mach/hurd/faccessat.c b/sysdeps/mach/hurd/faccessat.c index 998e31962f..6d3d123abb 100644 --- a/sysdeps/mach/hurd/faccessat.c +++ b/sysdeps/mach/hurd/faccessat.c @@ -185,6 +185,15 @@ __faccessat_common (int fd, const char *file, int type, int at_flags, return errfunc (err); } + /* If all we wanted was to check for a file existing at the path, + then we already got our answer, and we don't need to call + file_check_access (). */ + if (type == F_OK) + { + __mach_port_deallocate (__mach_task_self (), io); + return 0; + } + /* Find out what types of access we are allowed to this file. */ err = __file_check_access (io, &allowed); __mach_port_deallocate (__mach_task_self (), io); diff --git a/sysdeps/mach/hurd/fcntl.c b/sysdeps/mach/hurd/fcntl.c index 9451ed5649..2583f54ef2 100644 --- a/sysdeps/mach/hurd/fcntl.c +++ b/sysdeps/mach/hurd/fcntl.c @@ -148,6 +148,7 @@ __libc_fcntl (int fd, int cmd, ...) cmd = F_SETLKW64; break; default: + va_end (ap); return __hurd_fail (EINVAL); } @@ -204,7 +205,10 @@ __libc_fcntl (int fd, int cmd, ...) && fl->l_start != fl64.l_start) || (sizeof fl->l_len != sizeof fl64.l_len && fl->l_len != fl64.l_len)) - return __hurd_fail (EOVERFLOW); + { + va_end (ap); + return __hurd_fail (EOVERFLOW); + } } result = err ? __hurd_dfail (fd, err) : 0; diff --git a/sysdeps/mach/hurd/x86_64/vm_param.h b/sysdeps/mach/hurd/x86_64/vm_param.h index 460445f49e..a6e63a3a1a 100644 --- a/sysdeps/mach/hurd/x86_64/vm_param.h +++ b/sysdeps/mach/hurd/x86_64/vm_param.h @@ -15,7 +15,7 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#ifndef _X86_86_VM_PARAM_H +#ifndef _X86_64_VM_PARAM_H #define _X86_64_VM_PARAM_H /* Arbitrary start of the brk. This is after usual binary and library mappings. */ diff --git a/sysdeps/microblaze/libm-test-ulps b/sysdeps/microblaze/libm-test-ulps index d3666eb7d4..328e31582b 100644 --- a/sysdeps/microblaze/libm-test-ulps +++ b/sysdeps/microblaze/libm-test-ulps @@ -191,7 +191,6 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "gamma": double: 4 @@ -225,7 +224,6 @@ float: 2 Function: "log1p": double: 1 -float: 1 Function: "log2": double: 2 @@ -233,7 +231,6 @@ float: 1 Function: "logp1": double: 1 -float: 1 Function: "pow": float: 1 @@ -257,7 +254,6 @@ float: 2 Function: "tgamma": double: 5 -float: 4 Function: "y0": double: 2 diff --git a/sysdeps/mips/mips32/libm-test-ulps b/sysdeps/mips/mips32/libm-test-ulps index d95230724b..c319e0642c 100644 --- a/sysdeps/mips/mips32/libm-test-ulps +++ b/sysdeps/mips/mips32/libm-test-ulps @@ -779,19 +779,15 @@ float: 1 Function: "exp10m1": double: 3 -float: 2 Function: "exp10m1_downward": double: 3 -float: 3 Function: "exp10m1_towardzero": double: 2 -float: 3 Function: "exp10m1_upward": double: 4 -float: 4 Function: "exp2": double: 1 @@ -811,19 +807,15 @@ float: 1 Function: "exp2m1": double: 2 -float: 2 Function: "exp2m1_downward": double: 3 -float: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 Function: "exp2m1_upward": double: 3 -float: 3 Function: "exp_downward": double: 1 @@ -839,19 +831,15 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -967,35 +955,27 @@ float: 2 Function: "log10p1": double: 1 -float: 2 Function: "log10p1_downward": double: 2 -float: 3 Function: "log10p1_towardzero": double: 3 -float: 2 Function: "log10p1_upward": double: 2 -float: 3 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": double: 2 @@ -1015,22 +995,18 @@ float: 3 Function: "log2p1": double: 1 -float: 2 ldouble: 1 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 2 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 1 Function: "log_downward": @@ -1045,19 +1021,15 @@ float: 2 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1156,19 +1128,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 9 -float: 7 Function: "tgamma_towardzero": double: 9 -float: 7 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/mips/mips64/libm-test-ulps b/sysdeps/mips/mips64/libm-test-ulps index ce33d9b4b3..365b860c54 100644 --- a/sysdeps/mips/mips64/libm-test-ulps +++ b/sysdeps/mips/mips64/libm-test-ulps @@ -978,22 +978,18 @@ ldouble: 3 Function: "exp10m1": double: 3 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 4 -float: 4 ldouble: 6 Function: "exp2": @@ -1018,22 +1014,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_downward": @@ -1050,22 +1042,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1212,42 +1200,34 @@ ldouble: 1 Function: "log10p1": double: 1 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 2 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1272,22 +1252,18 @@ ldouble: 1 Function: "log2p1": double: 1 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_downward": @@ -1305,22 +1281,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 2 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1444,22 +1416,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/nios2/libm-test-ulps b/sysdeps/nios2/libm-test-ulps index c8d1a722f7..5240767c0e 100644 --- a/sysdeps/nios2/libm-test-ulps +++ b/sysdeps/nios2/libm-test-ulps @@ -197,7 +197,6 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "gamma": double: 4 @@ -231,7 +230,6 @@ float: 2 Function: "log1p": double: 1 -float: 1 Function: "log2": double: 2 @@ -239,7 +237,6 @@ float: 1 Function: "logp1": double: 1 -float: 1 Function: "pow": double: 1 @@ -266,7 +263,6 @@ float: 2 Function: "tgamma": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/nptl/_Fork.c b/sysdeps/nptl/_Fork.c index ef199ddbc3..52c90e61e3 100644 --- a/sysdeps/nptl/_Fork.c +++ b/sysdeps/nptl/_Fork.c @@ -17,11 +17,18 @@ <https://www.gnu.org/licenses/>. */ #include <arch-fork.h> +#include <libc-lock.h> #include <pthreadP.h> pid_t _Fork (void) { + /* Block all signals to avoid revealing the inconsistent TCB state + to a signal handler after fork. The abort lock should AS-safe + to avoid deadlock if _Fork is called from a signal handler. */ + internal_sigset_t original_sigmask; + __abort_lock_rdlock (&original_sigmask); + pid_t pid = arch_fork (&THREAD_SELF->tid); if (pid == 0) { @@ -44,6 +51,8 @@ _Fork (void) INTERNAL_SYSCALL_CALL (set_robust_list, &self->robust_head, sizeof (struct robust_list_head)); } + + __abort_lock_unlock (&original_sigmask); return pid; } libc_hidden_def (_Fork) diff --git a/sysdeps/nptl/pthreadP.h b/sysdeps/nptl/pthreadP.h index 7d9b95e6ac..c2db165052 100644 --- a/sysdeps/nptl/pthreadP.h +++ b/sysdeps/nptl/pthreadP.h @@ -517,6 +517,7 @@ libc_hidden_proto (__pthread_kill) extern int __pthread_cancel (pthread_t th); extern int __pthread_kill_internal (pthread_t threadid, int signo) attribute_hidden; +extern int __pthread_raise_internal (int signo) attribute_hidden; extern void __pthread_exit (void *value) __attribute__ ((__noreturn__)); libc_hidden_proto (__pthread_exit) extern int __pthread_join (pthread_t threadid, void **thread_return); diff --git a/sysdeps/or1k/fpu/libm-test-ulps b/sysdeps/or1k/fpu/libm-test-ulps index 59b9f072f5..9ced4b0052 100644 --- a/sysdeps/or1k/fpu/libm-test-ulps +++ b/sysdeps/or1k/fpu/libm-test-ulps @@ -804,19 +804,15 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -1066,19 +1062,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 9 -float: 9 Function: "tgamma_towardzero": double: 9 -float: 8 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/or1k/nofpu/libm-test-ulps b/sysdeps/or1k/nofpu/libm-test-ulps index 726855faaa..c7ae0f002b 100644 --- a/sysdeps/or1k/nofpu/libm-test-ulps +++ b/sysdeps/or1k/nofpu/libm-test-ulps @@ -802,19 +802,15 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_downward": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "expm1_upward": double: 1 -float: 1 Function: "gamma": double: 4 @@ -927,19 +923,15 @@ float: 2 Function: "log1p": double: 1 -float: 1 Function: "log1p_downward": double: 2 -float: 2 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log1p_upward": double: 2 -float: 2 Function: "log2": float: 1 @@ -955,19 +947,15 @@ double: 1 Function: "logp1": double: 1 -float: 1 Function: "logp1_downward": double: 2 -float: 2 Function: "logp1_towardzero": double: 2 -float: 2 Function: "logp1_upward": double: 2 -float: 2 Function: "pow": double: 1 @@ -1064,19 +1052,15 @@ float: 3 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_downward": double: 9 -float: 9 Function: "tgamma_towardzero": double: 9 -float: 8 Function: "tgamma_upward": double: 9 -float: 8 Function: "y0": double: 3 diff --git a/sysdeps/posix/profil.c b/sysdeps/posix/profil.c index 3b3c87e25a..6f4aa00eeb 100644 --- a/sysdeps/posix/profil.c +++ b/sysdeps/posix/profil.c @@ -82,7 +82,7 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) if (__setitimer (ITIMER_PROF, &otimer, NULL) < 0) return -1; samples = NULL; - return __sigaction (SIGPROF, &oact, NULL); + return __libc_sigaction (SIGPROF, &oact, NULL); } if (samples) @@ -90,7 +90,7 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) /* Was already turned on. Restore old timer and signal handler first. */ if (__setitimer (ITIMER_PROF, &otimer, NULL) < 0 - || __sigaction (SIGPROF, &oact, NULL) < 0) + || __libc_sigaction (SIGPROF, &oact, NULL) < 0) return -1; } #else @@ -114,7 +114,7 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) #endif act.sa_flags |= SA_RESTART; __sigfillset (&act.sa_mask); - if (__sigaction (SIGPROF, &act, oact_ptr) < 0) + if (__libc_sigaction (SIGPROF, &act, oact_ptr) < 0) return -1; timer.it_value.tv_sec = 0; diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c index c00fe0c181..fc30958a0c 100644 --- a/sysdeps/posix/tempname.c +++ b/sysdeps/posix/tempname.c @@ -117,6 +117,8 @@ random_bits (random_value *r, random_value s) succeed. */ #if !_LIBC *r = mix_random_values (v, clock ()); +#else + *r = v; #endif return false; } diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps index 2b5d2b940d..8d0c18eed1 100644 --- a/sysdeps/powerpc/fpu/libm-test-ulps +++ b/sysdeps/powerpc/fpu/libm-test-ulps @@ -870,6 +870,7 @@ float128: 1 ldouble: 2 Function: Imaginary part of "csin": +float: 1 float128: 1 ldouble: 1 @@ -1186,25 +1187,21 @@ ldouble: 4 Function: "exp10m1": double: 4 -float: 2 float128: 3 ldouble: 4 Function: "exp10m1_downward": double: 3 -float: 3 float128: 6 ldouble: 9 Function: "exp10m1_towardzero": double: 2 -float: 3 float128: 6 ldouble: 9 Function: "exp10m1_upward": double: 5 -float: 3 float128: 6 ldouble: 8 @@ -1231,25 +1228,21 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 float128: 2 ldouble: 3 Function: "exp2m1_downward": double: 3 -float: 3 float128: 3 ldouble: 7 Function: "exp2m1_towardzero": double: 3 -float: 2 float128: 4 ldouble: 8 Function: "exp2m1_upward": double: 3 -float: 3 float128: 5 ldouble: 9 @@ -1270,25 +1263,21 @@ ldouble: 1 Function: "expm1": double: 1 -float: 1 float128: 2 ldouble: 1 Function: "expm1_downward": double: 1 -float: 1 float128: 2 ldouble: 7 Function: "expm1_towardzero": double: 1 -float: 2 float128: 4 ldouble: 6 Function: "expm1_upward": double: 1 -float: 1 float128: 3 ldouble: 6 @@ -1508,49 +1497,41 @@ ldouble: 2 Function: "log10p1": double: 2 -float: 2 float128: 3 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 float128: 4 ldouble: 6 Function: "log10p1_towardzero": double: 3 -float: 2 float128: 3 ldouble: 6 Function: "log10p1_upward": double: 2 -float: 3 float128: 4 ldouble: 6 Function: "log1p": double: 1 -float: 1 float128: 3 ldouble: 2 Function: "log1p_downward": double: 1 -float: 2 float128: 3 ldouble: 2 Function: "log1p_towardzero": double: 2 -float: 2 float128: 3 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 float128: 2 ldouble: 3 @@ -1580,25 +1561,21 @@ ldouble: 4 Function: "log2p1": double: 2 -float: 2 float128: 3 ldouble: 2 Function: "log2p1_downward": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log2p1_towardzero": double: 2 -float: 2 float128: 2 ldouble: 5 Function: "log2p1_upward": double: 2 -float: 2 float128: 3 ldouble: 6 @@ -1620,25 +1597,21 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 float128: 3 ldouble: 2 Function: "logp1_downward": double: 1 -float: 2 float128: 3 ldouble: 2 Function: "logp1_towardzero": double: 2 -float: 2 float128: 3 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 float128: 2 ldouble: 3 @@ -1828,25 +1801,21 @@ ldouble: 6 Function: "tgamma": double: 9 -float: 8 float128: 4 ldouble: 5 Function: "tgamma_downward": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_towardzero": double: 9 -float: 7 float128: 5 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 float128: 4 ldouble: 5 diff --git a/sysdeps/powerpc/nofpu/libm-test-ulps b/sysdeps/powerpc/nofpu/libm-test-ulps index d56327ac33..20036c779c 100644 --- a/sysdeps/powerpc/nofpu/libm-test-ulps +++ b/sysdeps/powerpc/nofpu/libm-test-ulps @@ -987,22 +987,18 @@ ldouble: 4 Function: "exp10m1": double: 3 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 9 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 9 Function: "exp10m1_upward": double: 4 -float: 4 ldouble: 10 Function: "exp2": @@ -1027,22 +1023,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 7 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 8 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 9 Function: "exp_downward": @@ -1062,22 +1054,18 @@ ldouble: 1 Function: "expm1": double: 1 -float: 1 ldouble: 1 Function: "expm1_downward": double: 1 -float: 1 ldouble: 5 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 5 Function: "expm1_upward": double: 1 -float: 1 ldouble: 6 Function: "fma": @@ -1269,42 +1257,34 @@ ldouble: 2 Function: "log10p1": double: 1 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 6 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 6 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 6 Function: "log1p": double: 1 -float: 1 ldouble: 2 Function: "log1p_downward": double: 2 -float: 2 ldouble: 2 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1329,22 +1309,18 @@ ldouble: 4 Function: "log2p1": double: 1 -float: 2 ldouble: 2 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 4 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 5 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 6 Function: "log_downward": @@ -1362,22 +1338,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 2 Function: "logp1_downward": double: 2 -float: 2 ldouble: 2 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "mul_downward_ldouble": @@ -1560,22 +1532,18 @@ ldouble: 6 Function: "tgamma": double: 9 -float: 8 ldouble: 5 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/powerpc/powerpc64/le/Makefile b/sysdeps/powerpc/powerpc64/le/Makefile index 9d568d4f44..b77775cf95 100644 --- a/sysdeps/powerpc/powerpc64/le/Makefile +++ b/sysdeps/powerpc/powerpc64/le/Makefile @@ -129,6 +129,10 @@ CFLAGS-tst-strtod-round.c += $(type-float128-CFLAGS) CFLAGS-tst-wcstod-round.c += $(type-float128-CFLAGS) CFLAGS-tst-strtod-nan-locale.c += $(type-float128-CFLAGS) CFLAGS-tst-wcstod-nan-locale.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod1i.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod3.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod4.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod5i.c += $(type-float128-CFLAGS) CFLAGS-tst-strtod6.c += $(type-float128-CFLAGS) CFLAGS-tst-strfrom.c += $(type-float128-CFLAGS) CFLAGS-tst-strfrom-locale.c += $(type-float128-CFLAGS) diff --git a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S index eccb2ffbb0..58139ad9e8 100644 --- a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S +++ b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S @@ -43,7 +43,7 @@ # endif #endif -#define FRAMESIZE (FRAME_MIN_SIZE+8) +#define FRAMESIZE (FRAME_MIN_SIZE+16) /* Implements the function diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c index d453b6535d..6eda080fe2 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c @@ -8,12 +8,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c index 0a77812b38..b9cbce2d92 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c @@ -8,12 +8,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c index fd3b08d7e7..67f7d4052c 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c @@ -8,12 +8,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c index a848fcd8b4..f3bccf297c 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c @@ -8,12 +8,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c index a31b918879..3b0ea87ec2 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c @@ -13,7 +13,7 @@ You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c index 7f4c9f1d4b..b467fdecc1 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c @@ -8,12 +8,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ #include <string.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c index af855e6a5c..6e4e2ea14b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c @@ -9,12 +9,12 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/ >. */ + <https://www.gnu.org/licenses/>. */ /* Define multiple versions only for definition in libc. */ #if IS_IN (libc) diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile index 04ea56559e..4c1dc04b20 100644 --- a/sysdeps/pthread/Makefile +++ b/sysdeps/pthread/Makefile @@ -174,6 +174,7 @@ tests += \ tst-join13 \ tst-join14 \ tst-join15 \ + tst-join16 \ tst-key1 \ tst-key2 \ tst-key3 \ @@ -215,6 +216,7 @@ tests += \ tst-pt-vfork2 \ tst-pthread-exit-signal \ tst-pthread-mutexattr \ + tst-pthread-mutexattr-2 \ tst-pthread-raise-blocked-self \ tst-pthread-setuid-loop \ tst-pthread_cancel-exited \ @@ -291,6 +293,7 @@ tests-time64 += \ tst-cnd-timedwait-time64 \ tst-cond11-time64 \ tst-join14-time64 \ + tst-join16-time64 \ tst-mtx-timedlock-time64 \ tst-rwlock14-time64 \ tst-sem5-time64 \ diff --git a/sysdeps/pthread/tst-join16-time64.c b/sysdeps/pthread/tst-join16-time64.c new file mode 100644 index 0000000000..730cc56563 --- /dev/null +++ b/sysdeps/pthread/tst-join16-time64.c @@ -0,0 +1 @@ +#include "tst-join16.c" diff --git a/sysdeps/pthread/tst-join16.c b/sysdeps/pthread/tst-join16.c new file mode 100644 index 0000000000..8bf37b5e42 --- /dev/null +++ b/sysdeps/pthread/tst-join16.c @@ -0,0 +1,87 @@ +/* Test pthread_timedjoin_np and pthread_clockjoin_np with an invalid timeout. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <pthread.h> +#include <stdio.h> +#include <time.h> +#include <support/check.h> +#include <support/xthread.h> +#include <support/xtime.h> + + +#define CLOCK_USE_TIMEDJOIN (-1) + +static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + +static void * +tf (void *arg) +{ + xpthread_mutex_lock (&lock); + xpthread_mutex_unlock (&lock); + return (void *) 42l; +} + +static int +do_test_clock (clockid_t clockid) +{ + const clockid_t clockid_for_get = + (clockid == CLOCK_USE_TIMEDJOIN) ? CLOCK_REALTIME : clockid; + + xpthread_mutex_lock (&lock); + pthread_t th = xpthread_create (NULL, tf, NULL); + + void *status; + int ret; + struct timespec timeout = xclock_now (clockid_for_get); + timeout.tv_sec += 2; + timeout.tv_nsec = -1; + if (clockid == CLOCK_USE_TIMEDJOIN) + ret = pthread_timedjoin_np (th, &status, &timeout); + else + ret = pthread_clockjoin_np (th, &status, clockid, &timeout); + TEST_COMPARE (ret, EINVAL); + timeout.tv_nsec = 1000000000; + if (clockid == CLOCK_USE_TIMEDJOIN) + ret = pthread_timedjoin_np (th, &status, &timeout); + else + ret = pthread_clockjoin_np (th, &status, clockid, &timeout); + TEST_COMPARE (ret, EINVAL); + xpthread_mutex_unlock (&lock); + timeout.tv_nsec = 0; + ret = pthread_join (th, &status); + TEST_COMPARE (ret, 0); + if (status != (void *) 42l) + FAIL_EXIT1 ("return value %p, expected %p\n", status, (void *) 42l); + + return 0; +} + +static int +do_test (void) +{ + puts ("testing pthread_timedjoin_np"); + do_test_clock (CLOCK_USE_TIMEDJOIN); + puts ("testing CLOCK_REALTIME"); + do_test_clock (CLOCK_REALTIME); + puts ("testing CLOCK_MONOTONIC"); + do_test_clock (CLOCK_MONOTONIC); + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/pthread/tst-pthread-mutexattr-2.c b/sysdeps/pthread/tst-pthread-mutexattr-2.c new file mode 100644 index 0000000000..ec92e55322 --- /dev/null +++ b/sysdeps/pthread/tst-pthread-mutexattr-2.c @@ -0,0 +1,60 @@ +/* Test pthread_mutexattr_gettype and pthread_mutexattr_settype with + valid and invalid kinds. + + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stdio.h> +#include <pthread.h> + +#include <support/check.h> +#include <support/xthread.h> + + +static void +do_test_kind (int test_kind, const char *name) +{ + printf ("testing %s\n", name); + pthread_mutexattr_t attr; + xpthread_mutexattr_init (&attr); + int ret = pthread_mutexattr_settype (&attr, test_kind); + TEST_COMPARE (ret, 0); + int kind = 123456789; + ret = pthread_mutexattr_gettype (&attr, &kind); + TEST_COMPARE (ret, 0); + TEST_COMPARE (kind, test_kind); +} + +int +do_test (void) +{ + do_test_kind (PTHREAD_MUTEX_NORMAL, "PTHREAD_MUTEX_NORMAL"); + do_test_kind (PTHREAD_MUTEX_ERRORCHECK, "PTHREAD_MUTEX_ERRORCHECK"); + do_test_kind (PTHREAD_MUTEX_RECURSIVE, "PTHREAD_MUTEX_RECURSIVE"); + do_test_kind (PTHREAD_MUTEX_DEFAULT, "PTHREAD_MUTEX_DEFAULT"); + + /* Also test an invalid kind. */ + pthread_mutexattr_t attr; + xpthread_mutexattr_init (&attr); + int ret = pthread_mutexattr_settype (&attr, 123456789); + TEST_COMPARE (ret, EINVAL); + + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/riscv/nofpu/libm-test-ulps b/sysdeps/riscv/nofpu/libm-test-ulps index 9ad64d1d85..cccc864a7a 100644 --- a/sysdeps/riscv/nofpu/libm-test-ulps +++ b/sysdeps/riscv/nofpu/libm-test-ulps @@ -974,7 +974,6 @@ ldouble: 3 Function: "exp10m1": double: 2 -float: 1 ldouble: 1 Function: "exp2": @@ -996,7 +995,6 @@ ldouble: 2 Function: "exp2m1": double: 1 -float: 1 ldouble: 1 Function: "exp_downward": @@ -1013,22 +1011,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1173,27 +1167,22 @@ ldouble: 1 Function: "log10p1": double: 1 -float: 1 ldouble: 3 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 1 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1215,7 +1204,6 @@ ldouble: 1 Function: "log2p1": double: 1 -float: 1 ldouble: 3 Function: "log_downward": @@ -1230,22 +1218,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 1 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1361,22 +1345,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 5 -float: 5 ldouble: 5 Function: "tgamma_towardzero": double: 5 -float: 4 ldouble: 5 Function: "tgamma_upward": double: 4 -float: 4 ldouble: 4 Function: "y0": diff --git a/sysdeps/riscv/rvd/libm-test-ulps b/sysdeps/riscv/rvd/libm-test-ulps index 233186f29a..14fc7633af 100644 --- a/sysdeps/riscv/rvd/libm-test-ulps +++ b/sysdeps/riscv/rvd/libm-test-ulps @@ -977,22 +977,18 @@ ldouble: 3 Function: "exp10m1": double: 4 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 5 -float: 3 ldouble: 6 Function: "exp2": @@ -1014,22 +1010,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_downward": @@ -1046,22 +1038,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1207,42 +1195,34 @@ ldouble: 1 Function: "log10p1": double: 2 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 1 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1264,22 +1244,18 @@ ldouble: 1 Function: "log2p1": double: 2 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_downward": @@ -1294,22 +1270,18 @@ ldouble: 2 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 1 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1431,22 +1403,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 8 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/riscv/start.S b/sysdeps/riscv/start.S index ede186ef23..fd6f1ca038 100644 --- a/sysdeps/riscv/start.S +++ b/sysdeps/riscv/start.S @@ -87,6 +87,7 @@ load_gp: ret .section .preinit_array,"aw" + .align PTRLOG .dc.a load_gp /* Define a symbol for the first piece of initialized data. */ diff --git a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps index e10b5c69ae..288054aafc 100644 --- a/sysdeps/s390/fpu/libm-test-ulps +++ b/sysdeps/s390/fpu/libm-test-ulps @@ -978,22 +978,18 @@ ldouble: 3 Function: "exp10m1": double: 4 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 5 -float: 3 ldouble: 6 Function: "exp2": @@ -1015,22 +1011,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_downward": @@ -1047,22 +1039,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1208,42 +1196,34 @@ ldouble: 1 Function: "log10p1": double: 2 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 1 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1263,22 +1243,18 @@ ldouble: 1 Function: "log2p1": double: 2 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_downward": @@ -1292,22 +1268,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 1 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1429,22 +1401,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/s390/utf16-utf32-z9.c b/sysdeps/s390/utf16-utf32-z9.c index 51dd979607..9ac8a82df8 100644 --- a/sysdeps/s390/utf16-utf32-z9.c +++ b/sysdeps/s390/utf16-utf32-z9.c @@ -397,8 +397,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm ("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm ("7") = outend - outptr; \ unsigned long tmp, tmp2, tmp3; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ @@ -707,8 +707,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm ("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm ("7") = outend - outptr; \ unsigned long tmp, tmp2, tmp3; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ diff --git a/sysdeps/s390/utf8-utf16-z9.c b/sysdeps/s390/utf8-utf16-z9.c index 421747f058..d19fc3c97b 100644 --- a/sysdeps/s390/utf8-utf16-z9.c +++ b/sysdeps/s390/utf8-utf16-z9.c @@ -170,8 +170,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput __asm__ ("8") = inptr; \ register size_t inlen __asm__ ("9") = inend - inptr; \ - register unsigned char* pOutput __asm__ ("10") = outptr; \ - register size_t outlen __asm__("11") = outend - outptr; \ + register unsigned char* pOutput __asm__ ("6") = outptr; \ + register size_t outlen __asm__("7") = outend - outptr; \ unsigned long cc = 0; \ \ __asm__ __volatile__ (".machine push \n\t" \ @@ -242,8 +242,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm("7") = outend - outptr; \ unsigned long tmp, tmp2, tmp3; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ @@ -818,8 +818,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm ("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm ("7") = outend - outptr; \ unsigned long tmp, tmp2, tmp3; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ diff --git a/sysdeps/s390/utf8-utf32-z9.c b/sysdeps/s390/utf8-utf32-z9.c index 9c4189a5f0..e4323d634c 100644 --- a/sysdeps/s390/utf8-utf32-z9.c +++ b/sysdeps/s390/utf8-utf32-z9.c @@ -170,8 +170,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput __asm__ ("8") = inptr; \ register size_t inlen __asm__ ("9") = inend - inptr; \ - register unsigned char* pOutput __asm__ ("10") = outptr; \ - register size_t outlen __asm__("11") = outend - outptr; \ + register unsigned char* pOutput __asm__ ("6") = outptr; \ + register size_t outlen __asm__("7") = outend - outptr; \ unsigned long cc = 0; \ \ __asm__ __volatile__ (".machine push \n\t" \ @@ -475,8 +475,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm("7") = outend - outptr; \ unsigned long tmp, tmp2, tmp3; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ @@ -864,8 +864,8 @@ gconv_end (struct __gconv_step *data) { \ register const unsigned char* pInput asm ("8") = inptr; \ register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm ("11") = outend - outptr; \ + register unsigned char* pOutput asm ("6") = outptr; \ + register size_t outlen asm ("7") = outend - outptr; \ unsigned long tmp, tmp2; \ asm volatile (".machine push\n\t" \ ".machine \"z13\"\n\t" \ diff --git a/sysdeps/sh/libm-test-ulps b/sysdeps/sh/libm-test-ulps index 3c84259941..8562796de8 100644 --- a/sysdeps/sh/libm-test-ulps +++ b/sysdeps/sh/libm-test-ulps @@ -394,11 +394,9 @@ float: 1 Function: "expm1": double: 1 -float: 1 Function: "expm1_towardzero": double: 1 -float: 2 Function: "fma_towardzero": double: 1 @@ -462,11 +460,9 @@ float: 1 Function: "log1p": double: 1 -float: 1 Function: "log1p_towardzero": double: 2 -float: 2 Function: "log2": double: 2 @@ -477,11 +473,9 @@ double: 2 Function: "logp1": double: 1 -float: 1 Function: "logp1_towardzero": double: 2 -float: 2 Function: "pow": double: 1 @@ -532,11 +526,9 @@ float: 2 Function: "tgamma": double: 9 -float: 8 Function: "tgamma_towardzero": double: 9 -float: 7 Function: "y0": double: 3 diff --git a/sysdeps/sparc/fpu/libm-test-ulps b/sysdeps/sparc/fpu/libm-test-ulps index 1bb8b7c5f4..6ea02058e9 100644 --- a/sysdeps/sparc/fpu/libm-test-ulps +++ b/sysdeps/sparc/fpu/libm-test-ulps @@ -978,22 +978,18 @@ ldouble: 3 Function: "exp10m1": double: 3 -float: 2 ldouble: 3 Function: "exp10m1_downward": double: 3 -float: 3 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 ldouble: 6 Function: "exp10m1_upward": double: 4 -float: 4 ldouble: 6 Function: "exp2": @@ -1018,22 +1014,18 @@ ldouble: 2 Function: "exp2m1": double: 2 -float: 2 ldouble: 2 Function: "exp2m1_downward": double: 3 -float: 3 ldouble: 3 Function: "exp2m1_towardzero": double: 3 -float: 2 ldouble: 4 Function: "exp2m1_upward": double: 3 -float: 3 ldouble: 5 Function: "exp_downward": @@ -1050,22 +1042,18 @@ float: 1 Function: "expm1": double: 1 -float: 1 ldouble: 2 Function: "expm1_downward": double: 1 -float: 1 ldouble: 2 Function: "expm1_towardzero": double: 1 -float: 2 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 ldouble: 3 Function: "gamma": @@ -1212,42 +1200,34 @@ ldouble: 1 Function: "log10p1": double: 1 -float: 2 ldouble: 3 Function: "log10p1_downward": double: 2 -float: 3 ldouble: 4 Function: "log10p1_towardzero": double: 3 -float: 2 ldouble: 3 Function: "log10p1_upward": double: 2 -float: 3 ldouble: 4 Function: "log1p": double: 1 -float: 1 ldouble: 3 Function: "log1p_downward": double: 2 -float: 2 ldouble: 3 Function: "log1p_towardzero": double: 2 -float: 2 ldouble: 3 Function: "log1p_upward": double: 2 -float: 2 ldouble: 2 Function: "log2": @@ -1272,22 +1252,18 @@ ldouble: 1 Function: "log2p1": double: 1 -float: 2 ldouble: 3 Function: "log2p1_downward": double: 2 -float: 2 ldouble: 3 Function: "log2p1_towardzero": double: 2 -float: 2 ldouble: 2 Function: "log2p1_upward": double: 2 -float: 2 ldouble: 3 Function: "log_downward": @@ -1305,22 +1281,18 @@ ldouble: 1 Function: "logp1": double: 1 -float: 1 ldouble: 3 Function: "logp1_downward": double: 2 -float: 2 ldouble: 3 Function: "logp1_towardzero": double: 2 -float: 2 ldouble: 3 Function: "logp1_upward": double: 2 -float: 2 ldouble: 2 Function: "pow": @@ -1444,22 +1416,18 @@ ldouble: 3 Function: "tgamma": double: 9 -float: 8 ldouble: 4 Function: "tgamma_downward": double: 9 -float: 7 ldouble: 5 Function: "tgamma_towardzero": double: 9 -float: 7 ldouble: 5 Function: "tgamma_upward": double: 9 -float: 8 ldouble: 4 Function: "y0": diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 59998c7af4..527c7a5ae8 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -95,6 +95,8 @@ sysdep_routines += \ process_vm_writev \ pselect32 \ readahead \ + sched_getattr \ + sched_setattr \ setfsgid \ setfsuid \ setvmaname \ @@ -224,9 +226,11 @@ tests += \ tst-process_mrelease \ tst-quota \ tst-rlimit-infinity \ + tst-sched_setattr \ tst-scm_rights \ tst-sigtimedwait \ tst-sync_file_range \ + tst-syscall-restart \ tst-sysconf-iov_max \ tst-sysvmsg-linux \ tst-sysvsem-linux \ @@ -395,6 +399,16 @@ $(objpfx)tst-mount-compile.out: ../sysdeps/unix/sysv/linux/tst-mount-compile.py < /dev/null > $@ 2>&1; $(evaluate-test) $(objpfx)tst-mount-compile.out: $(sysdeps-linux-python-deps) +tests-special += \ + $(objpfx)tst-sched-consts.out \ + # tests-special +$(objpfx)tst-sched-consts.out: ../sysdeps/unix/sysv/linux/tst-sched-consts.py + $(sysdeps-linux-python) \ + ../sysdeps/unix/sysv/linux/tst-sched-consts.py \ + $(sysdeps-linux-python-cc) \ + < /dev/null > $@ 2>&1; $(evaluate-test) +$(objpfx)tst-sched-consts.out: $(sysdeps-linux-python-deps) + tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0 endif # $(subdir) == misc diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 268ba1b6ac..213ff5f1fe 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -328,6 +328,10 @@ libc { posix_spawnattr_getcgroup_np; posix_spawnattr_setcgroup_np; } + GLIBC_2.41 { + sched_getattr; + sched_setattr; + } GLIBC_PRIVATE { # functions used in other libraries __syscall_rt_sigqueueinfo; diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 68eeca1c08..38db77e4f7 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2748,3 +2748,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist index b685106954..98687cae0d 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist @@ -128,3 +128,8 @@ GLIBC_2.40 _ZGVsMxvv_hypot F GLIBC_2.40 _ZGVsMxvv_hypotf F GLIBC_2.40 _ZGVsMxvv_pow F GLIBC_2.40 _ZGVsMxvv_powf F +GLIBC_2.41 _ZGVnN2v_logp1 F +GLIBC_2.41 _ZGVnN2v_logp1f F +GLIBC_2.41 _ZGVnN4v_logp1f F +GLIBC_2.41 _ZGVsMxv_logp1 F +GLIBC_2.41 _ZGVsMxv_logp1f F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 34c187b721..637bfce9fb 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -3095,6 +3095,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/arc/Makefile b/sysdeps/unix/sysv/linux/arc/Makefile index eca9a9fd3a..dd3da52c39 100644 --- a/sysdeps/unix/sysv/linux/arc/Makefile +++ b/sysdeps/unix/sysv/linux/arc/Makefile @@ -11,12 +11,3 @@ ifeq ($(subdir),misc) sysdep_headers += sys/cachectl.h sysdep_routines += cacheflush endif - -abi-variants := arcle arcbe - -ifeq (,$(filter $(default-abi),$(abi-variants))) -$(error Unknown ABI $(default-abi), must be one of $(abi-variants)) -endif - -abi-arcle-condition := !defined __BIG_ENDIAN__ -abi-arcbe-condition := defined __BIG_ENDIAN__ diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist index 916c18ea94..4a305cf730 100644 --- a/sysdeps/unix/sysv/linux/arc/libc.abilist +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -2509,3 +2509,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/arc/shlib-versions b/sysdeps/unix/sysv/linux/arc/shlib-versions index 343c0a0450..62c1bd57b3 100644 --- a/sysdeps/unix/sysv/linux/arc/shlib-versions +++ b/sysdeps/unix/sysv/linux/arc/shlib-versions @@ -1,7 +1,3 @@ DEFAULT GLIBC_2.32 -%ifdef HAVE_ARC_BE -ld=ld-linux-arceb.so.2 -%else ld=ld-linux-arc.so.2 -%endif diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index ea95de282a..1d54f71b14 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -2801,6 +2801,8 @@ GLIBC_2.4 xdrstdio_create F GLIBC_2.4 xencrypt F GLIBC_2.4 xprt_register F GLIBC_2.4 xprt_unregister F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/arm/bits/hwcap.h b/sysdeps/unix/sysv/linux/arm/bits/hwcap.h index b104de473c..7b573facb9 100644 --- a/sysdeps/unix/sysv/linux/arm/bits/hwcap.h +++ b/sysdeps/unix/sysv/linux/arm/bits/hwcap.h @@ -49,3 +49,11 @@ #define HWCAP_ASIMDFHM 33554432 #define HWCAP_ASIMDBF16 67108864 #define HWCAP_I8MM 134217728 + +#define HWCAP2_AES 1 +#define HWCAP2_PMULL 2 +#define HWCAP2_SHA1 4 +#define HWCAP2_SHA2 8 +#define HWCAP2_CRC32 16 +#define HWCAP2_SB 32 +#define HWCAP2_SSBS 64 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index 1cdbc983e1..ff7e8bc40b 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -2798,6 +2798,8 @@ GLIBC_2.4 xdrstdio_create F GLIBC_2.4 xencrypt F GLIBC_2.4 xprt_register F GLIBC_2.4 xprt_unregister F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h index 522333c50a..161a885096 100644 --- a/sysdeps/unix/sysv/linux/bits/mman-linux.h +++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h @@ -43,6 +43,7 @@ #define MAP_PRIVATE 0x02 /* Changes are private. */ #define MAP_SHARED_VALIDATE 0x03 /* Share changes and validate extension flags. */ +#define MAP_DROPPABLE 0x08 /* Zero memory under memory pressure. */ #define MAP_TYPE 0x0f /* Mask for type of mapping. */ /* Other flags. */ diff --git a/sysdeps/unix/sysv/linux/bits/mman-shared.h b/sysdeps/unix/sysv/linux/bits/mman-shared.h index d8ed4436b6..7a9874204d 100644 --- a/sysdeps/unix/sysv/linux/bits/mman-shared.h +++ b/sysdeps/unix/sysv/linux/bits/mman-shared.h @@ -42,7 +42,7 @@ # define MLOCK_ONFAULT 1U # endif -/* Access rights for pkey_alloc. */ +/* Access restrictions for pkey_alloc. */ # ifndef PKEY_DISABLE_ACCESS # define PKEY_DISABLE_ACCESS 0x1 # define PKEY_DISABLE_WRITE 0x2 @@ -59,16 +59,16 @@ int memfd_create (const char *__name, unsigned int __flags) __THROW; int mlock2 (const void *__addr, size_t __length, unsigned int __flags) __THROW; /* Allocate a new protection key, with the PKEY_DISABLE_* bits - specified in ACCESS_RIGHTS. The protection key mask for the + specified in ACCESS_RESTRICTIONS. The protection key mask for the current thread is updated to match the access privilege for the new key. */ -int pkey_alloc (unsigned int __flags, unsigned int __access_rights) __THROW; +int pkey_alloc (unsigned int __flags, unsigned int __access_restrictions) __THROW; -/* Update the access rights for the current thread for KEY, which must +/* Update the access restrictions for the current thread for KEY, which must have been allocated using pkey_alloc. */ -int pkey_set (int __key, unsigned int __access_rights) __THROW; +int pkey_set (int __key, unsigned int __access_restrictions) __THROW; -/* Return the access rights for the current thread for KEY, which must +/* Return the access restrictions for the current thread for KEY, which must have been allocated using pkey_alloc. */ int pkey_get (int __key) __THROW; diff --git a/sysdeps/unix/sysv/linux/bits/sched.h b/sysdeps/unix/sysv/linux/bits/sched.h index a53e1362a0..f03f5f5ab3 100644 --- a/sysdeps/unix/sysv/linux/bits/sched.h +++ b/sysdeps/unix/sysv/linux/bits/sched.h @@ -29,15 +29,60 @@ #define SCHED_FIFO 1 #define SCHED_RR 2 #ifdef __USE_GNU +# define SCHED_NORMAL 0 # define SCHED_BATCH 3 # define SCHED_ISO 4 # define SCHED_IDLE 5 # define SCHED_DEADLINE 6 +/* Flags that can be used in policy values. */ # define SCHED_RESET_ON_FORK 0x40000000 -#endif -#ifdef __USE_GNU +/* Flags for the sched_flags field in struct sched_attr. */ +#define SCHED_FLAG_RESET_ON_FORK 0x01 +#define SCHED_FLAG_RECLAIM 0x02 +#define SCHED_FLAG_DL_OVERRUN 0x04 +#define SCHED_FLAG_KEEP_POLICY 0x08 +#define SCHED_FLAG_KEEP_PARAMS 0x10 +#define SCHED_FLAG_UTIL_CLAMP_MIN 0x20 +#define SCHED_FLAG_UTIL_CLAMP_MAX 0x40 + +/* Combinations of sched_flags fields. */ +#define SCHED_FLAG_KEEP_ALL \ + (SCHED_FLAG_KEEP_POLICY | SCHED_FLAG_KEEP_PARAMS) +#define SCHED_FLAG_UTIL_CLAMP \ + (SCHED_FLAG_UTIL_CLAMP_MIN | SCHED_FLAG_UTIL_CLAMP_MAX) + +/* Use "" to work around incorrect macro expansion of the + __has_include argument (GCC PR 80005). */ +# ifdef __has_include +# if __has_include ("linux/sched/types.h") +/* Some older Linux versions defined sched_param in <linux/sched/types.h>. */ +# define sched_param __glibc_mask_sched_param +# include <linux/sched/types.h> +# undef sched_param +# endif +# endif +# ifndef SCHED_ATTR_SIZE_VER0 +# include <linux/types.h> +# define SCHED_ATTR_SIZE_VER0 48 +# define SCHED_ATTR_SIZE_VER1 56 +struct sched_attr +{ + __u32 size; + __u32 sched_policy; + __u64 sched_flags; + __s32 sched_nice; + __u32 sched_priority; + __u64 sched_runtime; + __u64 sched_deadline; + __u64 sched_period; + __u32 sched_util_min; + __u32 sched_util_max; + /* Additional fields may be added at the end. */ +}; +# endif /* !SCHED_ATTR_SIZE_VER0 */ + /* Cloning flags. */ # define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */ # define CLONE_VM 0x00000100 /* Set if VM shared between processes. */ @@ -97,6 +142,17 @@ extern int getcpu (unsigned int *, unsigned int *) __THROW; /* Switch process to namespace of type NSTYPE indicated by FD. */ extern int setns (int __fd, int __nstype) __THROW; + +/* Apply the scheduling attributes from *ATTR to the process or thread TID. */ +int sched_setattr (pid_t tid, struct sched_attr *attr, unsigned int flags) + __THROW __nonnull ((2)); + +/* Obtain the scheduling attributes of the process or thread TID and + store it in *ATTR. */ +int sched_getattr (pid_t tid, struct sched_attr *attr, unsigned int size, + unsigned int flags) + __THROW __nonnull ((2)) __attr_access ((__write_only__, 2, 3)); + #endif __END_DECLS diff --git a/sysdeps/unix/sysv/linux/bits/uio-ext.h b/sysdeps/unix/sysv/linux/bits/uio-ext.h index ead7a09156..85ed21bac5 100644 --- a/sysdeps/unix/sysv/linux/bits/uio-ext.h +++ b/sysdeps/unix/sysv/linux/bits/uio-ext.h @@ -48,6 +48,8 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, #define RWF_NOWAIT 0x00000008 /* per-IO nonblocking mode. */ #define RWF_APPEND 0x00000010 /* per-IO O_APPEND. */ #define RWF_NOAPPEND 0x00000020 /* per-IO negation of O_APPEND */ +#define RWF_ATOMIC 0x00000040 /* Write is to be issued with torn-write + prevention. */ __END_DECLS diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure index 4d642e953b..8cda8e9451 100644..100755 --- a/sysdeps/unix/sysv/linux/configure +++ b/sysdeps/unix/sysv/linux/configure @@ -1,3 +1,4 @@ +ac_default_prefix=/usr # This file is generated from configure.ac by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/unix/sysv/linux. @@ -116,7 +117,9 @@ if test -n "$sysheaders"; then CPPFLAGS=$OLD_CPPFLAGS fi -if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then + + +if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/"; then if test $enable_sanity = yes; then echo "\ *** On GNU/Linux systems the GNU C Library should not be installed into diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac index c177e082a9..4c43cda877 100644 --- a/sysdeps/unix/sysv/linux/configure.ac +++ b/sysdeps/unix/sysv/linux/configure.ac @@ -71,7 +71,9 @@ if test -n "$sysheaders"; then CPPFLAGS=$OLD_CPPFLAGS fi -if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then +AC_PREFIX_DEFAULT([/usr]) + +if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/"; then if test $enable_sanity = yes; then echo "\ *** On GNU/Linux systems the GNU C Library should not be installed into diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 96d45961e2..c3ed65467d 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2785,3 +2785,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c index 227fbf21ae..795bd935f0 100644 --- a/sysdeps/unix/sysv/linux/getdents64.c +++ b/sysdeps/unix/sysv/linux/getdents64.c @@ -33,100 +33,3 @@ __getdents64 (int fd, void *buf, size_t nbytes) } libc_hidden_def (__getdents64) weak_alias (__getdents64, getdents64) - -#if _DIRENT_MATCHES_DIRENT64 -strong_alias (__getdents64, __getdents) -#else -# include <shlib-compat.h> - -# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) -# include <olddirent.h> -# include <unistd.h> - -static ssize_t -handle_overflow (int fd, __off64_t offset, ssize_t count) -{ - /* If this is the first entry in the buffer, we can report the - error. */ - if (offset == 0) - { - __set_errno (EOVERFLOW); - return -1; - } - - /* Otherwise, seek to the overflowing entry, so that the next call - will report the error, and return the data read so far. */ - if (__lseek64 (fd, offset, SEEK_SET) != 0) - return -1; - return count; -} - -ssize_t -__old_getdents64 (int fd, char *buf, size_t nbytes) -{ - /* We do not move the individual directory entries. This is only - possible if the target type (struct __old_dirent64) is smaller - than the source type. */ - _Static_assert (offsetof (struct __old_dirent64, d_name) - <= offsetof (struct dirent64, d_name), - "__old_dirent64 is larger than dirent64"); - _Static_assert (__alignof__ (struct __old_dirent64) - <= __alignof__ (struct dirent64), - "alignment of __old_dirent64 is larger than dirent64"); - - ssize_t retval = INLINE_SYSCALL_CALL (getdents64, fd, buf, nbytes); - if (retval > 0) - { - /* This is the marker for the first entry. Offset 0 is reserved - for the first entry (see rewinddir). Here, we use it as a - marker for the first entry in the buffer. We never actually - seek to offset 0 because handle_overflow reports the error - directly, so it does not matter that the offset is incorrect - if entries have been read from the descriptor before (so that - the descriptor is not actually at offset 0). */ - __off64_t previous_offset = 0; - - char *p = buf; - char *end = buf + retval; - while (p < end) - { - struct dirent64 *source = (struct dirent64 *) p; - - /* Copy out the fixed-size data. */ - __ino_t ino = source->d_ino; - __off64_t offset = source->d_off; - unsigned int reclen = source->d_reclen; - unsigned char type = source->d_type; - - /* Check for ino_t overflow. */ - if (__glibc_unlikely (ino != source->d_ino)) - return handle_overflow (fd, previous_offset, p - buf); - - /* Convert to the target layout. Use a separate struct and - memcpy to side-step aliasing issues. */ - struct __old_dirent64 result; - result.d_ino = ino; - result.d_off = offset; - result.d_reclen = reclen; - result.d_type = type; - - /* Write the fixed-sized part of the result to the - buffer. */ - size_t result_name_offset = offsetof (struct __old_dirent64, d_name); - memcpy (p, &result, result_name_offset); - - /* Adjust the position of the name if necessary. Copy - everything until the end of the record, including the - terminating NUL byte. */ - if (result_name_offset != offsetof (struct dirent64, d_name)) - memmove (p + result_name_offset, source->d_name, - reclen - offsetof (struct dirent64, d_name)); - - p += reclen; - previous_offset = offset; - } - } - return retval; -} -# endif /* SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) */ -#endif /* _DIRENT_MATCHES_DIRENT64 */ diff --git a/sysdeps/unix/sysv/linux/gettimeofday.c b/sysdeps/unix/sysv/linux/gettimeofday.c index 7ab147c614..5ca8916611 100644 --- a/sysdeps/unix/sysv/linux/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/gettimeofday.c @@ -37,11 +37,11 @@ __gettimeofday_syscall (struct timeval *restrict tv, void *restrict tz) } # undef INIT_ARCH -# define INIT_ARCH() \ - void *vdso_gettimeofday = dl_vdso_vsym (HAVE_GETTIMEOFDAY_VSYSCALL) +# define INIT_ARCH() libc_ifunc (__gettimeofday, - vdso_gettimeofday ? VDSO_IFUNC_RET (vdso_gettimeofday) - : (void *) __gettimeofday_syscall) + GLRO(dl_vdso_gettimeofday) != NULL + ? VDSO_IFUNC_RET (GLRO(dl_vdso_gettimeofday)) + : (void *) __gettimeofday_syscall) # else int diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index fbcd60c2b3..8de7644a59 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2821,6 +2821,8 @@ GLIBC_2.4 sys_errlist D 0x400 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index c989b433c0..4fedf775d4 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -3005,6 +3005,8 @@ GLIBC_2.4 sys_errlist D 0x210 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/include/bits/mman-shared.h b/sysdeps/unix/sysv/linux/include/bits/mman-shared.h new file mode 100644 index 0000000000..7c14b5df3c --- /dev/null +++ b/sysdeps/unix/sysv/linux/include/bits/mman-shared.h @@ -0,0 +1,16 @@ +#include <sysdeps/unix/sysv/linux/bits/mman-shared.h> + +#ifndef _ISOMAC + +extern __typeof (pkey_alloc) __pkey_alloc; +libc_hidden_proto (__pkey_alloc) +extern __typeof (pkey_free) __pkey_free; +libc_hidden_proto (__pkey_free) +extern __typeof (pkey_mprotect) __pkey_mprotect; +libc_hidden_proto (__pkey_mprotect) +extern __typeof (pkey_get) __pkey_get; +libc_hidden_proto (__pkey_get) +extern __typeof (pkey_set) __pkey_set; +libc_hidden_proto (__pkey_set) + +#endif diff --git a/sysdeps/unix/sysv/linux/internal-signals.h b/sysdeps/unix/sysv/linux/internal-signals.h index a6fae59aaa..6e3a3d7692 100644 --- a/sysdeps/unix/sysv/linux/internal-signals.h +++ b/sysdeps/unix/sysv/linux/internal-signals.h @@ -90,6 +90,15 @@ internal_signal_restore_set (const internal_sigset_t *set) __NSIG_BYTES); } +static inline void +internal_signal_unblock_signal (int sig) +{ + internal_sigset_t set; + internal_sigemptyset (&set); + internal_sigaddset (&set, sig); + INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_UNBLOCK, &set, NULL, + __NSIG_BYTES); +} /* It is used on timer_create code directly on sigwaitinfo call, so it can not use the internal_sigset_t definitions. */ diff --git a/sysdeps/unix/sysv/linux/internal-sigset.h b/sysdeps/unix/sysv/linux/internal-sigset.h index 5d7020b42d..4b19affd75 100644 --- a/sysdeps/unix/sysv/linux/internal-sigset.h +++ b/sysdeps/unix/sysv/linux/internal-sigset.h @@ -21,7 +21,7 @@ #include <sigsetops.h> -typedef struct +typedef struct _internal_sigset_t { unsigned long int __val[__NSIG_WORDS]; } internal_sigset_t; diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/rseq.h b/sysdeps/unix/sysv/linux/loongarch/bits/rseq.h new file mode 100644 index 0000000000..7468a05243 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/bits/rseq.h @@ -0,0 +1,36 @@ +/* Restartable Sequences Linux LoongArch architecture header. + Copyright (C) 2024 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_RSEQ_H +# error "Never use <bits/rseq.h> directly; include <sys/rseq.h> instead." +#endif + +/* RSEQ_SIG is a signature required before each abort handler code. + + It is a 32-bit value that maps to actual architecture code compiled + into applications and libraries. It needs to be defined for each + architecture. When choosing this value, it needs to be taken into + account that generating invalid instructions may have ill effects on + tools like objdump, and may also have impact on the CPU speculative + execution efficiency in some cases. + + RSEQ_SIG uses the following break instruction: + + 0x002a0010 break 0x10 +*/ + +#define RSEQ_SIG 0x002a0010 diff --git a/sysdeps/unix/sysv/linux/loongarch/fixup-asm-unistd.h b/sysdeps/unix/sysv/linux/loongarch/fixup-asm-unistd.h new file mode 100644 index 0000000000..0062756b5c --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/fixup-asm-unistd.h @@ -0,0 +1,21 @@ +/* Regularize <asm/unistd.h> definitions. LoongArch version. + Copyright (C) 2024 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* To avoid the messy usage of the fstat, newfstatat, and statx system calls, we +only use statx. */ +#undef __NR_fstat +#undef __NR_newfstatat diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist index 0023ec1fa1..0024282289 100644 --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist @@ -2269,3 +2269,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index d9bd6a9b56..142595eb3e 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -2781,6 +2781,8 @@ GLIBC_2.4 xdrstdio_create F GLIBC_2.4 xencrypt F GLIBC_2.4 xprt_register F GLIBC_2.4 xprt_unregister F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index 439796d693..85e7746c10 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2948,6 +2948,8 @@ GLIBC_2.4 sys_errlist D 0x210 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index 1069d3252c..91dc1b8378 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2834,3 +2834,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 17abe08c8b..3440e90f6f 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2831,3 +2831,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 799e508950..5ee7b8c52f 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2909,6 +2909,8 @@ GLIBC_2.4 renameat F GLIBC_2.4 symlinkat F GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 1c10996cbc..6cb6328e7c 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2907,6 +2907,8 @@ GLIBC_2.4 renameat F GLIBC_2.4 symlinkat F GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 03d9655f26..ae7474c0f0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2915,6 +2915,8 @@ GLIBC_2.4 renameat F GLIBC_2.4 symlinkat F GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 05e402ed30..cdf040dec2 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2817,6 +2817,8 @@ GLIBC_2.4 renameat F GLIBC_2.4 symlinkat F GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/nios2/arch-syscall.h b/sysdeps/unix/sysv/linux/nios2/arch-syscall.h index f94e212995..b1d0fb6f6e 100644 --- a/sysdeps/unix/sysv/linux/nios2/arch-syscall.h +++ b/sysdeps/unix/sysv/linux/nios2/arch-syscall.h @@ -24,6 +24,7 @@ #define __NR_clock_settime 112 #define __NR_clock_settime64 404 #define __NR_clone 220 +#define __NR_clone3 435 #define __NR_close 57 #define __NR_close_range 436 #define __NR_connect 203 diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index 3aa81766aa..773d4c5873 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2873,3 +2873,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/olddirent.h b/sysdeps/unix/sysv/linux/olddirent.h index 239f790648..065ca41a6e 100644 --- a/sysdeps/unix/sysv/linux/olddirent.h +++ b/sysdeps/unix/sysv/linux/olddirent.h @@ -34,8 +34,6 @@ extern struct __old_dirent64 *__old_readdir64 (DIR *__dirp); libc_hidden_proto (__old_readdir64); extern int __old_readdir64_r (DIR *__dirp, struct __old_dirent64 *__entry, struct __old_dirent64 **__result); -extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes) - attribute_hidden; int __old_scandir64 (const char * __dir, struct __old_dirent64 *** __namelist, int (*__selector) (const struct __old_dirent64 *), diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist index 959e59e7e7..c356a11b1c 100644 --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist @@ -2259,3 +2259,5 @@ GLIBC_2.40 getcontext F GLIBC_2.40 makecontext F GLIBC_2.40 setcontext F GLIBC_2.40 swapcontext F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/pkey_get.c b/sysdeps/unix/sysv/linux/pkey_get.c index 743bd09268..ed9b6297d1 100644 --- a/sysdeps/unix/sysv/linux/pkey_get.c +++ b/sysdeps/unix/sysv/linux/pkey_get.c @@ -17,10 +17,13 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> +#include <sys/mman.h> int -pkey_get (int key) +__pkey_get (int key) { __set_errno (ENOSYS); return -1; } +libc_hidden_def (__pkey_get) +weak_alias (__pkey_get, pkey_get) diff --git a/sysdeps/unix/sysv/linux/pkey_mprotect.c b/sysdeps/unix/sysv/linux/pkey_mprotect.c index b7afa7946d..e321a7eb1b 100644 --- a/sysdeps/unix/sysv/linux/pkey_mprotect.c +++ b/sysdeps/unix/sysv/linux/pkey_mprotect.c @@ -22,7 +22,7 @@ #include <sysdep.h> int -pkey_mprotect (void *addr, size_t len, int prot, int pkey) +__pkey_mprotect (void *addr, size_t len, int prot, int pkey) { if (pkey == -1) /* If the key is -1, the system call is precisely equivalent to @@ -30,3 +30,5 @@ pkey_mprotect (void *addr, size_t len, int prot, int pkey) return __mprotect (addr, len, prot); return INLINE_SYSCALL_CALL (pkey_mprotect, addr, len, prot, pkey); } +libc_hidden_def (__pkey_mprotect) +weak_alias (__pkey_mprotect, pkey_mprotect) diff --git a/sysdeps/unix/sysv/linux/pkey_set.c b/sysdeps/unix/sysv/linux/pkey_set.c index d5d59e3031..9cb14af0ec 100644 --- a/sysdeps/unix/sysv/linux/pkey_set.c +++ b/sysdeps/unix/sysv/linux/pkey_set.c @@ -17,10 +17,13 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> +#include <sys/mman.h> int -pkey_set (int key, unsigned int access_rights) +__pkey_set (int key, unsigned int access_restrictions) { __set_errno (ENOSYS); return -1; } +libc_hidden_def (__pkey_set) +weak_alias (__pkey_set, pkey_set) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 9714305608..7937f94cf0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -3138,6 +3138,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 0beb52c542..d6e35f31d2 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -3183,6 +3183,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index cfc2ebd3ec..2268d6890d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -2892,6 +2892,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S index 164311d2bd..e57cb6e82e 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S @@ -56,7 +56,6 @@ ENTRY (__clone) /* Save fn, args, stack across syscall. */ mr r30,r3 /* Function in r30. */ - mr r29,r5 /* Flags in r29. */ mr r31,r6 /* Argument in r31. */ /* 'flags' argument is first parameter to clone syscall. @@ -77,14 +76,12 @@ ENTRY (__clone) CHECK_SCV_SUPPORT r28 0f /* This is equivalent to DO_CALL_SCV, but we cannot use the macro here because it uses CFI directives and we just called cfi_endproc. */ - mflr r9 - std r9,FRAME_LR_SAVE(r1) + mflr r29 .machine "push" .machine "power9" scv 0 .machine "pop" - ld r9,FRAME_LR_SAVE(r1) - mtlr r9 + mtlr r29 /* Check for child process. */ /* When using scv, error is indicated by negative r3. */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone3.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone3.S index 900c354c9c..913f341d7d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone3.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone3.S @@ -39,14 +39,12 @@ because it uses CFI directives and we just called cfi_endproc. */ # define DO_CLONE3_SVC_CALL(jumpfalse) \ CHECK_SCV_SUPPORT r28 jumpfalse; \ - mflr r9; \ - std r9, FRAME_LR_SAVE(r1); \ + mflr r31; \ .machine "push"; \ .machine "power9"; \ scv 0; \ .machine "pop"; \ - ld r9, FRAME_LR_SAVE(r1); \ - mtlr r9; \ + mtlr r31; \ /* With scv an, an error is a value -4095 <= x < 0. */ \ cmpdi cr1, r3, 0; \ b 1f; @@ -66,13 +64,15 @@ ENTRY(__clone3) /* Save some regs in the "red zone". */ #ifdef USE_PPC_SCV - std r28, -24(r1) - cfi_offset (r28, -24) + std r28, -32(r1) + cfi_offset (r28, -32) #endif - std r29, -16(r1) - std r30, -8(r1) - cfi_offset (r29, -16) - cfi_offset (r30, -8) + std r29, -24(r1) + std r30, -16(r1) + std r31, -8(r1) + cfi_offset (r29, -24) + cfi_offset (r30, -16) + cfi_offset (r31, -8) /* Save func and arg across syscall. */ mr r30, r5 /* Function in r30. */ @@ -132,16 +132,19 @@ L(parent): /* Parent. Restore registers & return. */ #ifdef USE_PPC_SCV - cfi_offset (r28, -24) - ld r28, -24(r1) + cfi_offset (r28, -32) + ld r28, -32(r1) cfi_restore (r28) #endif - cfi_offset (r29,-16) - cfi_offset (r30,-8) - ld r29, -16(r1) - ld r30, -8(r1) + cfi_offset (r29,-24) + cfi_offset (r30,-16) + cfi_offset (r31,-8) + ld r29, -24(r1) + ld r30, -16(r1) + ld r31, -8(r1) cfi_restore (r29) cfi_restore (r30) + cfi_restore (r31) #ifdef USE_PPC_SCV beq cr1, 0f diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index 8c9efc5a16..7f61b14bc8 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -2968,3 +2968,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c index 217ecd004f..ac9ea3a1c1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c @@ -21,7 +21,7 @@ #include <sys/mman.h> int -pkey_get (int key) +__pkey_get (int key) { if (key < 0 || key > PKEY_MAX) { @@ -40,3 +40,5 @@ pkey_get (int key) return PKEY_DISABLE_WRITE; return 0; } +libc_hidden_def (__pkey_get) +weak_alias (__pkey_get, pkey_get) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c index cc67b0acff..ac10b5de22 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c @@ -21,7 +21,7 @@ #include <sys/mman.h> int -pkey_set (int key, unsigned int rights) +__pkey_set (int key, unsigned int rights) { if (key < 0 || key > PKEY_MAX || rights > 3) { @@ -46,3 +46,5 @@ pkey_set (int key, unsigned int rights) pkey_write (amr); return 0; } +libc_hidden_def (__pkey_set) +weak_alias (__pkey_set, pkey_set) diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c index e6f5108c0a..e6b8867b7a 100644 --- a/sysdeps/unix/sysv/linux/readdir64.c +++ b/sysdeps/unix/sysv/linux/readdir64.c @@ -26,17 +26,13 @@ #undef __readdir #undef readdir -/* Read a directory entry from DIRP. */ -struct dirent64 * -__readdir64 (DIR *dirp) +/* Read a directory entry from DIRP. No locking. */ +static struct dirent64 * +__readdir64_unlocked (DIR *dirp) { struct dirent64 *dp; int saved_errno = errno; -#if IS_IN (libc) - __libc_lock_lock (dirp->lock); -#endif - if (dirp->offset >= dirp->size) { /* We've emptied out our buffer. Refill it. */ @@ -53,9 +49,6 @@ __readdir64 (DIR *dirp) do not set errno in that case, to indicate success. */ if (bytes == 0 || errno == ENOENT) __set_errno (saved_errno); -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif return NULL; } dirp->size = (size_t) bytes; @@ -68,10 +61,16 @@ __readdir64 (DIR *dirp) dirp->offset += dp->d_reclen; dirp->filepos = dp->d_off; -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif + return dp; +} +/* Read a directory entry from DIRP. */ +struct dirent64 * +__readdir64 (DIR *dirp) +{ + __libc_lock_lock (dirp->lock); + struct dirent64 *dp = __readdir64_unlocked (dirp); + __libc_lock_unlock (dirp->lock); return dp; } libc_hidden_def (__readdir64) @@ -99,45 +98,54 @@ __old_readdir64 (DIR *dirp) struct __old_dirent64 *dp; int saved_errno = errno; -#if IS_IN (libc) __libc_lock_lock (dirp->lock); -#endif - if (dirp->offset >= dirp->size) + while (1) { - /* We've emptied out our buffer. Refill it. */ + errno = 0; + struct dirent64 *newdp = __readdir64_unlocked (dirp); + if (newdp == NULL) + { + if (errno == 0 && dirp->errcode != 0) + __set_errno (dirp->errcode); + else if (errno == 0) + __set_errno (saved_errno); + dp = NULL; + break; + } - size_t maxread = dirp->allocation; - ssize_t bytes; + /* Convert to the target layout. Use a separate struct and + memcpy to side-step aliasing issues. */ + struct __old_dirent64 result; + result.d_ino = newdp->d_ino; + result.d_off = newdp->d_off; + result.d_reclen = newdp->d_reclen; + result.d_type = newdp->d_type; - bytes = __old_getdents64 (dirp->fd, dirp->data, maxread); - if (bytes <= 0) + /* Check for ino_t overflow. */ + if (__glibc_unlikely (result.d_ino != newdp->d_ino)) { - /* Linux may fail with ENOENT on some file systems if the - directory inode is marked as dead (deleted). POSIX - treats this as a regular end-of-directory condition, so - do not set errno in that case, to indicate success. */ - if (bytes == 0 || errno == ENOENT) - __set_errno (saved_errno); -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif - return NULL; + dirp->errcode = ENAMETOOLONG; + continue; } - dirp->size = (size_t) bytes; - /* Reset the offset into the buffer. */ - dirp->offset = 0; - } + /* Overwrite the fixed-sized part. */ + dp = (struct __old_dirent64 *) newdp; + memcpy (dp, &result, offsetof (struct __old_dirent64, d_name)); - dp = (struct __old_dirent64 *) &dirp->data[dirp->offset]; - dirp->offset += dp->d_reclen; - dirp->filepos = dp->d_off; + /* Move the name. */ + _Static_assert (offsetof (struct __old_dirent64, d_name) + <= offsetof (struct dirent64, d_name), + "old struct must be smaller"); + if (offsetof (struct __old_dirent64, d_name) + != offsetof (struct dirent64, d_name)) + memmove (dp->d_name, newdp->d_name, strlen (newdp->d_name) + 1); -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif + __set_errno (saved_errno); + break; + } + __libc_lock_unlock (dirp->lock); return dp; } libc_hidden_def (__old_readdir64) diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c index e87882ee06..c42a161ffc 100644 --- a/sysdeps/unix/sysv/linux/readdir64_r.c +++ b/sysdeps/unix/sysv/linux/readdir64_r.c @@ -37,7 +37,7 @@ __readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) __libc_lock_lock (dirp->lock); - do + while (1) { if (dirp->offset >= dirp->size) { @@ -79,26 +79,21 @@ __readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) dirp->filepos = dp->d_off; - if (reclen > offsetof (struct dirent64, d_name) + NAME_MAX + 1) + if (reclen <= offsetof (struct dirent64, d_name) + NAME_MAX + 1) + break; + + /* The record is very long. It could still fit into the + caller-supplied buffer if we can skip padding at the end. */ + size_t namelen = _D_EXACT_NAMLEN (dp); + if (namelen <= NAME_MAX) { - /* The record is very long. It could still fit into the - caller-supplied buffer if we can skip padding at the - end. */ - size_t namelen = _D_EXACT_NAMLEN (dp); - if (namelen <= NAME_MAX) - reclen = offsetof (struct dirent64, d_name) + namelen + 1; - else - { - /* The name is too long. Ignore this file. */ - dirp->errcode = ENAMETOOLONG; - dp->d_ino = 0; - continue; - } + reclen = offsetof (struct dirent64, d_name) + namelen + 1; + break; } - /* Skip deleted and ignored files. */ + /* The name is too long. Ignore this file. */ + dirp->errcode = ENAMETOOLONG; } - while (dp->d_ino == 0); if (dp != NULL) { @@ -135,91 +130,37 @@ attribute_compat_text_section __old_readdir64_r (DIR *dirp, struct __old_dirent64 *entry, struct __old_dirent64 **result) { - struct __old_dirent64 *dp; - size_t reclen; - const int saved_errno = errno; - int ret; - - __libc_lock_lock (dirp->lock); - - do + while (1) { - if (dirp->offset >= dirp->size) - { - /* We've emptied out our buffer. Refill it. */ - - size_t maxread = dirp->allocation; - ssize_t bytes; - - maxread = dirp->allocation; - - bytes = __old_getdents64 (dirp->fd, dirp->data, maxread); - if (bytes <= 0) - { - /* On some systems getdents fails with ENOENT when the - open directory has been rmdir'd already. POSIX.1 - requires that we treat this condition like normal EOF. */ - if (bytes < 0 && errno == ENOENT) - { - bytes = 0; - __set_errno (saved_errno); - } - if (bytes < 0) - dirp->errcode = errno; - - dp = NULL; - break; - } - dirp->size = (size_t) bytes; + struct dirent64 new_entry; + struct dirent64 *newp; + int ret = __readdir64_r (dirp, &new_entry, &newp); - /* Reset the offset into the buffer. */ - dirp->offset = 0; + if (ret != 0) + return ret; + else if (newp == NULL) + { + *result = NULL; + return 0; } - - dp = (struct __old_dirent64 *) &dirp->data[dirp->offset]; - - reclen = dp->d_reclen; - - dirp->offset += reclen; - - dirp->filepos = dp->d_off; - - if (reclen > offsetof (struct __old_dirent64, d_name) + NAME_MAX + 1) + else { - /* The record is very long. It could still fit into the - caller-supplied buffer if we can skip padding at the - end. */ - size_t namelen = _D_EXACT_NAMLEN (dp); - if (namelen <= NAME_MAX) - reclen = offsetof (struct __old_dirent64, d_name) + namelen + 1; - else + entry->d_ino = newp->d_ino; + if (entry->d_ino != newp->d_ino) { - /* The name is too long. Ignore this file. */ - dirp->errcode = ENAMETOOLONG; - dp->d_ino = 0; + dirp->errcode = EOVERFLOW; continue; } + size_t namelen = strlen (newp->d_name); + entry->d_off = newp->d_off; + entry->d_reclen = (offsetof (struct __old_dirent64, d_name) + + namelen + 1); + entry->d_type = newp->d_type; + memcpy (entry->d_name, newp->d_name, namelen + 1); + *result = entry; + return 0; } - - /* Skip deleted and ignored files. */ } - while (dp->d_ino == 0); - - if (dp != NULL) - { - *result = memcpy (entry, dp, reclen); - entry->d_reclen = reclen; - ret = 0; - } - else - { - *result = NULL; - ret = dirp->errcode; - } - - __libc_lock_unlock (dirp->lock); - - return ret; } compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1); diff --git a/sysdeps/unix/sysv/linux/readdir_r.c b/sysdeps/unix/sysv/linux/readdir_r.c index ffd5262cf5..1d595688f7 100644 --- a/sysdeps/unix/sysv/linux/readdir_r.c +++ b/sysdeps/unix/sysv/linux/readdir_r.c @@ -25,14 +25,22 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) { struct dirent *dp; size_t reclen; + int saved_errno = errno; __libc_lock_lock (dirp->lock); while (1) { + /* If errno is changed from 0, the NULL return value indicates + an actual error. It overrides a pending ENAMETOOLONG error. */ + __set_errno (0); dp = __readdir_unlocked (dirp); if (dp == NULL) - break; + { + if (errno != 0) + dirp->errcode = errno; + break; + } reclen = dp->d_reclen; if (reclen <= offsetof (struct dirent, d_name) + NAME_MAX + 1) @@ -61,6 +69,7 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) __libc_lock_unlock (dirp->lock); + __set_errno (saved_errno); return dp != NULL ? 0 : dirp->errcode; } diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist index 6397a9cb91..4187241f50 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist @@ -2512,3 +2512,5 @@ GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F GLIBC_2.40 __riscv_hwprobe F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index 71bbf94f66..8935beccac 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2712,3 +2712,5 @@ GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F GLIBC_2.40 __riscv_hwprobe F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index a7467e2850..e69dc7ccf6 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -3136,6 +3136,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index fd1cb2972d..7d860001d8 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2929,6 +2929,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/sched_getattr.c b/sysdeps/unix/sysv/linux/sched_getattr.c new file mode 100644 index 0000000000..e6b9970fcb --- /dev/null +++ b/sysdeps/unix/sysv/linux/sched_getattr.c @@ -0,0 +1,27 @@ +/* Reading scheduling policy and attributes. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sched.h> +#include <sysdep.h> + +int +sched_getattr (pid_t pid, struct sched_attr *attr, unsigned int size, + unsigned int flags) +{ + return INLINE_SYSCALL_CALL (sched_getattr, pid, attr, size, flags); +} diff --git a/sysdeps/unix/sysv/linux/sched_setattr.c b/sysdeps/unix/sysv/linux/sched_setattr.c new file mode 100644 index 0000000000..25403fb454 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sched_setattr.c @@ -0,0 +1,26 @@ +/* Setting scheduling policy and attributes. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sched.h> +#include <sysdep.h> + +int +sched_setattr (pid_t pid, struct sched_attr *attr, unsigned int flags) +{ + return INLINE_SYSCALL_CALL (sched_setattr, pid, attr, flags); +} diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index ff6e6b1a13..fcb8161841 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2828,6 +2828,8 @@ GLIBC_2.4 sys_errlist D 0x210 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index 449d92bbc5..3fd078d125 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2825,6 +2825,8 @@ GLIBC_2.4 sys_errlist D 0x210 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index c9cf9bb055..c84244f56b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -29,7 +29,11 @@ ENTRY (__clone) save %sp,-96,%sp save %sp,-96,%sp +#ifdef __sparcv9 flushw +#else + ta 3 +#endif restore cfi_def_cfa_register(%fp) cfi_window_save diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index e615be759a..1ce1fe9da7 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -3157,6 +3157,8 @@ GLIBC_2.4 wcstold F GLIBC_2.4 wcstold_l F GLIBC_2.4 wprintf F GLIBC_2.4 wscanf F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S index aa5c658ce1..45c6ae7a86 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S @@ -42,15 +42,19 @@ __syscall_cancel_arch_start: __syscall_do_cancel() */ ld [%i0], %g2 andcc %g2, TCB_CANCELED_BITMASK, %g0 +#ifdef __sparcv9 bne,pn %icc, 2f +#else + bne 2f +#endif /* Issue a 6 argument syscall. */ - mov %i1, %g1 - mov %i2, %o0 + mov %i2, %o0 mov %i3, %o1 mov %i4, %o2 mov %i5, %o3 ld [%fp+92], %o4 ld [%fp+96], %o5 + mov %i1, %g1 ta 0x10 .globl __syscall_cancel_arch_end @@ -60,8 +64,13 @@ __syscall_cancel_arch_end: sub %g0, %o0, %o0 1: mov %o0, %i0 +#ifdef __sparcv9 return %i7+8 nop +#else + jmp %i7+8 + restore +#endif 2: call __syscall_do_cancel, 0 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h index d2d68f5312..c2ffbb5c8f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h @@ -107,6 +107,7 @@ ENTRY(name); \ #else /* __ASSEMBLER__ */ #define __SYSCALL_STRING \ + "mov %[scn], %%g1;" \ "ta 0x10;" \ "bcc 1f;" \ " nop;" \ @@ -114,7 +115,7 @@ ENTRY(name); \ "1:" #define __SYSCALL_CLOBBERS \ - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ + "g1", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index bd36431dd7..07507b86f6 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2793,6 +2793,8 @@ GLIBC_2.4 sys_errlist D 0x430 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S index 21b0728d5a..6c8d1330cb 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S @@ -46,13 +46,13 @@ __syscall_cancel_arch_start: andcc %g2, TCB_CANCELED_BITMASK, %g0 bne,pn %xcc, 2f /* Issue a 6 argument syscall. */ - mov %i1, %g1 - mov %i2, %o0 + mov %i2, %o0 mov %i3, %o1 mov %i4, %o2 mov %i5, %o3 ldx [%fp + STACK_BIAS + 176], %o4 ldx [%fp + STACK_BIAS + 184], %o5 + mov %i1, %g1 ta 0x6d .global __syscall_cancel_arch_end diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index 96047424e9..5598fab08a 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -106,6 +106,7 @@ ENTRY(name); \ #else /* __ASSEMBLER__ */ #define __SYSCALL_STRING \ + "mov %[scn], %%g1;" \ "ta 0x6d;" \ "bcc,pt %%xcc, 1f;" \ " nop;" \ @@ -113,7 +114,7 @@ ENTRY(name); \ "1:" #define __SYSCALL_CLOBBERS \ - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ + "g1", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h index dcabb57fe2..c287740a8c 100644 --- a/sysdeps/unix/sysv/linux/sparc/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h @@ -50,97 +50,109 @@ #undef INTERNAL_SYSCALL_NCS #define INTERNAL_SYSCALL_NCS(name, nr, args...) \ - internal_syscall##nr(__SYSCALL_STRING, name, args) + _internal_syscall##nr(__SYSCALL_STRING, "p", name, args) -#define internal_syscall0(string,name,dummy...) \ +#define _internal_syscall0(string,nc,name,dummy...) \ ({ \ - register long int __g1 __asm__ ("g1") = (name); \ register long __o0 __asm__ ("o0"); \ + long int _name = (long int) (name); \ __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1) : \ + [scn] nc (_name) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall0(string,name,args...) \ + _internal_syscall0(string, "i", name, args) -#define internal_syscall1(string,name,arg1) \ +#define _internal_syscall1(string,nc,name,arg1) \ ({ \ long int _arg1 = (long int) (arg1); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0) : \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall1(string,name,args...) \ + _internal_syscall1(string, "i", name, args) -#define internal_syscall2(string,name,arg1,arg2) \ +#define _internal_syscall2(string,nc,name,arg1,arg2) \ ({ \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0), "r" (__o1) : \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name), "r" (__o1) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall2(string,name,args...) \ + _internal_syscall2(string, "i", name, args) -#define internal_syscall3(string,name,arg1,arg2,arg3) \ +#define _internal_syscall3(string,nc,name,arg1,arg2,arg3) \ ({ \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ long int _arg3 = (long int) (arg3); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ register long int __o2 __asm__ ("o2") = _arg3; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0), "r" (__o1), \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name), "r" (__o1), \ "r" (__o2) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall3(string,name,args...) \ + _internal_syscall3(string, "i", name, args) -#define internal_syscall4(string,name,arg1,arg2,arg3,arg4) \ +#define _internal_syscall4(string,nc,name,arg1,arg2,arg3,arg4) \ ({ \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ long int _arg3 = (long int) (arg3); \ long int _arg4 = (long int) (arg4); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ register long int __o2 __asm__ ("o2") = _arg3; \ register long int __o3 __asm__ ("o3") = _arg4; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0), "r" (__o1), \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name), "r" (__o1), \ "r" (__o2), "r" (__o3) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall4(string,name,args...) \ + _internal_syscall4(string, "i", name, args) -#define internal_syscall5(string,name,arg1,arg2,arg3,arg4,arg5) \ +#define _internal_syscall5(string,nc,name,arg1,arg2,arg3,arg4,arg5) \ ({ \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ long int _arg3 = (long int) (arg3); \ long int _arg4 = (long int) (arg4); \ long int _arg5 = (long int) (arg5); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ register long int __o2 __asm__ ("o2") = _arg3; \ register long int __o3 __asm__ ("o3") = _arg4; \ register long int __o4 __asm__ ("o4") = _arg5; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0), "r" (__o1), \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name), "r" (__o1), \ "r" (__o2), "r" (__o3), "r" (__o4) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall5(string,name,args...) \ + _internal_syscall5(string, "i", name, args) -#define internal_syscall6(string,name,arg1,arg2,arg3,arg4,arg5,arg6) \ +#define _internal_syscall6(string,nc,name,arg1,arg2,arg3,arg4,arg5,arg6)\ ({ \ long int _arg1 = (long int) (arg1); \ long int _arg2 = (long int) (arg2); \ @@ -148,20 +160,22 @@ long int _arg4 = (long int) (arg4); \ long int _arg5 = (long int) (arg5); \ long int _arg6 = (long int) (arg6); \ - register long int __g1 __asm__("g1") = (name); \ + long int _name = (long int) (name); \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ register long int __o2 __asm__ ("o2") = _arg3; \ register long int __o3 __asm__ ("o3") = _arg4; \ register long int __o4 __asm__ ("o4") = _arg5; \ register long int __o5 __asm__ ("o5") = _arg6; \ - __asm __volatile (string : "=r" (__o0) : \ - "r" (__g1), "0" (__o0), "r" (__o1), \ + __asm __volatile (string : "+r" (__o0) : \ + [scn] nc (_name), "r" (__o1), \ "r" (__o2), "r" (__o3), "r" (__o4), \ "r" (__o5) : \ __SYSCALL_CLOBBERS); \ __o0; \ }) +#define internal_syscall6(string,name,args...) \ + _internal_syscall6(string, "i", name, args) #define INLINE_CLONE_SYSCALL(arg1,arg2,arg3,arg4,arg5) \ ({ \ @@ -170,15 +184,15 @@ long int _arg3 = (long int) (arg3); \ long int _arg4 = (long int) (arg4); \ long int _arg5 = (long int) (arg5); \ + long int _name = __NR_clone; \ register long int __o0 __asm__ ("o0") = _arg1; \ register long int __o1 __asm__ ("o1") = _arg2; \ register long int __o2 __asm__ ("o2") = _arg3; \ register long int __o3 __asm__ ("o3") = _arg4; \ register long int __o4 __asm__ ("o4") = _arg5; \ - register long int __g1 __asm__ ("g1") = __NR_clone; \ __asm __volatile (__SYSCALL_STRING : \ "=r" (__o0), "=r" (__o1) : \ - "r" (__g1), "0" (__o0), "1" (__o1), \ + [scn] "i" (_name), "0" (__o0), "1" (__o1), \ "r" (__o2), "r" (__o3), "r" (__o4) : \ __SYSCALL_CLOBBERS); \ if (__glibc_unlikely ((unsigned long int) (__o0) > -4096UL)) \ diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c index f57e92815e..1edf62c6d7 100644 --- a/sysdeps/unix/sysv/linux/spawni.c +++ b/sysdeps/unix/sysv/linux/spawni.c @@ -383,7 +383,11 @@ __spawnix (int *pid, const char *file, args.pidfd = 0; args.xflags = xflags; - internal_signal_block_all (&args.oldmask); + /* Avoid the potential issues if caller sets a SIG_IGN for SIGABRT, calls + abort, and another thread issues posix_spawn just after the sigaction + returns. With default options (not setting POSIX_SPAWN_SETSIGDEF), the + process can still see SIG_DFL for SIGABRT, where it should be SIG_IGN. */ + __abort_lock_rdlock (&args.oldmask); /* The clone flags used will create a new child that will run in the same memory space (CLONE_VM) and the execution of calling thread will be @@ -474,7 +478,7 @@ __spawnix (int *pid, const char *file, if ((ec == 0) && (pid != NULL)) *pid = use_pidfd ? args.pidfd : new_pid; - internal_signal_restore_set (&args.oldmask); + __abort_lock_unlock (&args.oldmask); __pthread_setcancelstate (state, NULL); diff --git a/sysdeps/unix/sysv/linux/sys/pidfd.h b/sysdeps/unix/sysv/linux/sys/pidfd.h index 9f88d297e8..85d976939b 100644 --- a/sysdeps/unix/sysv/linux/sys/pidfd.h +++ b/sysdeps/unix/sysv/linux/sys/pidfd.h @@ -20,6 +20,7 @@ #include <fcntl.h> #include <bits/types/siginfo_t.h> +#include <sys/ioctl.h> #define PIDFD_NONBLOCK O_NONBLOCK #define PIDFD_THREAD O_EXCL @@ -28,6 +29,19 @@ #define PIDFD_SIGNAL_THREAD_GROUP (1UL << 1) #define PIDFD_SIGNAL_PROCESS_GROUP (1UL << 2) +#define PIDFS_IOCTL_MAGIC 0xFF + +#define PIDFD_GET_CGROUP_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 1) +#define PIDFD_GET_IPC_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 2) +#define PIDFD_GET_MNT_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 3) +#define PIDFD_GET_NET_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 4) +#define PIDFD_GET_PID_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 5) +#define PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 6) +#define PIDFD_GET_TIME_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 7) +#define PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 8) +#define PIDFD_GET_USER_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 9) +#define PIDFD_GET_UTS_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 10) + /* Returns a file descriptor that refers to the process PID. The close-on-exec is set on the file descriptor. */ extern int pidfd_open (__pid_t __pid, unsigned int __flags) __THROW; diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list index 7871f93b94..aa5b479e2a 100644 --- a/sysdeps/unix/sysv/linux/syscall-names.list +++ b/sysdeps/unix/sysv/linux/syscall-names.list @@ -21,8 +21,8 @@ # This file can list all potential system calls. The names are only # used if the installed kernel headers also provide them. -# The list of system calls is current as of Linux 6.10. -kernel 6.10 +# The list of system calls is current as of Linux 6.11. +kernel 6.11 FAST_atomic_update FAST_cmpxchg @@ -653,6 +653,7 @@ uname unlink unlinkat unshare +uretprobe uselib userfaultfd usr26 diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 9ac42c3436..f1cfe8dc13 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -102,8 +102,8 @@ name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at setns EXTRA setns i:ii setns memfd_create EXTRA memfd_create i:si memfd_create -pkey_alloc EXTRA pkey_alloc i:ii pkey_alloc -pkey_free EXTRA pkey_free i:i pkey_free +pkey_alloc EXTRA pkey_alloc i:ii __pkey_alloc pkey_alloc +pkey_free EXTRA pkey_free i:i __pkey_free pkey_free gettid EXTRA gettid Ei: __gettid gettid tgkill EXTRA tgkill i:iii __tgkill tgkill close_range - close_range i:iii __close_range close_range diff --git a/sysdeps/unix/sysv/linux/time.c b/sysdeps/unix/sysv/linux/time.c index f8b0cee41c..a56ef6fa30 100644 --- a/sysdeps/unix/sysv/linux/time.c +++ b/sysdeps/unix/sysv/linux/time.c @@ -33,11 +33,10 @@ time_syscall (time_t *t) } # undef INIT_ARCH -# define INIT_ARCH() \ - void *vdso_time = dl_vdso_vsym (HAVE_TIME_VSYSCALL); +# define INIT_ARCH() libc_ifunc (time, - vdso_time ? VDSO_IFUNC_RET (vdso_time) - : (void *) time_syscall); + GLRO(dl_vdso_time) != NULL ? VDSO_IFUNC_RET (GLRO(dl_vdso_time)) + : (void *) time_syscall); # else time_t diff --git a/sysdeps/unix/sysv/linux/tst-mman-consts.py b/sysdeps/unix/sysv/linux/tst-mman-consts.py index a1137eb1d5..2191bea36f 100644 --- a/sysdeps/unix/sysv/linux/tst-mman-consts.py +++ b/sysdeps/unix/sysv/linux/tst-mman-consts.py @@ -33,7 +33,7 @@ def main(): help='C compiler (including options) to use') args = parser.parse_args() linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) - linux_version_glibc = (6, 10) + linux_version_glibc = (6, 11) sys.exit(glibcextract.compare_macro_consts( '#define _GNU_SOURCE 1\n' '#include <sys/mman.h>\n', diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py index 675f1790b6..b71d8a489d 100755 --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py @@ -42,7 +42,7 @@ def main(): # Constants in glibc were updated to match Linux v6.10. When glibc # constants are updated this value should be updated to match the # released kernel version from which the constants were taken. - linux_version_glibc = (6, 10) + linux_version_glibc = (6, 11) def check(cte, exclude=None): return glibcextract.compare_macro_consts( '#include <sys/mount.h>\n', diff --git a/sysdeps/unix/sysv/linux/tst-pidfd-consts.py b/sysdeps/unix/sysv/linux/tst-pidfd-consts.py index 9824fd214d..9d53102cbd 100644 --- a/sysdeps/unix/sysv/linux/tst-pidfd-consts.py +++ b/sysdeps/unix/sysv/linux/tst-pidfd-consts.py @@ -39,7 +39,7 @@ def main(): sys.exit (77) linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) - linux_version_glibc = (6, 10) + linux_version_glibc = (6, 11) sys.exit(glibcextract.compare_macro_consts( '#include <sys/pidfd.h>\n', '#include <asm/fcntl.h>\n' diff --git a/sysdeps/unix/sysv/linux/tst-sched-consts.py b/sysdeps/unix/sysv/linux/tst-sched-consts.py new file mode 100644 index 0000000000..f06ac400bd --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-sched-consts.py @@ -0,0 +1,56 @@ +#!/usr/bin/python3 +# Test that glibc's sched.h constants match the kernel's. +# Copyright (C) 2018-2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <https://www.gnu.org/licenses/>. + +import argparse +import sys + +import glibcextract +import glibcsyscalls + + +def main(): + """The main entry point.""" + parser = argparse.ArgumentParser( + description="Test that glibc's sched.h constants " + "match the kernel's.") + parser.add_argument('--cc', metavar='CC', + help='C compiler (including options) to use') + args = parser.parse_args() + linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) + linux_version_glibc = (6, 11) + sys.exit(glibcextract.compare_macro_consts( + '#define _GNU_SOURCE 1\n' + '#include <sched.h>\n', + '#define _GNU_SOURCE 1\n' + '#include <linux/sched.h>\n' + '#include <linux/sched/types.h>\n', + args.cc, + 'SCHED_.*', + # SCHED_ISO is reserved, but not implemented in the kernel. + # SCHED_OTHER is the standard name for SCHED_NORMAL. + # SCHED_FLAG_ALL will receive more and more flags, so + # exposing it to userspace does not seem useful. + 'SCHED_ISO' + '|SCHED_OTHER' + '|SCHED_FLAG_ALL', + linux_version_glibc > linux_version_headers, + linux_version_headers > linux_version_glibc)) + +if __name__ == '__main__': + main() diff --git a/sysdeps/unix/sysv/linux/tst-sched_setattr.c b/sysdeps/unix/sysv/linux/tst-sched_setattr.c new file mode 100644 index 0000000000..fbb73c31a7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-sched_setattr.c @@ -0,0 +1,107 @@ +/* Tests for sched_setattr and sched_getattr. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sched.h> + +#include <errno.h> +#include <stddef.h> +#include <string.h> +#include <support/check.h> +#include <sys/resource.h> +#include <unistd.h> + +/* Padding struct to detect unexpected writes. */ +union +{ + struct sched_attr attr; + /* Hopefully the kernel will never need as much. */ + unsigned char padding[4096]; +} u; + +static void +check_unused (void) +{ + TEST_VERIFY (u.attr.size < sizeof (u)); + for (unsigned int i = u.attr.size; i < sizeof (u); ++i) + TEST_COMPARE (u.padding[i], 0xcc); +} + +static int +do_test (void) +{ + _Static_assert (SCHED_OTHER == SCHED_NORMAL, + "SCHED_OTHER, SCHED_NORMAL values"); + TEST_VERIFY (sizeof (struct sched_attr) < sizeof (u)); + + /* Check that reading and re-applying the current policy works. */ + memset (&u, 0xcc, sizeof (u)); + /* Compiler barrier to bypass write access attribute. */ + volatile unsigned int size = sizeof (u); + TEST_COMPARE (sched_getattr (0, (struct sched_attr *) &u, size, 0), 0); + check_unused (); + TEST_COMPARE (sched_setattr (0, &u.attr, 0), 0); /* Apply unchanged. */ + + /* Try to switch to the SCHED_OTHER policy. */ + memset (&u, 0, sizeof (u)); + u.attr.size = sizeof (u); /* With padding, kernel should accept zeroes. */ + u.attr.sched_policy = SCHED_OTHER; /* Should be the default. */ + { + errno = 0; + int prio = getpriority (PRIO_PROCESS, 0); + if (errno != 0) + prio = 0; + u.attr.sched_nice = prio; + } + TEST_COMPARE (sched_setattr (0, &u.attr, 0), 0); + + /* Non-zero values not known to the kernel result in an E2BIG error. */ + memset (&u, 0, sizeof (u)); + TEST_COMPARE (sched_getattr (0, (struct sched_attr *) &u, size, 0), 0); + u.padding[u.attr.size] = 0xcc; + u.attr.size = sizeof (u); + errno = 0; + TEST_COMPARE (sched_setattr (0, &u.attr, 0), -1); + TEST_COMPARE (errno, E2BIG); + + memset (&u, 0xcc, sizeof (u)); + TEST_COMPARE (sched_getattr (0, (struct sched_attr *) &u, size, 0), 0); + TEST_COMPARE (u.attr.sched_policy, SCHED_OTHER); + check_unused (); + + /* Raise the niceless level to 19 and observe its effect. */ + TEST_COMPARE (nice (19), 19); + TEST_COMPARE (sched_getattr (0, &u.attr, sizeof (u.attr), 0), 0); + TEST_COMPARE (u.attr.sched_policy, SCHED_OTHER); + TEST_COMPARE (u.attr.sched_nice, 19); + check_unused (); + + /* Invalid buffer arguments result in EINVAL (not EFAULT). */ + { + errno = 0; + void *volatile null_pointer = NULL; /* compiler barrier. */ + TEST_COMPARE (sched_setattr (0, null_pointer, 0), -1); + TEST_COMPARE (errno, EINVAL); + errno = 0; + TEST_COMPARE (sched_getattr (0, null_pointer, size, 0), -1); + TEST_COMPARE (errno, EINVAL); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/unix/sysv/linux/tst-syscall-restart.c b/sysdeps/unix/sysv/linux/tst-syscall-restart.c new file mode 100644 index 0000000000..0ee7dc8517 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-syscall-restart.c @@ -0,0 +1,112 @@ +/* Test if a syscall is correctly restarted. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/xsignal.h> +#include <support/check.h> +#include <support/process_state.h> +#include <support/xunistd.h> +#include <support/xthread.h> +#include <sys/wait.h> + +static int +check_pid (pid_t pid) +{ + /* Wait until the child has called pause and it blocking on kernel. */ + support_process_state_wait (pid, support_process_state_sleeping); + + TEST_COMPARE (kill (pid, SIGSTOP), 0); + + /* Adding process_state_tracing_stop ('t') allows the test to work under + trace programs such as ptrace. */ + support_process_state_wait (pid, support_process_state_stopped + | support_process_state_tracing_stop); + + TEST_COMPARE (kill (pid, SIGCONT), 0); + + enum support_process_state state + = support_process_state_wait (pid, support_process_state_sleeping + | support_process_state_zombie); + + TEST_COMPARE (state, support_process_state_sleeping); + + TEST_COMPARE (kill (pid, SIGTERM), 0); + + siginfo_t info; + TEST_COMPARE (waitid (P_PID, pid, &info, WEXITED), 0); + TEST_COMPARE (info.si_signo, SIGCHLD); + TEST_COMPARE (info.si_code, CLD_KILLED); + TEST_COMPARE (info.si_status, SIGTERM); + TEST_COMPARE (info.si_pid, pid); + + return 0; +} + +static void * +tf (void *closure) +{ + pause (); + return NULL; +} + +static void +child_mt (void) +{ + /* Let only the created thread to handle signals. */ + sigset_t set; + sigfillset (&set); + xpthread_sigmask (SIG_BLOCK, &set, NULL); + + sigdelset (&set, SIGSTOP); + sigdelset (&set, SIGCONT); + sigdelset (&set, SIGTERM); + + pthread_attr_t attr; + xpthread_attr_init (&attr); + TEST_COMPARE (pthread_attr_setsigmask_np (&attr, &set), 0); + + xpthread_join (xpthread_create (&attr, tf, NULL)); +} + +static void +do_test_syscall (bool multithread) +{ + pid_t pid = xfork (); + if (pid == 0) + { + if (multithread) + child_mt (); + else + pause (); + _exit (127); + } + + check_pid (pid); +} + +static int +do_test (void) +{ + /* Check for both single and multi thread, since they use different syscall + mechanisms. */ + do_test_syscall (false); + do_test_syscall (true); + + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/unix/sysv/linux/x86/pkey_get.c b/sysdeps/unix/sysv/linux/x86/pkey_get.c index eb988a5c45..0fb52ba18c 100644 --- a/sysdeps/unix/sysv/linux/x86/pkey_get.c +++ b/sysdeps/unix/sysv/linux/x86/pkey_get.c @@ -18,9 +18,10 @@ #include <arch-pkey.h> #include <errno.h> +#include <sys/mman.h> int -pkey_get (int key) +__pkey_get (int key) { if (key < 0 || key > 15) { @@ -31,3 +32,5 @@ pkey_get (int key) return (pkru >> (2 * key)) & 3; return 0; } +libc_hidden_def (__pkey_get) +weak_alias (__pkey_get, pkey_get) diff --git a/sysdeps/unix/sysv/linux/x86/pkey_set.c b/sysdeps/unix/sysv/linux/x86/pkey_set.c index 3fd2c95580..51e3d68d92 100644 --- a/sysdeps/unix/sysv/linux/x86/pkey_set.c +++ b/sysdeps/unix/sysv/linux/x86/pkey_set.c @@ -18,9 +18,10 @@ #include <arch-pkey.h> #include <errno.h> +#include <sys/mman.h> int -pkey_set (int key, unsigned int rights) +__pkey_set (int key, unsigned int rights) { if (key < 0 || key > 15 || rights > 3) { @@ -33,3 +34,5 @@ pkey_set (int key, unsigned int rights) pkey_write (pkru); return 0; } +libc_hidden_def (__pkey_set) +weak_alias (__pkey_set, pkey_set) diff --git a/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h index 5d86e75dd5..dfc10d0c7e 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h +++ b/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h @@ -359,6 +359,7 @@ #define __NR_unlink 87 #define __NR_unlinkat 263 #define __NR_unshare 272 +#define __NR_uretprobe 335 #define __NR_uselib 134 #define __NR_userfaultfd 323 #define __NR_ustat 136 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index aea7848ed6..5acf49dbe8 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2744,6 +2744,8 @@ GLIBC_2.4 sys_errlist D 0x420 GLIBC_2.4 sys_nerr D 0x4 GLIBC_2.4 unlinkat F GLIBC_2.4 unshare F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F GLIBC_2.5 __readlinkat_chk F GLIBC_2.5 inet6_opt_append F GLIBC_2.5 inet6_opt_find F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h index 6c35068d8e..9340daa967 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h +++ b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h @@ -351,6 +351,7 @@ #define __NR_unlink 1073741911 #define __NR_unlinkat 1073742087 #define __NR_unshare 1073742096 +#define __NR_uretprobe 1073742159 #define __NR_userfaultfd 1073742147 #define __NR_ustat 1073741960 #define __NR_utime 1073741956 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 4ab3681914..02d1bb97dc 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2763,3 +2763,5 @@ GLIBC_2.39 stdc_trailing_zeros_ui F GLIBC_2.39 stdc_trailing_zeros_ul F GLIBC_2.39 stdc_trailing_zeros_ull F GLIBC_2.39 stdc_trailing_zeros_us F +GLIBC_2.41 sched_getattr F +GLIBC_2.41 sched_setattr F diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index c2e36dcbdf..e3c811549c 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -1062,6 +1062,7 @@ float128: 1 ldouble: 1 Function: Imaginary part of "csin": +float: 1 float128: 1 Function: Real part of "csin_downward": @@ -1431,25 +1432,21 @@ float: 1 Function: "exp10m1": double: 4 -float: 2 float128: 3 ldouble: 4 Function: "exp10m1_downward": double: 3 -float: 3 float128: 6 ldouble: 6 Function: "exp10m1_towardzero": double: 2 -float: 3 float128: 6 ldouble: 5 Function: "exp10m1_upward": double: 5 -float: 4 float128: 6 ldouble: 6 @@ -1499,25 +1496,21 @@ float: 1 Function: "exp2m1": double: 2 -float: 2 float128: 2 ldouble: 3 Function: "exp2m1_downward": double: 3 -float: 3 float128: 3 ldouble: 6 Function: "exp2m1_towardzero": double: 3 -float: 2 float128: 4 ldouble: 5 Function: "exp2m1_upward": double: 3 -float: 3 float128: 5 ldouble: 6 @@ -1558,25 +1551,21 @@ float: 1 Function: "expm1": double: 1 -float: 1 float128: 2 ldouble: 3 Function: "expm1_downward": double: 1 -float: 1 float128: 2 ldouble: 4 Function: "expm1_towardzero": double: 1 -float: 2 float128: 4 ldouble: 4 Function: "expm1_upward": double: 1 -float: 1 float128: 3 ldouble: 4 @@ -1809,49 +1798,41 @@ float: 1 Function: "log10p1": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log10p1_downward": double: 2 -float: 3 float128: 4 ldouble: 8 Function: "log10p1_towardzero": double: 3 -float: 2 float128: 3 ldouble: 8 Function: "log10p1_upward": double: 2 -float: 3 float128: 4 ldouble: 6 Function: "log1p": double: 1 -float: 1 float128: 3 ldouble: 2 Function: "log1p_downward": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log1p_towardzero": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log1p_upward": double: 2 -float: 2 float128: 2 ldouble: 3 @@ -1921,25 +1902,21 @@ float: 1 Function: "log2p1": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log2p1_downward": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "log2p1_towardzero": double: 2 -float: 2 float128: 2 ldouble: 4 Function: "log2p1_upward": double: 2 -float: 2 float128: 3 ldouble: 5 @@ -1981,25 +1958,21 @@ float: 3 Function: "logp1": double: 1 -float: 1 float128: 3 ldouble: 2 Function: "logp1_downward": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "logp1_towardzero": double: 2 -float: 2 float128: 3 ldouble: 4 Function: "logp1_upward": double: 2 -float: 2 float128: 2 ldouble: 3 @@ -2263,25 +2236,21 @@ double: 1 Function: "tgamma": double: 9 -float: 8 float128: 4 ldouble: 5 Function: "tgamma_downward": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_towardzero": double: 9 -float: 7 float128: 5 ldouble: 6 Function: "tgamma_upward": double: 9 -float: 8 float128: 4 ldouble: 5 diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile index cbe09d49f4..e823d2fcc6 100644 --- a/sysdeps/x86_64/fpu/multiarch/Makefile +++ b/sysdeps/x86_64/fpu/multiarch/Makefile @@ -11,6 +11,8 @@ CFLAGS-s_log1p-fma.c = -mfma -mavx2 CFLAGS-s_sin-fma.c = -mfma -mavx2 CFLAGS-s_tan-fma.c = -mfma -mavx2 CFLAGS-s_sincos-fma.c = -mfma -mavx2 +CFLAGS-s_exp10m1f-fma.c = -mfma -mavx2 +CFLAGS-s_exp2m1f-fma.c = -mfma -mavx2 CFLAGS-e_exp2f-fma.c = -mfma -mavx2 CFLAGS-e_expf-fma.c = -mfma -mavx2 @@ -72,6 +74,8 @@ libm-sysdep_routines += \ s_ceilf-sse4_1 \ s_cosf-fma \ s_cosf-sse2 \ + s_exp10m1f-fma \ + s_exp2m1f-fma \ s_expm1-fma \ s_floor-sse4_1 \ s_floorf-sse4_1 \ diff --git a/sysdeps/x86_64/fpu/multiarch/s_exp10m1f-fma.c b/sysdeps/x86_64/fpu/multiarch/s_exp10m1f-fma.c new file mode 100644 index 0000000000..3dda04e2dd --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/s_exp10m1f-fma.c @@ -0,0 +1,4 @@ +#define __exp10m1f __exp10m1f_fma +#define SECTION __attribute__ ((section (".text.fma"))) + +#include <sysdeps/ieee754/flt-32/s_exp10m1f.c> diff --git a/sysdeps/x86_64/fpu/multiarch/s_exp10m1f.c b/sysdeps/x86_64/fpu/multiarch/s_exp10m1f.c new file mode 100644 index 0000000000..8040b7ed79 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/s_exp10m1f.c @@ -0,0 +1,33 @@ +/* Multiple versions of exp10m1. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sysdeps/x86/isa-level.h> +#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL +# include <libm-alias-float.h> + +extern float __redirect_exp10m1f (float); + +# define SYMBOL_NAME exp10m1f +# include "ifunc-fma.h" + +libc_ifunc_redirected (__redirect_exp10m1f, __exp10m1f, IFUNC_SELECTOR ()); +libm_alias_float (__exp10m1, exp10m1) + +# define __exp10m1f __exp10m1f_sse2 +#endif +#include <sysdeps/ieee754/flt-32/s_exp10m1f.c> diff --git a/sysdeps/x86_64/fpu/multiarch/s_exp2m1f-fma.c b/sysdeps/x86_64/fpu/multiarch/s_exp2m1f-fma.c new file mode 100644 index 0000000000..bfa00eae4e --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/s_exp2m1f-fma.c @@ -0,0 +1,4 @@ +#define __exp2m1f __exp2m1f_fma +#define SECTION __attribute__ ((section (".text.fma"))) + +#include <sysdeps/ieee754/flt-32/s_exp2m1f.c> diff --git a/sysdeps/x86_64/fpu/multiarch/s_exp2m1f.c b/sysdeps/x86_64/fpu/multiarch/s_exp2m1f.c new file mode 100644 index 0000000000..8e2d7ec384 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/s_exp2m1f.c @@ -0,0 +1,33 @@ +/* Multiple versions of exp2m1. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sysdeps/x86/isa-level.h> +#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL +# include <libm-alias-float.h> + +extern float __redirect_exp2m1f (float); + +# define SYMBOL_NAME exp2m1f +# include "ifunc-fma.h" + +libc_ifunc_redirected (__redirect_exp2m1f, __exp2m1f, IFUNC_SELECTOR ()); +libm_alias_float (__exp2m1, exp2m1) + +# define __exp2m1f __exp2m1f_sse2 +#endif +#include <sysdeps/ieee754/flt-32/s_exp2m1f.c> diff --git a/sysdeps/x86_64/fpu/multiarch/s_fma.c b/sysdeps/x86_64/fpu/multiarch/s_fma.c index 10e6e625b3..92409a2779 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_fma.c +++ b/sysdeps/x86_64/fpu/multiarch/s_fma.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/x86_64/fpu/multiarch/s_fmaf.c b/sysdeps/x86_64/fpu/multiarch/s_fmaf.c index 85725e29c0..b5b63fd125 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_fmaf.c +++ b/sysdeps/x86_64/fpu/multiarch/s_fmaf.c @@ -9,7 +9,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public diff --git a/sysdeps/x86_64/multiarch/strcmp-evex.S b/sysdeps/x86_64/multiarch/strcmp-evex.S index 06730ab2a1..cea034f394 100644 --- a/sysdeps/x86_64/multiarch/strcmp-evex.S +++ b/sysdeps/x86_64/multiarch/strcmp-evex.S @@ -209,7 +209,9 @@ returned. */ .section SECTION(.text), "ax", @progbits - .align 16 + /* Align 64 bytes here. This is to get the L(loop) block ideally + aligned for the DSB. */ + .align 64 .type STRCMP, @function .globl STRCMP # ifdef USE_AS_STRCASECMP_L @@ -509,9 +511,7 @@ L(ret4): ret # endif - /* 32 byte align here ensures the main loop is ideally aligned - for DSB. */ - .p2align 5 + .p2align 4,, 4 L(more_3x_vec): /* Safe to compare 4x vectors. */ VMOVU (VEC_SIZE)(%rdi), %VMM(0) @@ -1426,10 +1426,9 @@ L(less_32_till_page): L(ret_zero_page_cross_slow_case0): xorl %eax, %eax ret -# endif - - +# else .p2align 4,, 10 +# endif L(less_16_till_page): cmpl $((VEC_SIZE - 8) / SIZE_OF_CHAR), %eax ja L(less_8_till_page) @@ -1482,8 +1481,12 @@ L(less_16_till_page): # endif jmp L(prepare_loop_aligned) - - +# ifndef USE_AS_STRNCMP + /* Fits in aligning bytes. */ +L(ret_zero_4_loop): + xorl %eax, %eax + ret +# endif .p2align 4,, 10 L(less_8_till_page): @@ -1554,6 +1557,7 @@ L(ret_less_8_wcs): # ifdef USE_AS_STRNCMP .p2align 4,, 2 +L(ret_zero_4_loop): L(ret_zero_page_cross_slow_case1): xorl %eax, %eax ret @@ -1586,10 +1590,6 @@ L(less_4_loop): subq $-(CHAR_PER_VEC * 4), %rdx # endif jmp L(prepare_loop_aligned) - -L(ret_zero_4_loop): - xorl %eax, %eax - ret L(ret_less_4_loop): xorl %r8d, %eax subl %r8d, %eax diff --git a/time/Makefile b/time/Makefile index d06797b06c..4bfb208110 100644 --- a/time/Makefile +++ b/time/Makefile @@ -53,6 +53,7 @@ tests := \ tst-adjtime \ tst-clock \ tst-clock2 \ + tst-clock_gettime \ tst-clock_nanosleep \ tst-clock_settime \ tst-cpuclock1 \ @@ -61,6 +62,7 @@ tests := \ tst-ftime \ tst-ftime_l \ tst-getdate \ + tst-gettimeofday \ tst-gmtime \ tst-itimer \ tst-mktime \ @@ -77,6 +79,7 @@ tests := \ tst-strptime-whitespace \ tst-strptime2 \ tst-strptime3 \ + tst-time \ tst-timegm \ tst-timespec_get \ tst-timespec_getres \ @@ -90,16 +93,19 @@ tests-time64 := \ tst-adjtime-time64 \ tst-clock-time64 \ tst-clock2-time64 \ + tst-clock_gettime-time64 \ tst-clock_nanosleep-time64 \ tst-clock_settime-time64 \ tst-cpuclock1-time64 \ tst-ctime-time64 \ tst-difftime-time64 \ + tst-gettimeofday-time64 \ tst-gmtime-time64 \ tst-itimer-time64 \ tst-mktime4-time64 \ tst-settimeofday-time64 \ tst-strftime4-time64 \ + tst-time-time64 \ tst-timegm-time64 \ tst-timespec_get-time64 \ tst-timespec_getres-time64 \ @@ -121,6 +127,8 @@ $(objpfx)tst-strftime2.out: $(gen-locales) $(objpfx)tst-strftime3.out: $(gen-locales) endif +$(objpfx)tst-clock_gettime: $(librt) +$(objpfx)tst-clock_gettime-time64: $(librt) $(objpfx)tst-clock_nanosleep: $(librt) $(objpfx)tst-clock_nanosleep-time64: $(librt) diff --git a/time/tst-clock_gettime-time64.c b/time/tst-clock_gettime-time64.c new file mode 100644 index 0000000000..5b215d11f8 --- /dev/null +++ b/time/tst-clock_gettime-time64.c @@ -0,0 +1 @@ +#include "tst-clock_gettime.c" diff --git a/time/tst-clock_gettime.c b/time/tst-clock_gettime.c new file mode 100644 index 0000000000..51f24c0be2 --- /dev/null +++ b/time/tst-clock_gettime.c @@ -0,0 +1,184 @@ +/* Test clock_gettime function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdbool.h> +#include <stdio.h> +#include <time.h> + +#include <support/check.h> +#include <support/test-driver.h> +#include <support/xsignal.h> + +/* Compare two struct timespec values, returning a value -1, 0 or 1. */ + +int +compare_timespec (const struct timespec *tv1, const struct timespec *tv2) +{ + if (tv1->tv_sec < tv2->tv_sec) + return -1; + if (tv1->tv_sec > tv2->tv_sec) + return 1; + if (tv1->tv_nsec < tv2->tv_nsec) + return -1; + if (tv1->tv_nsec > tv2->tv_nsec) + return 1; + return 0; +} + +struct test_clockid +{ + clockid_t clockid; + const char *name; + bool is_cputime; + bool fail_ok; +}; + +#define CLOCK(clockid) { clockid, # clockid, false, false } +#define CLOCK_CPU(clockid) { clockid, # clockid, true, false } +#define CLOCK_FAIL_OK(clockid) { clockid, # clockid, false, true } + +static const struct test_clockid clocks[] = + { + CLOCK (CLOCK_REALTIME), +#ifdef CLOCK_MONOTONIC + CLOCK (CLOCK_MONOTONIC), +#endif +#ifdef CLOCK_PROCESS_CPUTIME_ID + CLOCK_CPU (CLOCK_PROCESS_CPUTIME_ID), +#endif +#ifdef CLOCK_THREAD_CPUTIME_ID + CLOCK_CPU (CLOCK_THREAD_CPUTIME_ID), +#endif +#ifdef CLOCK_MONOTONIC_RAW + CLOCK (CLOCK_MONOTONIC_RAW), +#endif +#ifdef CLOCK_REALTIME_COARSE + CLOCK (CLOCK_REALTIME_COARSE), +#endif +#ifdef CLOCK_MONOTONIC_COARSE + CLOCK (CLOCK_MONOTONIC_COARSE), +#endif +#ifdef CLOCK_BOOTTIME + CLOCK (CLOCK_BOOTTIME), +#endif +#ifdef CLOCK_REALTIME_ALARM + CLOCK_FAIL_OK (CLOCK_REALTIME_ALARM), +#endif +#ifdef CLOCK_BOOTTIME_ALARM + CLOCK_FAIL_OK (CLOCK_BOOTTIME_ALARM), +#endif +#ifdef CLOCK_TAI + CLOCK (CLOCK_TAI), +#endif + }; + + +volatile int sigalrm_received; + +void +handle_sigalrm (int sig) +{ + sigalrm_received = 1; +} + +int +do_test (void) +{ + /* Verify that the calls to clock_gettime succeed, that the time does + not decrease, and that time returns a truncated (not rounded) + version of the time. */ + for (size_t i = 0; i < sizeof clocks / sizeof clocks[0]; i++) + { + printf ("testing %s\n", clocks[i].name); + struct timespec ts1, ts2, ts3; + int ret; + time_t t1; + t1 = time (NULL); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + ret = clock_gettime (clocks[i].clockid, &ts1); + if (clocks[i].fail_ok && ret == -1) + { + printf ("failed (OK for this clock): %m\n"); + continue; + } + TEST_VERIFY_EXIT (ret == 0); + if (clocks[i].clockid == CLOCK_REALTIME) + TEST_VERIFY (t1 <= ts1.tv_sec); + TEST_VERIFY (ts1.tv_nsec >= 0); + TEST_VERIFY (ts1.tv_nsec < 1000000000); + ret = clock_gettime (clocks[i].clockid, &ts2); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (compare_timespec (&ts1, &ts2) <= 0); + TEST_VERIFY (ts2.tv_nsec >= 0); + TEST_VERIFY (ts2.tv_nsec < 1000000000); + /* Also verify that after sleeping, the time returned has + increased. Repeat several times to verify that each time, + the time from the time function is truncated not rounded. + For CPU time clocks, the time spent spinning on the CPU, and + so whether we end in the later half of a second, is not + predictable; thus, only test once for those clocks. */ + const struct timespec duration = { .tv_nsec = 100000000 }; + for (int j = 0; j < 5; j++) + { + if (clocks[i].is_cputime) + { + timer_t timer; + ret = timer_create (CLOCK_PROCESS_CPUTIME_ID, NULL, &timer); + TEST_VERIFY_EXIT (ret == 0); + sigalrm_received = 0; + xsignal (SIGALRM, handle_sigalrm); + struct itimerspec t = + { .it_value = + { + .tv_sec = 0, + .tv_nsec = 200000000 + } + }; + ret = timer_settime (timer, 0, &t, NULL); + TEST_VERIFY_EXIT (ret == 0); + while (sigalrm_received == 0) + ; + xsignal (SIGALRM, SIG_DFL); + ret = timer_delete (timer); + TEST_VERIFY_EXIT (ret == 0); + } + else + { + ret = nanosleep (&duration, NULL); + TEST_VERIFY_EXIT (ret == 0); + } + t1 = time (NULL); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + ret = clock_gettime (clocks[i].clockid, &ts3); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (compare_timespec (&ts2, &ts3) < 0); + if (clocks[i].clockid == CLOCK_REALTIME) + TEST_VERIFY (t1 <= ts3.tv_sec); + TEST_VERIFY (ts3.tv_nsec >= 0); + TEST_VERIFY (ts3.tv_nsec < 1000000000); + ts2 = ts3; + if (clocks[i].is_cputime) + break; + } + } + return 0; +} + +#define TIMEOUT 60 + +#include <support/test-driver.c> diff --git a/time/tst-gettimeofday-time64.c b/time/tst-gettimeofday-time64.c new file mode 100644 index 0000000000..6c08761ef9 --- /dev/null +++ b/time/tst-gettimeofday-time64.c @@ -0,0 +1 @@ +#include "tst-gettimeofday.c" diff --git a/time/tst-gettimeofday.c b/time/tst-gettimeofday.c new file mode 100644 index 0000000000..978ae28587 --- /dev/null +++ b/time/tst-gettimeofday.c @@ -0,0 +1,93 @@ +/* Test gettimeofday function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sys/time.h> +#include <time.h> + +#include <support/check.h> +#include <support/test-driver.h> + +/* Compare two struct timeval values, returning a value -1, 0 or 1. */ + +int +compare_timeval (const struct timeval *tv1, const struct timeval *tv2) +{ + if (tv1->tv_sec < tv2->tv_sec) + return -1; + if (tv1->tv_sec > tv2->tv_sec) + return 1; + if (tv1->tv_usec < tv2->tv_usec) + return -1; + if (tv1->tv_usec > tv2->tv_usec) + return 1; + return 0; +} + +int +do_test (void) +{ + struct timeval tv1, tv2, tv3; + int ret; + time_t t1; + /* Verify that the calls to gettimeofday succeed, that the time does + not decrease, and that time returns a truncated (not rounded) + version of the time. */ + t1 = time (NULL); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + ret = gettimeofday (&tv1, NULL); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (t1 <= tv1.tv_sec); + TEST_VERIFY (tv1.tv_usec >= 0); + TEST_VERIFY (tv1.tv_usec < 1000000); + ret = gettimeofday (&tv2, NULL); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (compare_timeval (&tv1, &tv2) <= 0); + TEST_VERIFY (tv2.tv_usec >= 0); + TEST_VERIFY (tv2.tv_usec < 1000000); + /* Also verify that after sleeping, the time returned has increased. + Repeat several times to verify that each time, the time from the + time function is truncated not rounded. */ + const struct timespec duration = { .tv_nsec = 100000000 }; + for (int i = 0; i < 10; i++) + { + ret = nanosleep (&duration, NULL); + TEST_VERIFY_EXIT (ret == 0); + t1 = time (NULL); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + ret = gettimeofday (&tv3, NULL); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (compare_timeval (&tv2, &tv3) < 0); + TEST_VERIFY (t1 <= tv3.tv_sec); + TEST_VERIFY (tv3.tv_usec >= 0); + TEST_VERIFY (tv3.tv_usec < 1000000); + tv2 = tv3; + } + /* Also test with the obsolete tz argument not being NULL. */ + struct timezone tz = { 0 }; + t1 = time (NULL); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + ret = gettimeofday (&tv3, &tz); + TEST_VERIFY_EXIT (ret == 0); + TEST_VERIFY (t1 <= tv3.tv_sec); + TEST_VERIFY (compare_timeval (&tv2, &tv3) <= 0); + TEST_VERIFY (tv3.tv_usec >= 0); + TEST_VERIFY (tv3.tv_usec < 1000000); + return 0; +} + +#include <support/test-driver.c> diff --git a/time/tst-time-time64.c b/time/tst-time-time64.c new file mode 100644 index 0000000000..30e8d3c86e --- /dev/null +++ b/time/tst-time-time64.c @@ -0,0 +1 @@ +#include "tst-time.c" diff --git a/time/tst-time.c b/time/tst-time.c new file mode 100644 index 0000000000..7f24bed353 --- /dev/null +++ b/time/tst-time.c @@ -0,0 +1,51 @@ +/* Test time function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <unistd.h> + +#include <support/check.h> +#include <support/test-driver.h> + +int +do_test (void) +{ + time_t t1, t2, t3, t4, t5, t6; + /* Verify that the calls to time succeed, that the value returned + directly equals that returned through the pointer passed, and + that the time does not decrease. */ + t1 = time (&t2); + TEST_VERIFY_EXIT (t1 != (time_t) -1); + TEST_VERIFY (t1 == t2); + t3 = time (NULL); + TEST_VERIFY_EXIT (t3 != (time_t) -1); + TEST_VERIFY (t3 >= t1); + /* Also verify that after sleeping, the time returned has + increased. */ + sleep (2); + t4 = time (&t5); + TEST_VERIFY_EXIT (t4 != (time_t) -1); + TEST_VERIFY (t4 == t5); + TEST_VERIFY (t4 > t3); + t6 = time (NULL); + TEST_VERIFY_EXIT (t6 != (time_t) -1); + TEST_VERIFY (t6 >= t4); + return 0; +} + +#include <support/test-driver.c> diff --git a/timezone/private.h b/timezone/private.h index 0dac6af4e3..c33041049f 100644 --- a/timezone/private.h +++ b/timezone/private.h @@ -19,19 +19,22 @@ /* PORT_TO_C89 means the code should work even if the underlying compiler and library support only C89 plus C99's 'long long' - and perhaps a few other extensions to C89. SUPPORT_C89 means the - tzcode library should support C89 callers in addition to the usual - support for C99-and-later callers; however, C89 support can trigger - latent bugs in C99-and-later callers. These macros are obsolescent, - and the plan is to remove them along with any code needed only when - they are nonzero. A good time to do that might be in the year 2029 + and perhaps a few other extensions to C89. + + This macro is obsolescent, and the plan is to remove it along with + associated code. A good time to do that might be in the year 2029 because RHEL 7 (whose GCC defaults to C89) extended life cycle support (ELS) is scheduled to end on 2028-06-30. */ #ifndef PORT_TO_C89 # define PORT_TO_C89 0 #endif + +/* SUPPORT_C89 means the tzcode library should support C89 callers + in addition to the usual support for C99-and-later callers. + This defaults to 1 as POSIX requires, even though that can trigger + latent bugs in callers. */ #ifndef SUPPORT_C89 -# define SUPPORT_C89 0 +# define SUPPORT_C89 1 #endif #ifndef __STDC_VERSION__ @@ -69,10 +72,6 @@ ** You can override these in your C compiler options, e.g. '-DHAVE_GETTEXT=1'. */ -#ifndef HAVE_DECL_ASCTIME_R -# define HAVE_DECL_ASCTIME_R 1 -#endif - #if !defined HAVE__GENERIC && defined __has_extension # if !__has_extension(c_generic_selections) # define HAVE__GENERIC 0 @@ -236,6 +235,31 @@ # include <unistd.h> /* for R_OK, and other POSIX goodness */ #endif /* HAVE_UNISTD_H */ +/* SUPPORT_POSIX2008 means the tzcode library should support + POSIX.1-2017-and-earlier callers in addition to the usual support for + POSIX.1-2024-and-later callers; however, this can be + incompatible with POSIX.1-2024-and-later callers. + This macro is obsolescent, and the plan is to remove it + along with any code needed only when it is nonzero. + A good time to do that might be in the year 2034. + This macro's name is SUPPORT_POSIX2008 because _POSIX_VERSION == 200809 + in POSIX.1-2017, a minor revision of POSIX.1-2008. */ +#ifndef SUPPORT_POSIX2008 +# if defined _POSIX_VERSION && _POSIX_VERSION <= 200809 +# define SUPPORT_POSIX2008 1 +# else +# define SUPPORT_POSIX2008 0 +# endif +#endif + +#ifndef HAVE_DECL_ASCTIME_R +# if SUPPORT_POSIX2008 +# define HAVE_DECL_ASCTIME_R 1 +# else +# define HAVE_DECL_ASCTIME_R 0 +# endif +#endif + #ifndef HAVE_STRFTIME_L # if _POSIX_VERSION < 200809 # define HAVE_STRFTIME_L 0 @@ -460,14 +484,6 @@ typedef unsigned long uintmax_t; # define ckd_mul(r, a, b) __builtin_mul_overflow(a, b, r) #endif -#if 3 <= __GNUC__ -# define ATTRIBUTE_MALLOC __attribute__((malloc)) -# define ATTRIBUTE_FORMAT(spec) __attribute__((format spec)) -#else -# define ATTRIBUTE_MALLOC /* empty */ -# define ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - #if (defined __has_c_attribute \ && (202311 <= __STDC_VERSION__ || !defined __STRICT_ANSI__)) # define HAVE___HAS_C_ATTRIBUTE true @@ -535,24 +551,27 @@ typedef unsigned long uintmax_t; # endif #endif #ifndef ATTRIBUTE_REPRODUCIBLE -# if 3 <= __GNUC__ -# define ATTRIBUTE_REPRODUCIBLE __attribute__((pure)) -# else -# define ATTRIBUTE_REPRODUCIBLE /* empty */ -# endif +# define ATTRIBUTE_REPRODUCIBLE /* empty */ #endif -#if HAVE___HAS_C_ATTRIBUTE -# if __has_c_attribute(unsequenced) -# define ATTRIBUTE_UNSEQUENCED [[unsequenced]] -# endif +/* GCC attributes that are useful in tzcode. + __attribute__((pure)) is stricter than [[reproducible]], + so the latter is an adequate substitute in non-GCC C23 platforms. */ +#if __GNUC__ < 3 +# define ATTRIBUTE_FORMAT(spec) /* empty */ +# define ATTRIBUTE_PURE ATTRIBUTE_REPRODUCIBLE +#else +# define ATTRIBUTE_FORMAT(spec) __attribute__((format spec)) +# define ATTRIBUTE_PURE __attribute__((pure)) #endif -#ifndef ATTRIBUTE_UNSEQUENCED -# if 3 <= __GNUC__ -# define ATTRIBUTE_UNSEQUENCED __attribute__((const)) -# else -# define ATTRIBUTE_UNSEQUENCED /* empty */ -# endif + +/* Avoid GCC bug 114833 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114833>. + Remove this macro and its uses when the bug is fixed in a GCC release, + because only the latest GCC matters for $(GCC_DEBUG_FLAGS). */ +#ifdef GCC_LINT +# define ATTRIBUTE_PURE_114833 ATTRIBUTE_PURE +#else +# define ATTRIBUTE_PURE_114833 /* empty */ #endif #if (__STDC_VERSION__ < 199901 && !defined restrict \ @@ -604,12 +623,8 @@ typedef time_tz tz_time_t; # undef asctime # define asctime tz_asctime -# undef asctime_r -# define asctime_r tz_asctime_r # undef ctime # define ctime tz_ctime -# undef ctime_r -# define ctime_r tz_ctime_r # undef difftime # define difftime tz_difftime # undef gmtime @@ -654,6 +669,12 @@ typedef time_tz tz_time_t; # define tzfree tz_tzfree # undef tzset # define tzset tz_tzset +# if SUPPORT_POSIX2008 +# undef asctime_r +# define asctime_r tz_asctime_r +# undef ctime_r +# define ctime_r tz_ctime_r +# endif # if HAVE_STRFTIME_L # undef strftime_l # define strftime_l tz_strftime_l @@ -679,10 +700,12 @@ typedef time_tz tz_time_t; # define DEPRECATED_IN_C23 ATTRIBUTE_DEPRECATED # endif DEPRECATED_IN_C23 char *asctime(struct tm const *); -char *asctime_r(struct tm const *restrict, char *restrict); DEPRECATED_IN_C23 char *ctime(time_t const *); +#if SUPPORT_POSIX2008 +char *asctime_r(struct tm const *restrict, char *restrict); char *ctime_r(time_t const *, char *); -ATTRIBUTE_UNSEQUENCED double difftime(time_t, time_t); +#endif +double difftime(time_t, time_t); size_t strftime(char *restrict, size_t, char const *restrict, struct tm const *restrict); # if HAVE_STRFTIME_L @@ -713,7 +736,7 @@ void tzset(void); time_t timegm(struct tm *); #endif -#if !HAVE_DECL_ASCTIME_R && !defined asctime_r +#if !HAVE_DECL_ASCTIME_R && !defined asctime_r && SUPPORT_POSIX2008 extern char *asctime_r(struct tm const *restrict, char *restrict); #endif @@ -798,10 +821,10 @@ timezone_t tzalloc(char const *); void tzfree(timezone_t); # if STD_INSPIRED # if TZ_TIME_T || !defined posix2time_z -ATTRIBUTE_REPRODUCIBLE time_t posix2time_z(timezone_t, time_t); +ATTRIBUTE_PURE time_t posix2time_z(timezone_t, time_t); # endif # if TZ_TIME_T || !defined time2posix_z -ATTRIBUTE_REPRODUCIBLE time_t time2posix_z(timezone_t, time_t); +ATTRIBUTE_PURE time_t time2posix_z(timezone_t, time_t); # endif # endif #endif @@ -973,8 +996,9 @@ enum { /* How many years to generate (in zic.c) or search through (in localtime.c). This is two years larger than the obvious 400, to avoid edge cases. - E.g., suppose a non-POSIX.1-2017 rule applies from 2012 on with transitions - in March and September, plus one-off transitions in November 2013. + E.g., suppose a rule applies from 2012 on with transitions + in March and September, plus one-off transitions in November 2013, + and suppose the rule cannot be expressed as a proleptic TZ string. If zic looked only at the last 400 years, it would set max_year=2413, with the intent that the 400 years 2014 through 2413 will be repeated. The last transition listed in the tzfile would be in 2413-09, diff --git a/timezone/tzfile.h b/timezone/tzfile.h index 3155010ed1..b154146654 100644 --- a/timezone/tzfile.h +++ b/timezone/tzfile.h @@ -76,14 +76,16 @@ struct tzhead { ** If tzh_version is '2' or greater, the above is followed by a second instance ** of tzhead and a second instance of the data in which each coded transition ** time uses 8 rather than 4 chars, -** then a POSIX-TZ-environment-variable-style string for use in handling +** then a POSIX.1-2017 proleptic TZ string for use in handling ** instants after the last transition time stored in the file ** (with nothing between the newlines if there is no POSIX.1-2017 ** representation for such instants). ** -** If tz_version is '3' or greater, the above is extended as follows. +** If tz_version is '3' or greater, the TZ string can be any POSIX.1-2024 +** proleptic TZ string, which means the above is extended as follows. ** First, the TZ string's hour offset may range from -167 -** through 167 as compared to the POSIX-required 0 through 24. +** through 167 as compared to the range 0 through 24 required +** by POSIX.1-2017 and earlier. ** Second, its DST start time may be January 1 at 00:00 and its stop ** time December 31 at 24:00 plus the difference between DST and ** standard time, indicating DST all year. diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh index 38941bbc55..ca3d82c6aa 100755 --- a/timezone/tzselect.ksh +++ b/timezone/tzselect.ksh @@ -20,12 +20,6 @@ REPORT_BUGS_TO=tz@iana.org # Korn Shell <http://www.kornshell.com/> # MirBSD Korn Shell <http://www.mirbsd.org/mksh.htm> # -# For portability to Solaris 10 /bin/sh (supported by Oracle through -# January 2027) this script avoids some POSIX features and common -# extensions, such as $(...), $((...)), ! CMD, unquoted ^, ${#ID}, -# ${ID##PAT}, ${ID%%PAT}, and $10. Although some of these constructs -# work sometimes, it's simpler to avoid them entirely. -# # This script also uses several features of POSIX awk. # If your host lacks awk, or has an old awk that does not conform to POSIX, # you can use any of the following free programs instead: @@ -45,7 +39,6 @@ set -f # Specify default values for environment variables if they are unset. : ${AWK=awk} -: ${PWD=`pwd`} : ${TZDIR=$PWD} # Output one argument as-is to standard output, with trailing newline. @@ -54,13 +47,6 @@ say() { printf '%s\n' "$1" } -# Check for awk POSIX compliance. -($AWK -v x=y 'BEGIN { exit 123 }') <>/dev/null >&0 2>&0 -[ $? = 123 ] || { - say >&2 "$0: Sorry, your '$AWK' program is not POSIX compatible." - exit 1 -} - coord= location_limit=10 zonetabtype=zone1970 @@ -117,8 +103,7 @@ then else doselect() { # Field width of the prompt numbers. - print_nargs_length="BEGIN {print length(\"$#\");}" - select_width=`$AWK "$print_nargs_length"` + select_width=${##} select_i= @@ -129,14 +114,14 @@ else select_i=0 for select_word do - select_i=`$AWK "BEGIN { print $select_i + 1 }"` + select_i=$(($select_i + 1)) printf >&2 "%${select_width}d) %s\\n" $select_i "$select_word" done;; *[!0-9]*) echo >&2 'Please enter a number in range.';; *) if test 1 -le $select_i && test $select_i -le $#; then - shift `$AWK "BEGIN { print $select_i - 1 }"` + shift $(($select_i - 1)) select_result=$1 break fi @@ -170,7 +155,7 @@ do esac done -shift `$AWK "BEGIN { print $OPTIND - 1 }"` +shift $(($OPTIND - 1)) case $# in 0) ;; *) say >&2 "$0: $1: unknown argument"; exit 1 @@ -178,11 +163,13 @@ esac # translit=true to try transliteration. # This is false if U+12345 CUNEIFORM SIGN URU TIMES KI has length 1 -# which means awk (and presumably the shell) do not need transliteration. -if $AWK 'BEGIN { u12345 = "\360\222\215\205"; exit length(u12345) == 1 }'; then - translit=true -else - translit=false +# which means the shell and (presumably) awk do not need transliteration. +# It is true if the byte string has some other length in characters, or +# if this is a POSIX.1-2017 or earlier shell that does not support $'...'. +CUNEIFORM_SIGN_URU_TIMES_KI=$'\360\222\215\205' +if test ${#CUNEIFORM_SIGN_URU_TIMES_KI} = 1 +then translit=false +else translit=true fi # Read into shell variable $1 the contents of file $2. @@ -192,10 +179,10 @@ fi # if that does not work, fall back on 'cat'. read_file() { { $translit && { - eval "$1=\`(iconv -f UTF-8 -t //TRANSLIT) 2>/dev/null <\"\$2\"\`" || - eval "$1=\`(iconv -f UTF-8) 2>/dev/null <\"\$2\"\`" + eval "$1=\$( (iconv -f UTF-8 -t //TRANSLIT) 2>/dev/null <\"\$2\")" || + eval "$1=\$( (iconv -f UTF-8) 2>/dev/null <\"\$2\")" }; } || - eval "$1=\`cat <\"\$2\"\`" || { + eval "$1=\$(cat <\"\$2\")" || { say >&2 "$0: time zone files are not set up correctly" exit 1 } @@ -403,7 +390,7 @@ while echo >&2 \ 'Please select a continent, ocean, "coord", "TZ", "time", or "now".' - quoted_continents=` + quoted_continents=$( $AWK ' function handle_entry(entry) { entry = substr(entry, 1, index(entry, "/") - 1) @@ -433,12 +420,12 @@ while sort -u | tr '\n' ' ' echo '' - ` + ) eval ' doselect '"$quoted_continents"' \ "coord - I want to use geographical coordinates." \ - "TZ - I want to specify the timezone using a POSIX.1-2017 TZ string." \ + "TZ - I want to specify the timezone using a proleptic TZ string." \ "time - I know local time already." \ "now - Like \"time\", but configure only for timestamps from now on." continent=$select_result @@ -462,16 +449,17 @@ while case $continent in TZ) - # Ask the user for a POSIX.1-2017 TZ string. Check that it conforms. + # Ask the user for a proleptic TZ string. Check that it conforms. check_POSIX_TZ_string=' BEGIN { tz = substr(ARGV[1], 2) ARGV[1] = "" tzname = ("(<[[:alnum:]+-][[:alnum:]+-][[:alnum:]+-]+>" \ "|[[:alpha:]][[:alpha:]][[:alpha:]]+)") - time = ("(2[0-4]|[0-1]?[0-9])" \ - "(:[0-5][0-9](:[0-5][0-9])?)?") - offset = "[-+]?" time + sign = "[-+]?" + hhmm = "(:[0-5][0-9](:[0-5][0-9])?)?" + offset = sign "(2[0-4]|[0-1]?[0-9])" hhmm + time = sign "(16[0-7]|(1[0-5]|[0-9]?)[0-9])" hhmm mdate = "M([1-9]|1[0-2])\\.[1-5]\\.[0-6]" jdate = ("((J[1-9]|[0-9]|J?[1-9][0-9]" \ "|J?[1-2][0-9][0-9])|J?3[0-5][0-9]|J?36[0-5])") @@ -492,7 +480,7 @@ while read tz $AWK "$check_POSIX_TZ_string" ="$tz" do - say >&2 "'$tz' is not a conforming POSIX.1-2017 timezone string." + say >&2 "'$tz' is not a conforming POSIX proleptic TZ string." done TZ_for_date=$tz;; *) @@ -507,14 +495,14 @@ while '74 degrees 3 minutes west.' read coord esac - distance_table=` + distance_table=$( $AWK \ "$output_distances_or_times" \ ="$coord" ="$TZ_COUNTRY_TABLE" ="$TZ_ZONE_TABLE" | sort -n | $AWK "{print} NR == $location_limit { exit }" - ` - regions=` + ) + regions=$( $AWK ' BEGIN { distance_table = substr(ARGV[1], 2) @@ -526,13 +514,13 @@ while } } ' ="$distance_table" - ` + ) echo >&2 'Please select one of the following timezones,' echo >&2 'listed roughly in increasing order' \ "of distance from $coord". doselect $regions region=$select_result - tz=` + tz=$( $AWK ' BEGIN { distance_table = substr(ARGV[1], 2) @@ -546,22 +534,22 @@ while } } ' ="$distance_table" ="$region" - `;; + );; *) case $continent in now|time) minute_format='%a %b %d %H:%M' - old_minute=`TZ=UTC0 date +"$minute_format"` + old_minute=$(TZ=UTC0 date +"$minute_format") for i in 1 2 3 do - time_table_command=` + time_table_command=$( $AWK \ -v output_times=1 \ "$output_distances_or_times" \ = = ="$TZ_ZONE_TABLE" - ` - time_table=`eval "$time_table_command"` - new_minute=`TZ=UTC0 date +"$minute_format"` + ) + time_table=$(eval "$time_table_command") + new_minute=$(TZ=UTC0 date +"$minute_format") case $old_minute in "$new_minute") break esac @@ -569,11 +557,11 @@ while done echo >&2 "The system says Universal Time is $new_minute." echo >&2 "Assuming that's correct, what is the local time?" - sorted_table=`say "$time_table" | sort -k2n -k2,5 -k1n` || { + sorted_table=$(say "$time_table" | sort -k2n -k2,5 -k1n) || { say >&2 "$0: cannot sort time table" exit 1 } - eval doselect ` + eval doselect $( $AWK ' BEGIN { sorted_table = substr(ARGV[1], 2) @@ -590,10 +578,10 @@ while } } ' ="$sorted_table" - ` + ) time=$select_result continent_re='^' - zone_table=` + zone_table=$( $AWK ' BEGIN { time = substr(ARGV[1], 2) @@ -609,13 +597,13 @@ while } } ' ="$time" ="$time_table" - ` - countries=` + ) + countries=$( $AWK \ "$output_country_list" \ ="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" | sort -f - ` + ) ;; *) continent_re="^$continent/" @@ -623,16 +611,16 @@ while esac # Get list of names of countries in the continent or ocean. - countries=` + countries=$( $AWK \ "$output_country_list" \ ="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" | sort -f - ` + ) # If all zone table entries have comments, and there are # at most 22 entries, asked based on those comments. # This fits the prompt onto old-fashioned 24-line screens. - regions=` + regions=$( $AWK ' BEGIN { TZ_ZONE_TABLE = substr(ARGV[1], 2) @@ -653,7 +641,7 @@ while print comment[i] } ' ="$zone_table" - ` + ) # If there's more than one country, ask the user which one. case $countries in @@ -669,7 +657,7 @@ while # Get list of timezones in the country. - regions=` + regions=$( $AWK ' BEGIN { country = substr(ARGV[1], 2) @@ -696,7 +684,7 @@ while } } ' ="$country" ="$TZ_COUNTRY_TABLE" ="$zone_table" - ` + ) # If there's more than one region, ask the user which one. case $regions in @@ -707,7 +695,7 @@ while esac # Determine tz from country and region. - tz=` + tz=$( $AWK ' BEGIN { country = substr(ARGV[1], 2) @@ -735,7 +723,7 @@ while } } ' ="$country" ="$region" ="$TZ_COUNTRY_TABLE" ="$zone_table" - ` + ) esac # Make sure the corresponding zoneinfo file exists. @@ -754,14 +742,11 @@ while extra_info= for i in 1 2 3 4 5 6 7 8 do - TZdate=`LANG=C TZ="$TZ_for_date" date` - UTdate=`LANG=C TZ=UTC0 date` - if $AWK ' - function getsecs(d) { - return match(d, /.*:[0-5][0-9]/) ? substr(d, RLENGTH - 1, 2) : "" - } - BEGIN { exit getsecs(ARGV[1]) != getsecs(ARGV[2]) } - ' ="$TZdate" ="$UTdate" + TZdate=$(LANG=C TZ="$TZ_for_date" date) + UTdate=$(LANG=C TZ=UTC0 date) + TZsecsetc=${TZdate##*[0-5][0-9]:} + UTsecsetc=${UTdate##*[0-5][0-9]:} + if test "${TZsecsetc%%[!0-9]*}" = "${UTsecsetc%%[!0-9]*}" then extra_info=" Selected time is now: $TZdate. @@ -801,7 +786,7 @@ done case $SHELL in *csh) file=.login line="setenv TZ '$tz'";; -*) file=.profile line="TZ='$tz'; export TZ" +*) file=.profile line="export TZ='$tz'" esac test -t 1 && say >&2 " diff --git a/timezone/zdump.c b/timezone/zdump.c index 7d99cc74bd..e817873337 100644 --- a/timezone/zdump.c +++ b/timezone/zdump.c @@ -89,7 +89,7 @@ static bool warned; static bool errout; static char const *abbr(struct tm const *); -ATTRIBUTE_REPRODUCIBLE static intmax_t delta(struct tm *, struct tm *); +static intmax_t delta(struct tm *, struct tm *); static void dumptime(struct tm const *); static time_t hunt(timezone_t, time_t, time_t, bool); static void show(timezone_t, char *, time_t, bool); @@ -97,7 +97,7 @@ static void showextrema(timezone_t, char *, time_t, struct tm *, time_t); static void showtrans(char const *, struct tm const *, time_t, char const *, char const *); static const char *tformat(void); -ATTRIBUTE_REPRODUCIBLE static time_t yeartot(intmax_t); +ATTRIBUTE_PURE_114833 static time_t yeartot(intmax_t); /* Is C an ASCII digit? */ static bool @@ -134,7 +134,7 @@ size_overflow(void) /* Return A + B, exiting if the result would overflow either ptrdiff_t or size_t. A and B are both nonnegative. */ -ATTRIBUTE_REPRODUCIBLE static ptrdiff_t +ATTRIBUTE_PURE_114833 static ptrdiff_t sumsize(ptrdiff_t a, ptrdiff_t b) { #ifdef ckd_add @@ -162,7 +162,7 @@ xstrsize(char const *str) /* Return a pointer to a newly allocated buffer of size SIZE, exiting on failure. SIZE should be positive. */ -ATTRIBUTE_MALLOC static void * +static void * xmalloc(ptrdiff_t size) { void *p = malloc(size); @@ -932,7 +932,7 @@ showextrema(timezone_t tz, char *zone, time_t lo, struct tm *lotmp, time_t hi) # include <stdarg.h> /* A substitute for snprintf that is good enough for zdump. */ -ATTRIBUTE_FORMAT((printf, 3, 4)) static int +static int my_snprintf(char *s, size_t size, char const *format, ...) { int n; diff --git a/timezone/zic.c b/timezone/zic.c index 00f00e307a..cf8e79dff4 100644 --- a/timezone/zic.c +++ b/timezone/zic.c @@ -470,7 +470,7 @@ size_overflow(void) memory_exhausted(_("size overflow")); } -ATTRIBUTE_REPRODUCIBLE static ptrdiff_t +ATTRIBUTE_PURE_114833 static ptrdiff_t size_sum(size_t a, size_t b) { #ifdef ckd_add @@ -484,7 +484,7 @@ size_sum(size_t a, size_t b) size_overflow(); } -ATTRIBUTE_REPRODUCIBLE static ptrdiff_t +ATTRIBUTE_PURE_114833 static ptrdiff_t size_product(ptrdiff_t nitems, ptrdiff_t itemsize) { #ifdef ckd_mul @@ -499,7 +499,7 @@ size_product(ptrdiff_t nitems, ptrdiff_t itemsize) size_overflow(); } -ATTRIBUTE_REPRODUCIBLE static ptrdiff_t +ATTRIBUTE_PURE_114833 static ptrdiff_t align_to(ptrdiff_t size, ptrdiff_t alignment) { ptrdiff_t lo_bits = alignment - 1, sum = size_sum(size, lo_bits); @@ -523,7 +523,7 @@ memcheck(void *ptr) return ptr; } -ATTRIBUTE_MALLOC static void * +static void * emalloc(size_t size) { return memcheck(malloc(size)); @@ -535,7 +535,7 @@ erealloc(void *ptr, size_t size) return memcheck(realloc(ptr, size)); } -ATTRIBUTE_MALLOC static char * +static char * estrdup(char const *str) { return memcheck(strdup(str)); @@ -1435,7 +1435,7 @@ relname(char const *target, char const *linkname) /* Return true if A and B must have the same parent dir if A and B exist. Return false if this is not necessarily true (though it might be true). Keep it simple, and do not inspect the file system. */ -static bool +ATTRIBUTE_PURE_114833 static bool same_parent_dirs(char const *a, char const *b) { for (; *a == *b; a++, b++) @@ -2982,10 +2982,10 @@ rule_cmp(struct rule const *a, struct rule const *b) return a->r_dayofmonth - b->r_dayofmonth; } -/* Store into RESULT a POSIX.1-2017 TZ string that represent the future +/* Store into RESULT a proleptic TZ string that represent the future predictions for the zone ZPFIRST with ZONECOUNT entries. Return a compatibility indicator (a TZDB release year) if successful, a - negative integer if no such TZ string exissts. */ + negative integer if no such TZ string exists. */ static int stringzone(char *result, struct zone const *zpfirst, ptrdiff_t zonecount) { @@ -3177,8 +3177,7 @@ outzone(const struct zone *zpfirst, ptrdiff_t zonecount) if (noise) { if (!*envvar) warning("%s %s", - _("no POSIX.1-2017 environment variable" - " for zone"), + _("no proleptic TZ string for zone"), zpfirst->z_name); else if (compat != 0) { /* Circa-COMPAT clients, and earlier clients, might @@ -3442,7 +3441,7 @@ outzone(const struct zone *zpfirst, ptrdiff_t zonecount) if (do_extend) { /* ** If we're extending the explicitly listed observations for - ** 400 years because we can't fill the POSIX.1-2017 TZ field, + ** 400 years because we can't fill the proleptic TZ field, ** check whether we actually ended up explicitly listing ** observations through that period. If there aren't any ** near the end of the 400-year period, add a redundant @@ -3627,7 +3626,7 @@ lowerit(char a) } /* case-insensitive equality */ -ATTRIBUTE_REPRODUCIBLE static bool +ATTRIBUTE_PURE_114833 static bool ciequal(register const char *ap, register const char *bp) { while (lowerit(*ap) == lowerit(*bp++)) @@ -3636,7 +3635,7 @@ ciequal(register const char *ap, register const char *bp) return false; } -ATTRIBUTE_REPRODUCIBLE static bool +ATTRIBUTE_PURE_114833 static bool itsabbr(register const char *abbr, register const char *word) { if (lowerit(*abbr) != lowerit(*word)) @@ -3652,7 +3651,7 @@ itsabbr(register const char *abbr, register const char *word) /* Return true if ABBR is an initial prefix of WORD, ignoring ASCII case. */ -ATTRIBUTE_REPRODUCIBLE static bool +ATTRIBUTE_PURE_114833 static bool ciprefix(char const *abbr, char const *word) { do @@ -3762,7 +3761,7 @@ time_overflow(void) exit(EXIT_FAILURE); } -ATTRIBUTE_REPRODUCIBLE static zic_t +ATTRIBUTE_PURE_114833 static zic_t oadd(zic_t t1, zic_t t2) { #ifdef ckd_add @@ -3776,7 +3775,7 @@ oadd(zic_t t1, zic_t t2) time_overflow(); } -ATTRIBUTE_REPRODUCIBLE static zic_t +ATTRIBUTE_PURE_114833 static zic_t tadd(zic_t t1, zic_t t2) { #ifdef ckd_add diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 63adf0e8ef..37a44e62c3 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -264,7 +264,7 @@ CFLAGS-wcstod_l.c += $(strtox-CFLAGS) $(config-cflags-wno-ignored-attributes) CFLAGS-wcstold_l.c += $(strtox-CFLAGS) $(config-cflags-wno-ignored-attributes) CFLAGS-wcstof128_l.c += $(strtox-CFLAGS) CFLAGS-wcstof_l.c += $(strtox-CFLAGS) $(config-cflags-wno-ignored-attributes) -CPPFLAGS-tst-wchar-h.c += $(no-fortify-source),-D_FORTIFY_SOURCE=2 +CPPFLAGS-tst-wchar-h.c += $(no-fortify-source) -D_FORTIFY_SOURCE=2 CFLAGS-wcschr.c += $(config-cflags-wno-ignored-attributes) CFLAGS-wmemchr.c += $(config-cflags-wno-ignored-attributes) |